BitbucketのプライベートリポジトリをJenkinsからSSHでクローンする

仕事でBitbucketつかってますか? 僕はつかってます。

Bitbucketにリポジトリを作成して継続的インテグレーションを行うときに困るのがプライベートリポジトリのクローンです。Jenkinsからクローンできないとまずい。

この問題を解決するために、以前は専用のアカウントを作成してたりして対処していました。*1。面倒ですね。

最近この問題を解決するためにDeployment Keysという機能がサポートされました*2。このDeployment Keysの使い方を簡単に解説したいと思います。

Jenkins用の鍵を作成

Jenkinsの実行ユーザでsshの鍵を作成します。yumやapt-getでインストールしている場合は、jenkinsユーザが追加されていると思います。sudoして鍵を作成します。

$ sudo su - jenkins
# 鍵を作成

sudoしたくない場合、できない場合は次のシェルスクリプトをJenkinsのJobとして実行するとよいでしょう。

#!/bin/bash
if ! test -f $HOME/.ssh/id_rsa.bitbucket; then
  ssh-keygen -t rsa -N "" -f $HOME/.ssh/id_rsa.bitbucket
fi

touch $HOME/.ssh/config
if ! grep -q bitbucket $HOME/.ssh/config; then
  echo "Host bitbucket.org"                     >> $HOME/.ssh/config
  echo "  Hostname bitbucket.org"               >> $HOME/.ssh/config
  echo "  IdentityFile ~/.ssh/id_rsa.bitbucket" >> $HOME/.ssh/config
  echo "  StrictHostKeyChecking no"             >> $HOME/.ssh/config
fi

cat $HOME/.ssh/id_rsa.bitbucket.pub

実際の設定はこんな感じです。

実行すると公開鍵がコンソールログに出力されます。この公開鍵を次のステップで使います。

Deployment Keyを設定

JenkinsからクローンしたいリポジトリのAdminタブからDeployment Keyを登録します。

Jenkinsからクローン

準備は整いました。Jenkinsにsshのurlを設定してクローンします。

これでSSHを使ってクローンできます。

*1:個人アカウントで流用すると個人アカウントのプライベートリポジトリもJenkinsがクローンできてしまうので危険です

*2:githubなどを使っている人はおなじみだと思います