2013年1月10日

GitHub 使用 IRC service hook 讓 commit 訊息自動發送至 IRC 聊天室頻道

IRC(Internet Relay Chat)是歷久彌新的網路聊天室協定,因為只需要純文字的 console 模式,搭配指令就能操作聊天室,資深玩家還可以撰寫 Script 或 IRC BOT 機器人,所以迄今仍有不少開發者喜愛;目前許多大型的 Open Source 專案都可以找到專屬 IRC 聊天室。

記得以前經常掛在 IRC 聊天室,在還沒有 P2P 軟體的年代,那時很盛行透過 IRC 交流電影和音樂;我已經有好幾年沒再用過 IRC 了,最近和開發夥伴 smlsun 開始用 IRC 作為討論專案開發的即時聊天室。

於是開始又重回那個 IRC 美好的年代,很多事情可以寫個小程式來解決 : )

由於我們的 Source Code 使用 GitHub 管理,所以每次提交都是用 Git 工具。

例如某次增加新功能,就在 Commit 時設定一段訊息說明:

git commit . -m '加入了 xxx 功能'
git push

雖然其他開發夥伴,只要到 GitHub 的 Project page 就能看到 Commit 訊息,然後儘早做 Pull 更新,避免太多的 conflict 發生;但畢竟這是被動式的通知,除非 Commit 的開發者,自己在聊天室上面大喊:「我推了,快拉!」

但如果開發團隊每個成員,都使用 IRC 聊天室即時討論,這時候就可以讓 GitHub 在每次專案 Commit 時,自動發佈通知到 IRC 聊天室,如此一來所有更新動作就能主動通知每位成員。

由於 GitHub 的 Service Hook 功能很豐富,完成這項需求連一行程式碼都不需要寫,只要到 GitHub Repository 的「Settings / Service Hook」,選擇設定 IRC 功能即可。


以 FreeNode 的 IRC 聊天室為例,所需要填寫的設定資料如下(這些設定參考自 GitHub IRC Service Hook 的說明):

Server: irc.freenode.net
Port: 6667
Room: #ChannelName (聊天室名稱,# 符號可有可無)
Nick: Nickname (訊息發佈使用的匿名,可自訂)
Branch Regexes: (免填)
Password: (進入聊天室的密碼,無則免填)
Ssl: 不用勾
Message Without Join: 打勾
No Colors: 不用勾
Long Url: 打勾
Notice: 打勾
Active: 一定要打勾

先儲存(Update settings)後,就能用 Test Hook 測試訊息發佈是否正確。

在 IRC 聊天室的部份,需要先做一些設定,才能讓 GitHub Service Hook 發出的訊息顯示在聊天內容;這個動作只能由聊天室管理員(通常是第一位聊天室的建立者)設定:

/mode -n



/mode #ChannelName -n

之後每次只要有任何開發者 Commit / Push 後,GitHub 就會將 Commit Message 自動發佈到聊天室,讓所有開發成員在收到通知後儘早做 Pull 動作。

*** 2013/01/11 Updated

在使用一段時間後發現 IRC Hook 功能失效,所有訊息都沒辦法正確寫到 IRC 聊天室。再經過不斷追根究底的測試後發現,只要利用 FreeNode 提供的 NickServ 功能,註冊一組給 GitHub Hook 專屬的帳號,就能再度恢復 IRC 訊息發佈。

註冊流程提示:

先自行用 IRC Client 軟體連上 irc.freenode.net,使用 /nick 指令切換暱稱。

/nick mybotname

然後丟出註冊訊息給 NickServ 機器人(設定密碼及信箱)。

/msg NickServ REGISTER password mail@address

接著就會收到 E-Mail 提供一組驗證訊息(XXXXXXXXX是驗證碼)。

/msg NickServ VERIFY REGISTER mybotname XXXXXXXXXX

再調整 GitHub IRC Service Hook 設定:

Server: irc.freenode.net
Port: 6667
Room: #ChannelName (聊天室名稱,# 符號可有可無)
Nick: mybotname
Branch Regexes: (免填)
Password: 填寫密碼
Ssl: 不用勾
Message Without Join: 打勾
No Colors: 不用勾
Long Url: 打勾
Notice: 打勾
Active: 一定要打勾

如果要讓訊息看起來乾淨一點,Long Url 與 Notice 兩個選項可以不要勾

另外是 NickServ 服務不能重複用同一組信箱,所以在註冊好第一組帳號後,可以利用 NickServ 的 GROUP 指令,陸續增加其它帳號。方法是先用其它暱稱重新登入:

/nick SECONDNAME

再利用第一組帳號密碼取的驗證。

/msg NickServ IDENTIFY 第一組註冊暱稱 密碼

之後再將新登入的暱稱加入同一個驗證群組。

/msg NickServ GROUP

如此一來,兩組暱稱都可以透過 IDENTIFY 指令通過驗證。

由於同一個 IRC 伺服器不能同時用一樣的暱稱登入,所以必須建立不同暱稱給 BOT 用,這樣會比較方便 : )

使用 IRC 作為開發團隊的即時聊天室,還可以有很多種應用,除了自己寫 Script / Bot 擴充功能外,有些軟體專案開發工具也支援 IRC 整合,例如 Jenkins(Continuous Integration 工具)也提供 IRC Plugin,如此一來,聊天室就能有更多專案開發的應用。

沒有留言:

張貼留言

lyhcode by lyhcode
歡迎轉載,請務必註明出處!