LoginSignup
23

More than 5 years have passed since last update.

GitHubを中心とした開発プロセス 自動化

Last updated at Posted at 2016-06-28

GitHubを中心とした開発プロセスの自動化編です

[github webhooks] GitHub上で特定のイベントがあった時にAPIを呼び出す

特定のイベントを見逃さない様にしよう

どんな風に使う?

  • Hubotと連携してチャットに通知する
    • PullRequestが出来た時
    • Issueがマージされた時
    • コメントをした時
    • etc...
  • デプロイAPIを実行して自動デプロイをする
  • releaseブランチがマージされたタイミングでリリース通知を出す

設定画面
webhooks-p1.png

結構細かくイベントが用意されている
webhooks-p2.png

[githooks] Gitの特定のコマンド発行の前後でスクリプトを実行する

意図しないコミットを防いだり、必ず行う作業を自動化しよう

githooksとは?

  • gitに用意された任意のタイミングでスクリプトを実行することが出来る
  • タイミングは色々ある
    • commit前後
    • rebase前後
    • push時
    • etc...

.git/hooksを見てみよう

$ ls .git/hooks

applypatch-msg.sample     post-update.sample        pre-commit.sample         pre-rebase.sample         update.sample
commit-msg.sample         pre-applypatch.sample     pre-push.sample           prepare-commit-msg.sample

どんな風に使う?

例えば

スクリプト 使い方例
pre-commit masterにcommitさせない
debug文が入ってないか検査する
pre-push テストを実行する
post-update 何らかの通知を出す

例 masterにcommitさせない

pre-commitを編集してmasterにはcommitできない様にしてみた
終了コードが1だとcommitすることが出来ない

pre-commit
#!/bin/sh

branch=`git rev-parse --abbrev-ref HEAD`

if [ $branch = "master" ]; then
  echo "You can't commit on master branch"
  exit 1
fi
$ git commit -m 'fixes #13'
You can't commit on master branch

実行出来れば例えばPythonでも良いみたい

pre-commit
#!/usr/bin/env python

import sys
import commands

branch = commands.getoutput('git rev-parse --abbrev-ref HEAD')

if branch == 'master':
  print "You can't commit on master branch"
  sys.exit(1)

参考

git webhooksとgithooksの違い

webhooksはGitHub上での操作のフックなので、IssueやPullRequestの作成やコメントなどのフックが主な用途だと思う
対してgithooksはgitコマンドに対するフックなのでcommitやrebase操作などをフックするためのものだと思う

また、githooksは.git/hooks(git管理外のディレクトリ)で管理するので、自分用のスクリプトを作ったり、GitLabやBitbucketでも使えると思う

[jenkins github pull request builder] PullRequestがマージされる際にJenkinsでビルドする

PullRequestがマージされる際にコンフリクトやテスト失敗があってはならない

Jenkinsを使っている場合はgithub pull request builderというJenkinsプラグインを入れてみよう
ちょっと設定が面倒だけど、PullRequestをマージする時の安心感がとても向上するぞ

PullRequestのマージ前にdevelopとマージしてユニットテストを実行する様に設定した例

developとコンフリクトしたり、テストが通らなかった場合はマージボタンが押せない!
jenkins-fail.png

問題なかった場合はマージボタンが押せるので、安心してマージ出来る
jenkins-success.png

設定

設定について書くとそれだけで大きな1記事になっちゃうので、参考資料の紹介にとどめさせていただきます

よろしければ他記事もどうぞ

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
23