shonen.hateblo.jp

やったこと,しらべたことを書く.

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   

これはひどい

要らないプラグインをアンインストールして様子見…