Linux环境SVN钉钉通知

1 参考资料

https://www.cnblogs.com/jianxuanbing/p/6835765.html

2 步骤

3

2.1 修改pre-commit

1
2
3
4
5
6
7
8
9
10
11
#"!/bin/sh

REPOS="$1"
TXN="$2"

SVNLOOK=/usr/bin/svnlook # 同pre-commit.tmpl文件中的SVNLOOK
LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c`
if [ "$LOGMSG" -lt 10 ];then
echo "提交失败: 注释不能低于10个字符" 1>&2
exit 1
fi

2.2 修改post-commit

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

#!/bin/sh
# 设置默认字符集,否则post信息到钉钉时中文乱码
export LANG=en_US.UTF-8
# svn中变量1为仓库路径,2为提交版本号
REPOS="$1"
REV="$2"
time=$(date +%F/%T)
# 下方svnlook命令获取相应的结果
AUTHOR=$(/usr/bin/svnlook author -r ${REV} ${REPOS})
CHANGEDDIRS=$(/usr/bin/svnlook dirs-changed $REPOS)
MESSAGE=$(/usr/bin/svnlook log -r $REV $REPOS)

CONTENT=提交时间:${time}\\n提交版本:${REV}\\n作者:${AUTHOR}\\n提交备注:${MESSAGE}\\n修改目录:$CHANGEDDIRS
cd /home/
/usr/local/jdk1.8.0_152/bin/java Request 92bfa50db10658ee1c37f9ab6b7a000e14ce94a901002170762e472af3754fbf $CONTENT

备注

  1. 脚本需要设置LANG变量为UTF8,否则中文乱码
  2. CONTENT变量赋值种的:为中文书写方式,输出的消息存在空格的效果。
  3. Request为java请求文件编译后的class文件,下面讲解

效果对比:
1
2

3 配置Java请求文件

由于钉钉提供的接口是https协议,curl需要支持https,因此通过java代码发起Post请求,打包成可运行的class文件,然后用post-commit调用,传入信息即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package com.wolf.util;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.URL;

import javax.net.ssl.HttpsURLConnection;

public class Request {
public static void main(String[] args) throws Exception {
String token = args[0];
String content = args[1];
content = "{\"msgtype\": \"text\",\"text\": {\"content\": \""+content+"\"}}";
httpsRequest("https://oapi.dingtalk.com/robot/send?access_token="+token, "POST", content);
System.out.println("OK");
System.exit(0);
}

/**
* 发送https请求
*/
public static String httpsRequest(String requestUrl, String requestMethod, String outputStr) throws Exception {
HttpsURLConnection conn = null;
BufferedReader bufferedReader = null;
try {
URL url = new URL(requestUrl);
conn = (HttpsURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setRequestMethod(requestMethod);
conn.setRequestProperty("content-type", "application/json");
if (null != outputStr) {
OutputStream outputStream = conn.getOutputStream();
outputStream.write(outputStr.getBytes("utf-8"));
outputStream.close();
}
bufferedReader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
String str = null;
StringBuffer buffer = new StringBuffer();
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
}
return buffer.toString();
} catch (Exception e) {
throw e;
} finally {
if (conn != null) {
conn.disconnect();
}
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (IOException e) {
}
}
}
}
}

备注:
将上面代码使用eclipse工具导出为java文件,然后javac Request.java命令生成class文件,java Request命令执行class文件。

3 问题汇总

3.1 乱码问题

参考上面讲述,及解决方法

3.2 消息:后空格问题

参考上面代码使用中文写法。

4 附件

Request.class
Request.java

-------------本文结束感谢您的阅读-------------

本文标题:Linux环境SVN钉钉通知

文章作者:OperationMAN

发布时间:2018年12月11日 - 16:12

最后更新:2019年11月07日 - 14:11

原始链接:https://kxinter.gitee.io/2018/12/11/Linux环境SVN钉钉通知/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!