Jenkinsとbitbucket private repository の連携にはnotifyCommitが便利
とあるサイトのコンテンツ管理を 、
- bitbucket のプライベートリポジトリ
- Jenkinsはユーザ認証有り
- pushしたら、httpサーバ側で自動的にpull
- サイト更新されてる(゚д゚)ウマー
ってやろうとしてて、軽くハマったので過程と解決策。
最初:ユーザ認証なしのJenkins + Token付きのビルドリクエスト
bitbucketの[Admin]->[Service]からToken付きのビルドリクエストをPOSTするようにして、要件の1,3,4は達成。
Jenkinsユーザ認証かけとこねー
誰それ構わずリクエスト送られても困るんで、ユーザ認証をかけておこうかと。
(Jenkinsでユーザ認証設定)
動かねー orz...bitbucketさんもリクエストを送れないようになったので当然です。
解決策:git plugin
git pluginにはnotifyCommitという機能があるらしいというのがわかりました。
- ユーザ認証が掛かった Jenkins vs. Bitbucket の private repository ファイッ!
- Polling must die: triggering Jenkins builds from a git hook
これはアツイ。早速以下のように設定。
- bitbucketの[Admin]->[Service]からPOSTするURLを変更。
http://my.domain:8080/git/notifyCommit?url=git@bitbucket.org:user/repos.git
- Jenkinsのビルド・トリガにて、SCM Pollingに変更。スケジュールは空白。
動いてる(∩´∀`)∩ワーイ。これで要件の2も達成。さらには、ブランチ毎のJobを作っている場合でも必要なやつだけビルドしてくれるのもわかりました。
まとめ
- ユーザ認証かけたJenkinsとprivate repoの連携には git pluginの機能を使うと楽
- TOKENや、ジョブ名を指定する必要なし
- Notifyを受けたJenkinsのほうでジョブを探索してスケジューリング
- ブランチ毎のJobを作っている場合でも必要なやつだけビルド
なにこの素敵プラグイン。