【轉(zhuǎn)載】替換gerrit原始的commit-msg hook

原文地址:

原標(biāo)題: 升級Gerrit的commit-msg,檢查git commit時必須填寫開發(fā)任務(wù)編號TaskID]
https://www.cnblogs.com/simplestupid/p/9195491.html

公司使用git+gerrit+jenkins進(jìn)行持續(xù)集成實踐,其中g(shù)errit用來進(jìn)行Code Review。另外我們自己研發(fā)了一套敏捷項目管理系統(tǒng)TPM(TeamPlus Management),用來管理開發(fā)任務(wù)和電子看板。此時有一個需求,希望開發(fā)人員提交的代碼能夠關(guān)聯(lián)到TPM上的開發(fā)任務(wù),這樣就能實現(xiàn)需求與代碼的關(guān)聯(lián),實現(xiàn) 需求->backlog->userstory->task->code->build->test->deploy->prod 的全流程數(shù)據(jù)關(guān)聯(lián)。

目前的一個方式是在開發(fā)人員提交代碼的同時,在comments中指定TaskID,其中TaskID是TPM系統(tǒng)中開發(fā)任務(wù)編號。但是很多時候開發(fā)人員提交代碼是,忘記在comments log中指定TaskID,導(dǎo)致數(shù)據(jù)缺失,不能有效輔助研發(fā)過程改進(jìn)。

為此,考慮參考Gerrit的commit-msg的方式,在commit代碼同時,檢查comments log中是否有指定合法的TaskID。(Gerrit的commit-msg,就是在commit代碼的同事,給comments log增加一個Change-ID編號)

首先,修改commit-msg,增加TaskID的檢查。

# Check for if missing a unique TaskID related with TPM

#

check_TaskID() {

COMMIT_FILE=$MSG

COMMIT_MSG=$(cat $MSG)

TASK_ID=$(echo "$COMMIT_MSG" | grep -Eo "#task[A-Za-z0-9]+")

if [ -z "$TASK_ID" ]; then

echo "[ERROR] Please add TPM TaskID comment logs with a format like 'comment logs #task20180623001'"

exit 1

else

echo "[INFO] StoryId=["$TASK_ID"]"

fi

}

# Check for, and add if missing, a unique Change-Id

#

add_ChangeId() {

...

...

...

check_TaskID

add_ChangeId

其次,是替換舊的commit-msg文件。

檢索了一遍gerrit-site目錄,沒有發(fā)現(xiàn)commit-msg文件,懷疑是在gerrit.war中。解開gerrit.war,仍然沒有發(fā)現(xiàn)commit-msg文件,懷疑實在某個依賴lib中。我們用的gerrit版本是2.12.8。翻了一下gerrit的源代碼,commit-msg是在gerrit-server/src/main/resources/com/google/gerrit/server/tools/root/hooks/commit-msg,推測是在gerrit-server的依賴lib中。解開gerrit-server-server.jar后,果然發(fā)現(xiàn)commit-msg。

gerrit2.15版本的hooks在./WEB-INF/lib/gerrit-server-libserver.jar中,解壓后commit-msg路徑是com/google/gerrit/server/tools/root/hooks

之后有兩種辦法替換:

1、重新編譯gerrit源碼。覺得太麻煩,放棄。

2、依次解壓gerrit.war和gerrit-server-server.jar,修改commit-msg,再用jar命令依次打包gerrit-server-server.jar和gerrit.war。

注意打gerrit.war的時候,需要指定Manifest,指定gerrit.war的Main-Class: Main,否則java -jar gerrit.war啟動的時候找不到MainClass。

最后,升級修改后的gerrit。

網(wǎng)上找一找gerrit版本升級的網(wǎng)頁有一堆。務(wù)必注意,升級之前一定要備份gerrit-site。

1、停止gerrit。 cd gerrit-site/bin; sh gerrit.sh stop

2、備份gerrit-site

3、啟動新的gerrit。 java -jar new-gerrit.war init -d gerrit-site

之后基本上一路回車就行。這個過程會替換gerrit-site/bin/gerrit.war,并會重新配置一遍gerrit。

驗證效果

1、啟動gerrit。 cd gerrit-site/bin; sh gerrit.sh start

2、打開 http://gerrit地址/tools/hooks/commit-msg,查看是否是修改以后的文件。

3、git clone項目測試。

:~/code>git clone ssh://[項目地址] && scp -p -P 29418 [gerrit地址]:hooks/commit-msg AgileMng/.git/hooks/

Cloning into 'AgileMng'...

remote: Counting objects: 1952, done

remote: Finding sources: 100% (1952/1952)

remote: Total 1952 (delta 918), reused 1870 (delta 918)

Receiving objects: 100% (1952/1952), 1.17 MiB, done.

Resolving deltas: 100% (918/918), done.

commit-msg                                                                                                                               100% 4946     4.8KB/s   00:00   

:~/code/AgileMng>touch 1

:~/code/AgileMng>git add 1

:~/code/AgileMng>git status

# On branch master

# Changes to be committed:

#   (use "git reset HEAD <file>..." to unstage)

#

#       new file:   1

#

:~/code/AgileMng>git commit -m "add new file 1"

[ERROR] Please add TPM TaskID in comment logs with a format like 'comment logs #task20180623001'

:~/code/AgileMng>git commit -m "add new file 1 #task20180618 new file 1"

[INFO] TaskId=[#task20180618]

[master 48daaed] add new file 1 #task20180618 new file 1

 1 file changed, 0 insertions(+), 0 deletions(-)

 create mode 100644 1

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容