前提
- jenkinsにはjenkinsのログインとbasic認証がかかっている
- gitのリモートリポジトリはbacklogを使用
- 諸事情によりヌーラボが提供している Jenkins Backlog Pluginは利用しない
注意事項
- Backlogのwebhookの仕様
- pull-requestイベントからbranch名を取得できないっぽい
- pull-requestからjenkinsをbuildできない
- pushはbranch名を取得できる
- 不要なpush(remote branchの削除)等は自前で判断する必要がある
- pull-requestイベントからbranch名を取得できないっぽい
完成イメージ
- gitのpushにhook(webhook)して、jenkins上の対象のbranchのbuildを実行する
- pull-requestに対してhookしたかったが先述の理由で断念
- branch名を渡したいのでHubotないしは何らかしらの方法で連携する必要がある
- BacklogでWebhookが追加されたよ!!!Hubot経由でSlackに連携してみた - Qiita
- 今回は自前でgolangで書きました
jenkins側の設定
-
http://yuroyoro.hatenablog.com/entry/2012/12/20/175205
- jenkinsサーバーのapacheで.htpasswdを設定
-
jenkins自身のログイン認証が有効
- 以上二つとも設定されている場合認証機能が競合しwebhookからのリクエストが実行できない(Basic認証が通らない)ため匿名ユーザーにビルドのみ権限を与えることで回避できる。
-
Jenkins
>グローバルセキュリティの設定
>アクセス制御
から匿名ユーザーに以下の権限を付与する
全体 Read |
ジョブ Read |
左記以外 |
---|---|---|
○ | ○ | × |
- ビルド対象のジョブ設定の
リモートからビルド
にチェックを入れる-
認証トークン
には適当なランダム文字列を入力
-
- 以上でcurlコマンドでbranchを指定してbuildが可能になったことを確認する
# {PASSWORD}は.htpasswdのものを使用
curl -i -u {USERNAME}:{PASSWORD} 'http://{YOUR_JENKINS_SERVER}/jenkins/job/{YOU_JENKINS_JOB_NAME}/buildWithParameters?branch={BRANCH_NAME}&token={TOKEN}'
backlog側の設定
-
https://{YOUR-BACKLOG-DOMAIN}.backlog.jp/settings/webhook/{YOUR-PROJECT-NAME}/create
-
WebHook URL
にwebhookを受け付けてjenkinsにリクエストするアプリのURLを書く -
バージョン管理に関するイベント
>Gitプッシュ
にのみチェックを入れ、Webhookを追加する
を押す -
以上でpushした際にwebhookがアプリに飛び、アプリからビルドのリクエストが飛べば問題なし
まとめ
- .htpasswdではまったので.htpasswdはないほうが望ましいのでは
- Jenkins Backlog Pluginを使ったほうが諸々楽にできそう(未調査)