Jenkinsとbitbucket private repository の連携にはnotifyCommitが便利

とあるサイトのコンテンツ管理を 、

  1. bitbucket のプライベートリポジトリ
  2. Jenkinsはユーザ認証有り
  3. pushしたら、httpサーバ側で自動的にpull
  4. サイト更新されてる(゚д゚)ウマー

ってやろうとしてて、軽くハマったので過程と解決策。

最初:ユーザ認証なしのJenkins + Token付きのビルドリクエスト

bitbucketの[Admin]->[Service]からToken付きのビルドリクエストをPOSTするようにして、要件の1,3,4は達成。

http://my.domain:8080/job/jabba/build?token=jabbajabbajabba

Jenkinsユーザ認証かけとこねー

誰それ構わずリクエスト送られても困るんで、ユーザ認証をかけておこうかと。
(Jenkinsでユーザ認証設定)

動かねー orz...bitbucketさんもリクエストを送れないようになったので当然です。

解決策:git plugin

git pluginにはnotifyCommitという機能があるらしいというのがわかりました。

これはアツイ。早速以下のように設定。

  • bitbucketの[Admin]->[Service]からPOSTするURLを変更。

http://my.domain:8080/git/notifyCommit?url=git@bitbucket.org:user/repos.git

  • Jenkinsのビルド・トリガにて、SCM Pollingに変更。スケジュールは空白。

動いてる(∩´∀`)∩ワーイ。これで要件の2も達成。さらには、ブランチ毎のJobを作っている場合でも必要なやつだけビルドしてくれるのもわかりました。

まとめ

  1. ユーザ認証かけたJenkinsとprivate repoの連携には git pluginの機能を使うと楽
  2. TOKENや、ジョブ名を指定する必要なし
  3. Notifyを受けたJenkinsのほうでジョブを探索してスケジューリング
  4. ブランチ毎のJobを作っている場合でも必要なやつだけビルド

なにこの素敵プラグイン。