1. 程式人生 > >釘釘自定義機器人配合SVN鉤子事件進行消息的推送實踐

釘釘自定義機器人配合SVN鉤子事件進行消息的推送實踐

ctype 文本文 ffffff svn的配置 執行文件 宣傳 style 項目 直接

  目前很多公司還是使用SVN(TortoiseSVN)進行版本控制,使用簡單,適合管理一般項目。協同辦公軟件目前釘釘比較成熟,阿裏也一直在宣傳推廣,這兩年公司也在使用,主要用於信息的溝通,其它的績效、考勤、日誌、審批等都是掛載的我們公司內部的系統,很方便,之後釘釘推出了釘釘機器人,一開始覺得沒用,也就一直沒關註,但是最近我看了釘釘自定義機器人,覺得這個可以好好利用起來,看到網上也有這方面的應用說明,看著很簡單,但是按照流程操作起來各種坑,而且相關知識過於碎片化,今天我在這裏進行一下簡單的整合,梳理一下,希望對有這方面需求但是遇到問題的朋友們有所幫助。


一、環境說明

系統:CentOS7

客戶端SVN版本:1.8.7(Windows版本)

服務端SVN版本:1.7.14


二、CentOS7安裝SVN服務端

1、安裝SVN

yum install subversion

安裝完成後使用

svnserve --version

查看SVN版本,表示安裝成功。

2、創建版本庫

例如:創建一個 /var/svnroot/test的版本庫目錄,首先創建目錄

mkdir -p /var/svnroot/test

然後使用svnadmin創建版本庫:

svnadmin create /var/svnroot/test

創建完成之後/var/svnroot/test下面生成如下文件:

技術分享圖片

3、修改SVN配置文件

SVN的配置文件在conf目錄下面:

技術分享圖片

【authz】是權限控制文件

【passwd】帳號密碼文件

【svnserve.conf】SVN服務配置文件


1)創建SVN用戶,設置密碼

修改【authz】文件,命令:vi passwd

在文檔最下面加入如下內容:

技術分享圖片

2)修改權限控制

技術分享圖片

表示用戶guof對版本庫的根目錄讀寫權限

3)配置SVN服務

vi svnserve.conf

打開以下註釋:

auth-access = write #授權用戶可寫

password-db = passwd #使用哪個文件作為賬號文件

authz-db = authz #使用哪個文件作為權限文件

realm = /var/svnroot/test #認證空間名,版本庫所在目錄

此處寫你的實際SVN版本庫路徑

4、啟動版本庫

啟動:

svnserve -d -r /var/svnroot/test

停止:

killall svnserve

5、Windows客戶端檢出測試

技術分享圖片

然後提示輸入賬戶、密碼即可檢出。


到此為止,CentOS7上安裝SVN服務端結束,很簡單吧!

接下來就是釘釘機器人以及SVN鉤子的配合了....

釘釘機器人相關參考資料:

  釘釘開發平臺-文檔中心:https://open-doc.dingtalk.com/docs/doc.htm?treeId=257&articleId=105735&docType=1

其實無非就是post請求釘釘機器人而已,大家可以下載jar包自己在處理,封裝成一個jar包供SVN鉤子使用,進而進行消息的通知。此處就先不說Java代碼怎麽封裝了,有需要的可以留言聯系。

什麽是SVN的hooks?

svn hooks是一組“外掛”腳本程序,是svn提供的一組由svn事件觸發的特別有用的程序。這些程序在服務器端執行,可以提供svn之外的一些附加功能。鉤子可以調用批處理文件、可執行文件或者一些類似於perl、python等的腳本,SVN鉤子有如下幾種:

技術分享圖片

參考:https://www.cnblogs.com/gaohj/p/3154448.html

http://blog.csdn.net/wepe12/article/details/53510223

