jenkinsのghithub連携
仕組みを理解せず説明文眺めながら適当に触ったらやっぱり動かなかったので、メモ。
目標
こんな感じのジョブを作る。
- masterにpushされたら
npm run build
して- commitしてpushする
jenkins の push 検知について
jenkinsがどうやってrepositoryのpushを検知しているのか?
これは webhook と呼ばれる方法を使っているらしい。 webhook とは、何かイベントが発生する(リソースに変化がある)と、予め指定されたurlにPOST等のhttpクエリを投げるシンプルな仕組みのこと。
なので、jenkins側の設定はもちろん、github側にもイベントが発生した時にjenkinsに伝えるための設定が必要。
github側の設定
設定したいrepositoryのページ -> Settings -> Webhooks -> Add webhook
Payload URL に https://jenkins.example.com/github-webhook/
、Content typeはjsonにした。
200と出れば成功。
jenkins job
フリースタイル・プロジェクトのビルド を選択。
チェックする項目は以下の通り。
- General - GitHub project
- ソースコード管理 - Git
- ソースコード管理 - 追加処理 - custom user name/e-mail address
- これを設定しないと、ユーザ名jenkinsとしてコミットされる。
- ビルド・トリガー - GitHub hook trigger for GITScm polling
- ビルド
- 後述
- ビルド後の処理 - ビルド後の処理の追加 - Git Publisher
- ビルド成功時のみプッシュ
- 結果をマージ
- ブランチ - master / origin
ビルド手順は以下の2つ。
npm i npm run build
if [ `git diff | wc -l` -eq 0 ]; then echo "no push" else git add . git commit -m "bot: build project" fi
ビルド後の処理 の Git Publisher はpushしかしないので、コミットする場合は自分で処理を書く必要がある。
テスト
Schedule a build してみて、実際に動くかどうか確かめてみる。
おまけ
この記事書いてる途中にjenkinsが504を返してきた。
topコマンドを見てみるとこんな状況
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1170 jenkins 20 0 2374428 306800 10332 S 0.0 62.2 35:33.72 java 878 root 20 0 635088 9856 0 S 0.0 2.0 4:33.98 dockerd 888 root 20 0 661516 4260 0 S 0.0 0.9 23:38.16 containerd
要らないプラグインをアンインストールして様子見…