JenkinsにBitbucketからビルド命令を出す際にIDとPasswordを埋め込まないようにする

この記事は投稿日から1年以上が経過しています。

前の記事でBitbucketにpushしたのをトリガーにJenkinsでOctopressをデプロイするというのをやったのだが、このときは認証なしでJobの実行できるようになってしまっていた。
つまりこのままだと自分のJenkinsは認証なしで全てのJobが実行できてしまうという状態でよろしくない。
ひとつの解決索としてビルド命令用のユーザを作り、そのIDとPasswordをURLに直接埋め込んでしまうという方法も考えられるが、今回はそれを極力しない方向でがんばりたいと思う。

JenkinsにBitbucketからアクセスするためのユーザを追加

まずはBitbucketからJenkinsにアクセスする専用のユーザを作る。

※ ユーザの追加方法については このあたり を参照

今回は、bitbucket というユーザを追加した。

また、 Manage Jenkins -> Configure System で、

  • Access Control
    • Authorization
    • Matrix-based security
      • bitbucketユーザに JobRead だけチェック

としておいて、bitbucketユーザが最低限のことのみ可能なように設定しておく。

このとき、Anonymousユーザの JobRead にチェックがついていれば外しておく。

Jenkinsへのビルド命令専用のドメインを追加

これまでは jenkins.yourdomain というドメインでJenkinsにアクセスさせていたとして、ビルド命令専用の push-to-jenkins.yourdomain を追加した。
これはnginxが外部からのビルド命令だと分かるようにするための目印としての意味合いなので、ドメインを追加する以外の方法でも良い。

nginxに設定追加

nginxのconfに、以下のようにpush-to-jenkins.yourdomainへのアクセスをBasic認証つきでローカルのJenkinsのURLに委譲するよう設定を追加する。

server {
    listen 80;
    server_name push-to-jenkins.yourdomain;
    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Authorization "Basic XXXXXX";
    }
}

XXXXXX の部分には実際には bitbucket:yourpassword というBasic認証のIDとPasswordの文字列をBase64エンコードした文字列を入れる必要がある。
Base64エンコードの方法が分からない場合は このあたり のサイトでエンコードした文字列をGETするのが手っ取り早い。

設定後にnginxを再起動しておくこと。

Bitbucketのほうの設定

該当リポジトリの Admin タブの Services を選択。

POSTの設定項目を

http://push-to-jenkins.yourdomain/job/deploy-octopress/build?token=a-word-you-like

に変更しておく。

おしまい

以上の設定がうまく言っていれば、Bitbucketへのgit push origin sourceでOctopressのデプロイが自動的にできるはず。
また、このときベーシック認証のIDとPasswordがインターネット上にさらされることもない。

2012/08/19 追記

なお、Twitterで@croquette0212さんから

と教えていただきました。
この方法だと外部(ここではBitbucket)から叩くURLになんとジョブ名さえ指定する必要がありません。このNotifyを受けたJenkinsのほうで自動でジョブをさらってスケジューリングしてくれるとのことです。
また、このNotifyそのものがジョブを実行するわけではなくあくまでもJenkinsに対する通知だけなので、ジョブの実行権限のあるユーザでURLを叩くにはどうしたらよいだろう?とかセキュリティのことをごたごた考えずに済みます。Jenkinsを運用しているサーバが該当のGitリポジトリをcloneできる状態ならOKなようでとても楽そうです。
詳しくは GitHubとJenkinsの連携 をご参照ください。

所の執筆・監修した書籍

iOS 11 Programming

iOS 11 Programming

  • 著者:堤 修一,吉田 悠一,池田 翔,坂田 晃一,加藤 尋樹,川邉 雄介,岸川 克己,所 友太,永野 哲久,加藤 寛人,
  • 製本版,電子版
  • PEAKSで購入する