GithubからWebhookでJenkinsのジョブを自動実行
※ あまり深いところからやるとこんがらがるので、浅くローカルで外部からjobを実行するところから行います。
1 ジョブを実行
上記の記事を参考に、ジョブを作成し、認証トークン、APIトークンを作成。
# curl -X POST -u "<ユーザID>:<APIトークン>" http://localhost:8080/job/<ジョブ名>/build?token=<トークン名> curl -X POST -u "tikyuu:xxxxxxxxx" http://localhost:8080/job/RemoteTest/build?token=test_token
無事にjobが実行されたら成功。
2 ローカルからパブリックネットワークに変更
githubのwebhookを受け取るには、そのエンドポイントをパブリックネットワーク上に公開する必要がある。 (つまり、localhostは使えない)
そこで、 UltraHook というすばらしいサービスを利用する。
パブリックネットワーク上にエンドポイントをつくり、それに対するリクエストをローカルホストのエンドポイントにトンネルしてくれるサービス
gem install ultrahook
ultrahook stripe 8080
3 jenkinsとgithubを連携
- 1 githubで適当にリポジトリ作成
- 2 jenkinsでjob作成
- 3 一回ビルド実行を行い、成功するか確認
- 4 githubでwebhooksを設定
- 4.1 Payload URLの指定
- 4.2 Content Type
application/x-www-form-urlencoded
- 4.3 Just the push event.
- 4.4 Active ✔︎
- 4.5 Update webhook
# http://<ユーザID>:<APIトークン>@stripe.<登録したユーザ名>.ultrahook.com/job/<ジョブ名>/build?token=<トークン名> http://tikyuu:xxxxxxxxx@stripe.usertikyuu.ultrahook.com/job/GithubTest/build?token=test_token2
これでpushしたときに自動的にjobが実行される。
まとめ
- 簡単ではなかった。
ultrahook stripe 8080
を起動し忘れるとhookできない。- buildWithParametersでトークンを指定するとなんかエラーがでる