GithubからWebhookでJenkinsのジョブを自動実行

※ あまり深いところからやるとこんがらがるので、浅くローカルで外部からjobを実行するところから行います。

1 ジョブを実行

Jenkinsのジョブをリモートから実行する方法

上記の記事を参考に、ジョブを作成し、認証トークン、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でトークンを指定するとなんかエラーがでる