ローカルのJenkinsとリモートのフックにSlackを使った
何をしたか
(クラウド型の)GithubやBitbucketなどにpushしたタイミングで、オフィスのLAN内にいるJenkinsに仕事をさせるのに、同LAN内にSlack botを置いて中継役にした。
実際の環境では、もう少し複雑な矢印が存在してしまっていて、これを僕はピタゴラJenkinsと呼んでいる。
背景
オフィスLAN外にあるソースコードの変更でJenkinsにCIさせたかったけど、インターネットからオフィスには通信ができなかったため、クラウドVCS側のhookのURLを直接Jenkinsにすることができなかった。
開発のコミュニケーションツールとしてSlackを使っているので、
とりあえずgit pushしたらSlackに通知をするようにして、
Slack botを作って、その通知に対してのフックを作り、
ひっかかったら同LANのJenkinsのREST APIをHTTPで叩く、という仕組みになった。
Goのコード片
if ev.Type == "message" && strings.HasPrefix(text, HookWord) { go startJenkinsJob() rtm.SendMessage(rtm.NewOutgoingMessage("hook", ev.Channel)) }