結論
ChatWork で ChatOps をするのはつらい。
Jenkins から ChatWork へ 通知を飛ばす
以前に書いた、GitLab から ChatWork へ通知を飛ばす の姉妹編です。今度は Jenkins から ChatWork へ通知を飛ばしてみます。
プラグインがある
とてもとてもありがたいことに、プラグインを作ってくださった方がいらっしゃいました。このプラグインがなければ絶望の淵に突き落とされていたでしょう。
Multibranch Pipeline ではプラグインが使えない
プラグインがあるからハッピーエンド……ならこの記事を書きません。プラグインは、Jenkins のジョブの種類で Multibranch Pipeline
を選ぶと原則として使うことができません。
しかし、Multibranch Pipeline
のジョブ種類を選ばないと Jenkinsfile
を使った CI が原則できません。コードベースで CI ができない(ブラウザ上でポチポチ行う)ということはデメリットが多いです。なので現在では Multibranch Pipeline
を迷わず選ぶべきでしょう。でもそうするとプラグインが使えない……。
Jenkinsfile の中に、プラグインを実行するジョブを叩く curl(的なもの)を組み込む
達した結論は以下のとおりです。
フリースタイル
のジョブ種類を選べばプラグインが使える- ChatWork の実行専用のフリースタイル のジョブを作る
- フリースタイルのジョブは外部から HTTP(S) 経由で叩いて実行することが可能である
- もろもろのセキュリティには注意(別の記事で詳しく触れたいと思います)
Multibranch Pipeline
ジョブのJenkinsfile
の中では任意のシェルコマンドが実行できる- つまり、
Jenkinsfile
の中でフリースタイルジョブを叩くようなコードを仕込めば ChatWork プラグインを発火させられるので ChatWork に通知できる
しかしこの方法、実際に試すと分かるのですが「一つの通知ジョブには一つの結果の種類」を作らなければならず、つまり「成功」、「失敗」、「中断」などのケースごとにそれぞれのジョブを作る必要があり、とてもいびつになります。
上記で破綻したので結局やったこと
- ChatWork にポストするスクリプトを作って、Jenkinsfile 内のシェルでそれをそのまま実行する
- 全くもって cool じゃない
- そのスクリプトはどこに置くのか
結論
ChatWork で ChatOps をするのはつらい*1。
*1:どなたかもっといいやり方があれば教えてください