Jenkins之自动发送git变更到微信
当我们通过Jenkins构建job的时候,是可以获取到git Change Log 的信息, 即本次上线修改了什么功能,我们将这个信息发送到微信群相关人员可直接获取到上线变更信息,
这样就不需要人为的去通告,以下是效果图:

主要用到的这个插件: https://github.com/daniel-beck/changelog-environment-plugin
核心配置:

我这里使用的是 项目构建完成后 使用Post build task 调用一个发送的脚本,这个脚本会将信息发送到对应微信群,
你也可以通过其它的方式,只要能将消息发出去:

微信发送脚本代码:
#!/usr/bin/python2.7
#_*_coding:utf-8 _*_ import requests,sys,json
import urllib3
urllib3.disable_warnings() reload(sys)
sys.setdefaultencoding('utf-8') def GetToken(Corpid,Secret):
Url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"
Data = {
"corpid":Corpid,
"corpsecret":Secret
}
r = requests.get(url=Url,params=Data,verify=False)
Token = r.json()['access_token']
return Token def SendMessage(Token,Subject,Content, ProName):
Url = "https://qyapi.weixin.qq.com/cgi-bin/appchat/send?access_token=%s" % Token
Data = {
"chatid": "JenkinsAlarm", # 此处不明白请参考企业微信官网
"msgtype": "text",
"text": {
"content": "[项目名称] : " + ProName + '\n' + "[项目地址] : " + Subject + '\n' + Content + '\n'
},
"safe": "0"
}
r = requests.post(url=Url,data=json.dumps(Data),verify=False)
return r.text def action_from_file(filename):
try:
str1 = '[变更日志] : '
with open(filename, 'r') as f:
for i in f.readlines():
str1 += i
if len(str1) == 17:
str1 += " 无变更"
return str1
except Exception as e:
print('[ERROR] {0}'.format(e)) if __name__ == '__main__':
Corpid = "xxxx"
Secret = "xxxxxxxxx" Subject = sys.argv[1]
Content = action_from_file(sys.argv[2])
ProName = sys.argv[3] Token = GetToken(Corpid, Secret)
Status = SendMessage(Token,Subject,Content,ProName)
print Status
以上是正常的通过每个Job内配置的git地址获取的方式。
但是我们这里有个k8s的pipeline配置,pipeline里面无法使用上面的插件,我通过编写脚本实现了如上一样的功能:
大体思路如下:
1. 获取当前 commit_id , 获取上次 commit_id , 通过git命令取到两次commit_id之间的日志并发送
2. 我是将commit_id 存到redis,每次更新commit_id , 项目第一次构建的话会取前两行发送,之后则正常
代码如下
#!/bin/bash BaseDir=$1
Project=$2
Joburl=$3
Branch=$4 if [[ $Branch != master ]]; then
echo "Not master, exit..."
exit 0
fi last_commit_id=$(/usr/bin/redis-cli -h 192.168.111.152 get $Project) cd $BaseDir && curr_commit_id=$(git log HEAD -1 --pretty=format:'%H') if [[ $last_commit_id == "" ]] ; then
cd $BaseDir
msg=$(git log --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%s (at %cd via %cn)'|head -2)
echo "$msg" > /tmp/build_msg elif [[ $last_commit_id == ${curr_commit_id} ]] ; then
msg="(无变更)"
echo "(无变更)" > /tmp/build_msg else
msg=`git log --date=format:"%Y-%m-%d %H:%M:%S" --pretty=format:"%s (at %cd via %cn)" ${last_commit_id}..${curr_commit_id}`
echo "$msg" > /tmp/build_msg
fi /usr/bin/redis-cli -h 192.168.111.152 set $Project $curr_commit_id #python /root/auto_falcon/jenkins_notify.py $Project /tmp/build_msg $Joburl grep -v Merge /tmp/build_msg|cat -n > /tmp/send_msg curr_date=$(date "+%Y/%m/%d %H:%M:%S")
change_log=$(cat /tmp/send_msg)
Content="[构建时间] : ${curr_date} \n[项目名称] : ${Project} \n[项目地址] : ${Joburl}\n[变更日志] :${change_log}"
CropID="xxxx"
Secret="xxxxx"
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F\" '{print $10}')
PURL="https://qyapi.weixin.qq.com/cgi-bin/appchat/send?access_token=$Gtoken" /usr/bin/curl --data-ascii '{ "chatid": "jenkinsAlarm", "msgtype": "text","text": {"content": "'"${Content}"'"},"safe":"0"}' $PURL
参考网址:
1. https://www.jianshu.com/p/f03fc1bf5783
Jenkins之自动发送git变更到微信的更多相关文章
- Linux下的Jenkins+Tomcat+Maven+Git+Shell环境的搭建使用(jenkins自动化部署)【转】
jenkins自动化部署 目标:jenkins上点构建(也可以自动检查代码变化自动构建)>>>项目部署完成. 一.安装jenkins 1.下载jenkins 这里我选择的是war包安 ...
- 自动化打包 Jenkins 持续集成 Git Gradle MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 在Jenkins中使用Git Plugin访问Https代码库失败的问题
最近需要在Jenkins上配置一个Job,SCM源是http://git.opendaylight.org/gerrit/p/integration.git 于是使用Jenkins的Git Plugi ...
- 持续集成Jenkins + robot framework + git
Jenkins + robot framework + git持续集成 一.Jenkins安装插件 进入系统管理—插件管理—可选插件下安装以下插件Git Client Plugin.GIT plugi ...
- CentOS6.8下Jenkins+maven+tomcat+git+shell自动构建、部署web应用环境的搭建
参考资料:http://www.cnblogs.com/cheng95/p/6542036.html http://www.cnblogs.com/software-test/p/7068278.ht ...
- Linux下的Jenkins+Tomcat+Maven+Git+Shell环境的搭建使用(jenkins自动化部署)
jenkins自动化部署 目标:jenkins上点构建(也可以自动检查代码变化自动构建)>>>项目部署完成. 一.安装jenkins 1.下载jenkins 这里我选择的是war包安 ...
- Jenkins持续集成git、gitlab、sonarqube(7.0)、nexus,自动化部署实战,附安装包,严禁转载!!!
导读 之前用的都是SVN,由于工作需要用到Git,求人不如求己,技多不压身,多学一项技能,未来就少求别人一次,系统的学一遍,自己搭建一整套环境,自动化部署(自动发版),代码质量检测等等(为啥不用doc ...
- jenkins中通过git发版操作记录
之前说到的jenkins自动化构建发版是通过svn方式,今天这里介绍下通过git方式发本的操作记录. 一.不管是通过svn发版还是git发版,都要首先下载svn或git插件.登陆jenkins,依次点 ...
- jenkins离线安装git插件
jenkins没有默认安装git,当jenkins无法连接外网的话,安装git插件就是一件很麻烦的事,需要自己去下载插件: 往下拉 这边的插件就是需要自己去下载了,在bing下搜索jenkins gi ...
随机推荐
- Cairo
Cairo 英[ˈkaɪrəʊ] 美[ˈkaɪroʊ] n. 开罗(埃及首都); [例句]From Cairo came expressions of regret at the attac
- 使用 EasyExcel 写Excel数据(表头动态)
引入 jar 包 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel&l ...
- python 获取运行脚本和模块的绝对路径
方法一:sys.args[0] 在python的运行时,sys.argv[0],存了当前脚本的运行路径包括文件名 python test.py 则:sys.argv[0] =>test.py p ...
- AKS素性检测
2002年印度数学家Manindra Agrawal, Neeraj Kayal,Nitin Saxena 给出了一个是否为素数的判别准则. 定理一:设 $a$ 是于 $p$ 互素的整数,则 $p$ ...
- 第四章 深入C#的string类
一.String 类的常用方法 1.indexOf(); 获取指定字符串的位置,如果没有则返回-1 2.SubString(); 截取字符串,参数1代表开始位置,参数2代表截取长度 3.ToLo ...
- stl常数测试
如图: 数组的常数约为9.
- MySQL GROUP BY 语句
GROUP BY 语句根据一个或多个列对结果集进行分组. 在分组的列上我们可以使用 COUNT, SUM, AVG,等函数. GROUP BY 语法 SELECT column_name, funct ...
- [Luogu] 消息扩散
https://www.luogu.org/problemnew/show/2002 Tarjan 缩点 + 入度判断 #include <iostream> #include <c ...
- 数据结构实验之二叉树四:(先序中序)还原二叉树 (SDUT 3343)
#include <bits/stdc++.h> using namespace std; struct node { char data; struct node *lc, *rc; } ...
- 1633:【例 3】Sumdiv
#include<bits/stdc++.h> #define ll long long using namespace std; ; ll a,b,ans=,cnt; ll p[],c[ ...