概要
githubでpushされたら、Jobを起動して、Pushの内容によって次のJobに繋げる処理をシェルで書きます。
シェルで書いておくメリットは、コマンドレベルで何をしているのかが理解できることでしょう。
インストール
jenkins
homebrewで入れてます。
$ brew update
$ brew cask install java
$ brew install jenkins
設定はネットで探せばすぐ出てくるので割愛。
jq
シェルでjsonを扱うツールです。githubのpushを解析するのに利用します。
$ brew install jq
Github
Github APIを利用するためトークンを発行します。
トークンは、githubのページを参考に作成してください。
pushをjenkinsに知らせるためgithubのWebHookで設定します。
Add Service
で Jenkins (GitHub plugin)
を選択します。
Jenkins hook url
で以下のように入力して、Activeにチェックを入れておきます。
http://<userid>:<password>@<ホスト名>:8080/job//buildWithParameters
想定運用
Gitでpushをしたら、ブランチごとのJobを呼び出します。
WIPなPull Requestで運用するので、featureブランチやbugfixブランチの場合は、すぐにレビューをして欲しいので、チャットに送信します。(今回はChatworkに送っています)
すべてのブランチで単体テストを動作させるJobを呼びます。
Job
JenkinsのGUI設定
まずは、GUI上で記述します
- ビルドのパラメータ化にチェックを入れ、以下のようにします。
- ビルドのシェルの実行を記述します。
最初のif文で、branchを削除した場合やプログラムによってpushされてきた(github-bot-userはプログラムでpushするときに利用しているユーザ)場合は無視するようにしています。
ブランチがreview
と release
の場合にビルドしてFabricで転送するJobを呼びます。(他の記事を参照)
また、feature.*
や bugfix.*
ブランチの場合は、チャットで知らせるようにしています。
あとは、単体テスト用のJobを呼び出しています。(他の記事を参照)
#!/bin/bash -l
set -eux
chatworkToken=XXXXXXXXXX
deleted=`echo $payload | jq -r '.deleted'`
author=`echo $payload | jq -r '.head_commit.author.name'`
if [[ $deleted != "true" ]] && [[ $author != "github-bot-user" ]]; then
GIT_BRANCH=`echo $payload | jq -r '.ref' | sed "s/refs\/heads\///"`
if [[ $GIT_BRANCH =~ review.* ]]; then
curl -X POST "http://<ホスト名>:8080/job/<Fabric転送するJOB名>/buildWithParameters?server=develop&branch=${GIT_BRANCH}"
elif [[ $GIT_BRANCH =~ release.* ]]; then
curl -X POST "http://<ホスト名>:8080/job/<Fabric転送するJOB名>/buildWithParameters?server=staging&branch=${GIT_BRANCH}"
elif [[ $GIT_BRANCH =~ (feature|bugfix).* ]]; then
pusher=`echo $payload | jq -r '.pusher.name'`
curl -X POST -H "X-ChatWorkToken: ${chatworkToken}" -d "body=${pusher}が${GIT_BRANCH}にPushしたのでレビューして。" "https://api.chatwork.com/v1/rooms/<ルームID>/messages"
fi
curl -X POST "http://<ホスト名>:8080/job/<単体テストのJOB名>/buildWithParameters?branch=${GIT_BRANCH}"
fi