LoginSignup
5
5

More than 5 years have passed since last update.

Jenkins Pluginに頼らずシェルだけでJobを構築する(github webhook編)

Last updated at Posted at 2016-07-12

概要

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 ServiceJenkins (GitHub plugin) を選択します。

github-webhook.png

Jenkins hook url で以下のように入力して、Activeにチェックを入れておきます。

http://<userid>:<password>@<ホスト名>:8080/job//buildWithParameters

想定運用

Gitでpushをしたら、ブランチごとのJobを呼び出します。
WIPなPull Requestで運用するので、featureブランチやbugfixブランチの場合は、すぐにレビューをして欲しいので、チャットに送信します。(今回はChatworkに送っています)
すべてのブランチで単体テストを動作させるJobを呼びます。

Job

JenkinsのGUI設定

まずは、GUI上で記述します

  • ビルドのパラメータ化にチェックを入れ、以下のようにします。

github-parameter.png

  • ビルドのシェルの実行を記述します。

最初のif文で、branchを削除した場合やプログラムによってpushされてきた(github-bot-userはプログラムでpushするときに利用しているユーザ)場合は無視するようにしています。
ブランチがreviewreleaseの場合にビルドして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
5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5