因故敝公司使用 JANDI 這個通訊軟體,而非最流行的 slack,但其實 JANDI 還是可以做到一些 slack 常用的功能,像是 webhook 呼叫 Jenkins 執行 job。
JANDI 的 Webhook 分別 Outgoing Webhook 及 Incoming Webhooks,以下就來分享一下我實際上是怎麼使用的。
到 JANDI Connect 的介面後,需要填寫2個必要的填位,分別是
- URL - 輸入所欲接受 Webhook 訊息的 URL
- 觸發的關鍵字 - 當訊息中出現關鍵字的時候會觸發此 Webhook,範例為:/compile
其中 URL 為要打到 Jenkins 的 URL,需要安裝 plugin
我使用 Generic Webhook Trigger Plugin
https://wiki.jenkins.io/display/JENKINS/Generic+Webhook+Trigger+Plugin
URL 填的內容大概如下
http://JENKINS_URL/generic-webhook-trigger/invoke
JANDI Connect 會給一個 用來檢查欄位是否來自 JANDI 的 Webhook
組合之後大概像是以下
http://92832de0.ngrok.io/generic-webhook-trigger/invoke?token=<AUTHTOKEN>
以上貼在 JANDI Connect 的設定。
至於 Jenkins 這邊只要在 Token 欄位貼上 即可。
Generic Webhook Trigger Plugin
到 JANDI Connect 介面後,會看到原本就給你一個 Webhook URL 像是以下
https://wh.jandi.com/connect-api/webhook/11716082/<AUTHTOKEN>
將格式設定為要求的
https://gist.github.com/1e6c4b13b7f2ad3df687015e5fd65e95
然後以 RESTful API 的 POST HTTP 方式打出去即可
但在這邊會遇到問題,因為 Jenkins 預設的語系並不是中文,因此打出去的中文會變成亂碼,建議在 Content-Type 修改為以下。
https://gist.github.com/4f2bd2bcbd6753e259a0787e292ddec4
這樣 Incoming 的訊息就可以正確顯示了。
依文件指示, POST JSON 的內容範例如下
https://gist.github.com/bba53029b20f93cecfd57a5cdc0d2f6f
再將內容改成自己需要的即可,像我是寫
https://gist.github.com/8bde101b553472fd5cb8fa9316c6634c
btw. 我是使用 HTTP Request Plugin 這個 Jenkins plugin 來發 API Request
https://wiki.jenkins.io/display/JENKINS/HTTP+Request+Plugin