钉钉自定义机器人配合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安装、钩子配置全部完成,希望可以帮到有需要的各位!
钉钉自定义机器人配合SVN钩子事件进行消息的推送实践的更多相关文章
- 通知神器——java调用钉钉群自定义机器人
创建群自定义机器人 在指定钉钉群(或者随便拉两个人建个群,然后把别人T出去)的群设置里选择 群机器人 -> 自定义,如图: 然后,添加机器人,设置名字,添加成功时如下图: 其中webhook非常 ...
- 使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_132 最近疫情比较严重,很多公司依靠阿里旗下的办公软件钉钉来进行远程办公,当然了,钉钉这个产品真的是让人一言难尽,要多难用有多难用 ...
- Asp.Net Core对接钉钉群机器人
钉钉作为企业办公越来越常用的软件,对于企业内部自研系统提供接口支持,以此来打通多平台下的数据,本次先使用最简单的钉钉群机器人完成多种形式的消息推送,参考钉钉开发文档中自定义机器人环节,此次尝试所花的时 ...
- nodejs通过钉钉群机器人推送消息
nodejs 通过钉钉群机器人推送消息 Intro 最近在用 nodejs 写爬虫,之前的 nodejs 爬虫代码用 js 写的,感觉可维护性太差,也没有智能提示,于是把js改用ts(typescri ...
- 无需开发,IT事件接入钉钉的方法详解
1.市场在拥抱钉钉 虎嗅8月30日发表了一篇文章<为什么有很多企业沉迷钉钉无法自拔>,有兴趣的可以去看看,下附文章链接. 文章不短,其中有一部分阐述了:钉钉抓住以人为核心的"智能 ...
- Jenkins 实现Gitlab事件自动触发Jenkins构建及钉钉消息推送
实现Gitlab事件自动触发Jenkins构建及钉钉消息推送 实践环境 GitLab Community Edition 12.6.4 Jenkins 2.284 Post build task 1. ...
- Docker系列——Grafana+Prometheus+Node-exporter钉钉推送(四)
近期搭建的服务器监控平台,来进行一个总结.主要分为监控平台的搭建.告警中心的配置以及消息的推送.推送的话,支持多种终端.具体详细可查看之前的博文,在这里罗列下,方便查看. Docker系列--Graf ...
- 微信公众号开发C#系列-8、自定义菜单及菜单响应事件的处理
1.概述 自定义菜单能够帮助公众号丰富界面,让用户更好更快地理解公众号的功能.菜单分为默认菜单与个性化菜单.个性化菜单接口是为了帮助公众号实现灵活的业务运营,开发者可以通过该接口,让公众号的不同用户群 ...
- .net MVC 微信公众号 点击菜单拉取消息时的事件推送
官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141016&token=&lang=zh_CN ...
随机推荐
- Linux下自动化监控内存、存储空间!
距离上一次更新文章已经过去一段时间了,小编在这段时间因为一些琐事,加上身体生病不能及时更新文章,今天身体逐渐恢复就急忙来更新文章,今天思梦给大家带来的就是如何自动化监控我们的服务器一些基本的配置来保证 ...
- python模块学习:os模块
一.os模块概述 Python os模块包含普遍的操作系统功能.例如文件的复制.创建.修改.删除文件及文件夹... 二.常用方法 1.os.listdir() 返回指定目录下的所有文件和目录名. ...
- bzoj 2946
Description 给出几个由小写字母构成的单词,求它们最长的公共子串的长度. 任务: l 读入单词 l 计算最长公共子串的长度 l 输 ...
- 【经验总结】Java在ACM算法竞赛编程中易错点
一.Java之ACM易错点 1. 类名称必须采用public class Main方式命名 2. 在有些OJ系统上,即便是输出的末尾多了一个“ ”,程序可能会输出错误,所以在我看来好多OJ系统做的是非 ...
- Codeforces 626A Robot Sequence(模拟)
A. Robot Sequence time limit per test:2 seconds memory limit per test:256 megabytes input:standard i ...
- find the nth digit(二分查找)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1597 find the nth digit Time Limit: 1000/1000 MS (Jav ...
- oracle数据泵备份与恢复库
假如 导出库的用户名是tiger,密码是1 导入到用户名是scott,密码是1 备份库 expdp tiger/1@orcl dumpfile=expdp.dmp DIRECTORY=dpdata ...
- 小白的Python之路 day5 模块XML特点和用法
模块XML的特点和用法 一.简介 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今 ...
- 分享给有需要的你,精选了10套web开发免费视频教程~~
在这里给大家精选百度传课里的一些比较好的视频教程,比较适合新手们,有需要的可以收藏着学习!! 蓝鸥微信小程序全方位深度解析 链接:http://www.chuanke.com/v4702151-19 ...
- 邓_Jquery测试题
一.Jquery测试题 下面哪种不是jquery的选择器?(单选)A.基本选择器 B.后代选择器 C.类选择器 D.进一步选择器考点:jquery的选择器 (C) 当DOM加载完成后要执行的函数,下面 ...