钉钉自定义机器人配合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)

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安装、钩子配置全部完成,希望可以帮到有需要的各位!

原文地址:https://www.cnblogs.com/geekworld/p/8425728.html

时间: 2024-07-30 05:49:44

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

通知神器——java调用钉钉群自定义机器人

创建群自定义机器人 在指定钉钉群(或者随便拉两个人建个群,然后把别人T出去)的群设置里选择 群机器人 -> 自定义,如图: 然后,添加机器人,设置名字,添加成功时如下图: 其中webhook非常重要,下文详述.点击设置说明可以看相关使用文档,文档链接见本文末尾. 使用HTTP POST请求发送消息 直接向上文所述的webhook链接发送POST请求已达到自定义机器人向群内发消息的功能 按照文档中所属的参数格式直接向链接发送请求即可,我使用Postman发送请求如下: 效果如下: 发送其他格式(如

使用Python创建自定义机器人向群组人员发送消息

创建机器人 打开需要创建机器人的群组,点击 群组机器 人的图标 点击 + 号键创建机器人 点击 自定义 创建自定义机器人 点击 添加 设置机器人头像,机器人名称,机器人属组,点击下一步 复制API(webhook),点击完成 编写Python脚本 注意:修改脚本内requrl的值为机器人的webhook地址 脚本使用说明: 使用方法:脚本后面跟要发送的消息 at所有人将 isAtAll 的值改为True at指定人在 atMobiles 列表定义被at人的手机,列表形式 requrl的值为机器人

nodejs通过钉钉群机器人推送消息

nodejs 通过钉钉群机器人推送消息 Intro 最近在用 nodejs 写,之前的 nodejs 爬虫代码用 js 写的,感觉可维护性太差,也没有智能提示,于是把js改用ts(typescript)重写一下,提升代码质量. 爬虫启动之后不定期会出现验证码反爬虫,需要输入验证码才能继续,于是想在需要输入验证码时推送一个消息给用户,让用户输入验证码以继续爬虫的整个流程.我们平时用钉钉办公,钉钉群有个机器人,很方便于是就实现了一个通过钉钉的群机器人实现消息推送. 实现 代码是 ts 实现的,用了

钉钉群机器人

微信的Web网页版,很多新号都己经是用不了.所以微信的WEB协议是没法玩的了. 对于需要在一个群里自动发信息,目前也只能是用钉钉的.钉钉支持自定义机器人,说白了就是你往一个群里推送消息. 协议也比较简单,可以自行到这里看https://open-doc.dingtalk.com/microapp/serverapi2/qf2nxq.但目前还不支持问答模式(瞬间也觉得不好玩了). 自定义机器人,还有个限制,就是一分钟只能发20条.20条确实是少了点,但是一个群可以建立6个机器人,6*20就是120

(12)自定义数据流(实战Docker事件推送的REST API)——响应式Spring的道法术器

本系列文章索引<响应式Spring的道法术器>前情提要 Reactor 3快速上手 | Spring WebFlux快速上手 | 响应式流规范本文 测试源码 | 实战源码 2.2 自定义数据流 这一小节介绍如何通过定义相应的事件(onNext.onError和onComplete) 创建一个 Flux 或 Mono.Reactor提供了generate.create.push和handle等方法,所有这些方法都使用 sink(池)来生成数据流. sink,顾名思义,就是池子,可以想象一下厨房水

.net MVC 微信公众号 点击菜单拉取消息时的事件推送

官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141016&token=&lang=zh_CN 业务描述:点击菜单,推送消息,消息内容为自定义的读取数据库信息之后,为用户推送的动态消息. 首先需要用代码实现自定义菜单,为对应的菜单指定click事件. 关于自定义菜单的创建及事件指定,请看上一篇文章,本篇主要介绍事件响应的实现. MVC controller 中的代码如下: public void Me

zabbix 配合钉钉群机器人(webhook) 报警

首先建钉钉群,添加一个自定义机器人拿到webhook zabbix添加一个报警媒介 搞一个shell脚本来启动Python脚本(直接用zabbix调Python脚本不行,不知道什么原因) vim dingding.sh echo "$1" > /tmp/dingding.log python /etc/zabbix/alertscripts/dingding.py "$1" #!/usr/bin/env python #coding: utf-8 import

钉钉机器人自定义通知-python

创建一个钉钉群然后添加一个自定义的机器人 安全设置是必填项 自定义关键字:报警 钉钉发送通知时,必须包含 关键子 "报警" 不然会 报 keyword not in content. 钉钉文档: https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq 机器人创建成功后,针对文档中发送钉消息类型选择合适的进行触发. python 脚本 body={ "msgtype": "markdown", &q

钉钉自定义机器人加签认证(HmacSHA256)C#实现

原文:钉钉自定义机器人加签认证(HmacSHA256)C#实现 0.UTF-8字符集 1.把timestamp+"\n"+密钥当做签名字符串, 2.使用HmacSHA256算法计算签名 3.然后进行Base64 encode 4.最后再把签名参数再进行urlEncode,得到最终的签名. 参数 说明 timestamp 当前时间戳,单位是毫秒,与请求调用时间误差不能超过1小时 secret 密钥,机器人安全设置页面,加签一栏下面显示的SEC开头的字符串 签名计算代码示例(Java) ?