美文网首页
【转载】替换gerrit原始的commit-msg hook

【转载】替换gerrit原始的commit-msg hook

作者: 熊本猫 | 来源:发表于2018-10-17 15:39 被阅读0次

    原文地址:

    原标题: 升级Gerrit的commit-msg,检查git commit时必须填写开发任务编号TaskID]
    https://www.cnblogs.com/simplestupid/p/9195491.html

    公司使用git+gerrit+jenkins进行持续集成实践,其中gerrit用来进行Code Review。另外我们自己研发了一套敏捷项目管理系统TPM(TeamPlus Management),用来管理开发任务和电子看板。此时有一个需求,希望开发人员提交的代码能够关联到TPM上的开发任务,这样就能实现需求与代码的关联,实现 需求->backlog->userstory->task->code->build->test->deploy->prod 的全流程数据关联。

    目前的一个方式是在开发人员提交代码的同时,在comments中指定TaskID,其中TaskID是TPM系统中开发任务编号。但是很多时候开发人员提交代码是,忘记在comments log中指定TaskID,导致数据缺失,不能有效辅助研发过程改进。

    为此,考虑参考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目录,没有发现commit-msg文件,怀疑是在gerrit.war中。解开gerrit.war,仍然没有发现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后,果然发现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。

    网上找一找gerrit版本升级的网页有一堆。务必注意,升级之前一定要备份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
    
    

    相关文章

      网友评论

          本文标题:【转载】替换gerrit原始的commit-msg hook

          本文链接:https://www.haomeiwen.com/subject/jwzuaftx.html