我們想在有人提交SVN後知道是誰在哪個時間提交了什麽內容,那麽就需要post-commit鉤子了,首先我們要把post-commit.tmpl模板文件拷貝一份,改名為post-commit (註意:post-commit.tmpl是模板文件,要使用的話必須改名為post-commit,即事件名和文件名要一直,要是SVN規定的,當時就坑在這裏了,忘記改名,同時賦予其可執行權限)

cp post-commit.tmpl post-commit
chmod +x post-commit # 賦予可執行權限

其中post-commit在觸發後會傳入兩個參數,一個是當前修改的目錄,一個是當前版本號,有了這倆其實就足夠了,但是有人會問:我看很多人做的消息推送裏面有修改時間、修改人、提交的內容以及提交的備註日誌信息啊,這倆參數怎麽夠呢?其實開始我也是納悶這個問題,後來仔細看了一下SVN官方文檔加各種博客才知道可以使用 svnlook命令啊,例如我想知道某個版本是誰提交的,可以使用:svnlook author -r 版本號 版本庫路徑,想知道提交時候都寫了什麽說明,可以使用:svnlook log -r 版本號 版本庫路徑,具體可參考:https://www.cnblogs.com/wangjiyuan/p/svnnn.html

此時我們修改post-commit裏面的內容,我把其中的內容都刪除了,加入了我自己的:

#!/bin/sh
# 建議加上這句,防止中午亂碼,也可以是export LANG=zh_CN.GBK 根據實際情況設置
export LANG=zh_CN.UTF-8
REPOS="$1"
REV="$2"

# 作者
AUTHOR=$(svnlook author -r $REV $REPOS)

# 備註信息
MESSAGE=$(svnlook log $REPOS -r $REV)

# 本次提交的內容,返回格式: A 新建文本文檔.txt    其中,A:新增 D:刪除 U:修改 UU:內容和屬性改變
CHANGEDLIST=$(svnlook changed -r $REV $REPOS)

# 修改日期
DATE=$(svnlook date -r $REV $REPOS)

if [ "" = "$MESSAGE" ]; then
    "$MESSAGE"=""
fi

#echo [MESSAGE:]$MESSAGE > /tmp/2222.log


# PARAM="提交者:""$AUTHOR""|目錄:"$REPOS"|提交日期:"$DATE"|備註信息:"$MESSAGE "|文件列表:"$CHANGEDLIST"|版本號:"$REV
#echo "$AUTHOR"|"$REPOS"|"$DATE"|"$MESSAGE"|"$CHANGEDLIST"|"$REV" >/tmp/3333.log


# 下面調用jar包個人根據實際情況處理,不一定調用jar包,可以是Python腳本,甚至當前這個腳本都可以用Python寫,就不用調用了,直接調用機器人發送消息
java -jar /var/svnroot/DingDingReboot.jar /var/svnroot/config.properties "$AUTHOR" "$REPOS" "$DATE" "$MESSAGE" "$CHANGEDLIST" "$REV"

這樣的話就把提交人、版本庫路徑、提交時間、提交日誌、改動的內容、當前版本庫傳入你的jar包了,然後你的jar包接收參數、處理參數、封裝、按照要求post釘釘機器人即可發送消息。

相關坑和關鍵點說明

1、釘釘收到的消息中文亂碼,例如:

技術分享圖片

目前的解決方案就是在post-commit頭加入

export LANG=zh_CN.UTF-8 或者:
export LANG=zh_CN.GBK

2、一定要把hooks下面用到的鉤子改名,即用到哪個,就把文件後綴.tmpl去掉,或者直接創建一個新文件

3、要給post-commit賦予可執行權限,不然出現255錯誤

4、靈活應用svnlook命令,很多你想要的信息都可以通過它獲取到

最終效果:

技術分享圖片

技術分享圖片


至此svn安裝、鉤子配置全部完成,希望可以幫到有需要的各位!

釘釘自定義機器人配合SVN鉤子事件進行消息的推送實踐