• 钉钉自定义机器人配合SVN钩子事件进行消息的推送实践


      目前很多公司还是使用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)
    
    # 下面调用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安装、钩子配置全部完成,希望可以帮到有需要的各位!

  • 相关阅读:
    页面灰色样式
    替换页面中出现的链接
    Google Earth无法连接到服务器
    知识扩展(线程SQL、SMTP、POP3、反射)
    oracle 11g 客户端 连接数据库
    Oracle 下载|ORACLE 官网下载地址(支持win7/win2008)
    WCF返回xml
    IE和FireFox下的JS调试工具
    在IIS中部署WCF服务出现authentication mode=windows
    Ext入门(Window、Panel、Viewport、Grid、Form、TreePanel)
  • 原文地址:https://www.cnblogs.com/geekworld/p/8425728.html
Copyright © 2020-2023  润新知