1
5

More than 5 years have passed since last update.

GitHub Webhookを簡単に使える ghooks-cmd-runner のご紹介

Posted at

この記事はOSS紹介 Advent Calendar 2017の8日目の記事です。OSS紹介 Advent Calendar 2017では、使っている便利なOSSを紹介したい方や、自分のOSSを広めたいという方の投稿をお待ちしております。


今回はGitHub Webhookを簡単に使えるghooks-cmd-runnerを紹介します。

特徴

  • ワンバイナリで動作
  • GitHubからのHTTPリクエストを受け付けるWebサーバとして動作
  • TOML形式の設定ファイルにwebhookが来たときに起動するコマンドを記述する
    • 標準入力にWebhookで来たリクエストのJSONが流し込まれる
    • 特にWebサーバを記述しなくてもコマンドを書くだけでWebhookを作ることが出来る

使いみち

  • JenkinsなどのCIをpluginを用いずにジョブを起動する
    • masterブランチだけジョブを起動するなどの柔軟な設定が可能
  • pushなどのタイミングで特定のコマンドを走らせる
    • githubのissueなどを更新するコマンドのトリガーに使える

使い方

インストール

これもkatsubushiと同様、releaseバイナリがあります。

こちらからプラットフォームにあったバイナリを落とすか、やはりghgを使うと簡単にインストールできます。

$ ghg tkuchiki/ghooks-cmd-runner

設定

config.toml
# port = 18889 (default: 18889)
# host = "0.0.0.0 (default: 127.0.0.1)"
# secret = "your webhook secret"
# logfile = "path to logfile (default: stdout)"
# pidfile = "path to pidfile"

[[hook]]
event = "push"
command = "/path/to/script"

[[hook]]
event = "pull_request"
command = "/path/to/script"

以上のような形でコマンドを記述し、

$ ghooks-cmd-runner -config=config.toml

でサーバが立ち上がります。

GitHubからのHTTPリクエストを受け付ける必要があるため、ドメインなどを割り当てる必要があります。

GitHub側のWebhookの設定は公式ドキュメントなどをご覧ください。具体的にはリポジトリのsettings -> webhooksで設定します。

シェルスクリプトでWebhookを受ける

jqなどを使うとshell scriptでもwebhookで何かアクションを起こすことが出来ます。以下はブランチを指定しつつJenkinsの特定のジョブをbuildWithParameterで起動するシェルスクリプトです。

invoke_jenkins_job.sh
#!/bin/bash

set -ex

JOB_NAME=${1:-default_job}
GIT_BRANCH=$(cat - | jq -r '.ref' | sed 's/^refs\/heads\///g')
curl -X POST -s "http://internal.jenkins/job/$JOB_NAME/buildWithParameters?GIT_BRANCH=$GIT_BRANCH"

release-requestでdevelopブランチにpushがあったらmasterブランチへのPull Requestを更新する

拙作のrelease-requestを用いて、masterに更新があったら、デプロイPull Requestを更新することが出来ます。

conifg.toml
[[hook]]
event = "push"
command = "release-request"
branch = "^develop$"

他のアイディア

  • reviewdogを起動してlintのログなどをPull  Requestに書き込む
  • 特定のブランチが更新されたら開発サーバのコンテナを入れ替える

以上ユースケースなどを紹介させていただきました。GitHubを中心にワークフローを組んでいる方にはとても有用なプロダクトだと思います。あなたの街のGitHub活用術を教えてくれたら幸いです。

1
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
1
5