当我们通过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变更到微信的更多相关文章

  1. Linux下的Jenkins+Tomcat+Maven+Git+Shell环境的搭建使用(jenkins自动化部署)【转】

    jenkins自动化部署 目标:jenkins上点构建(也可以自动检查代码变化自动构建)>>>项目部署完成. 一.安装jenkins 1.下载jenkins 这里我选择的是war包安 ...

  2. 自动化打包 Jenkins 持续集成 Git Gradle MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  3. 在Jenkins中使用Git Plugin访问Https代码库失败的问题

    最近需要在Jenkins上配置一个Job,SCM源是http://git.opendaylight.org/gerrit/p/integration.git 于是使用Jenkins的Git Plugi ...

  4. 持续集成Jenkins + robot framework + git

    Jenkins + robot framework + git持续集成 一.Jenkins安装插件 进入系统管理—插件管理—可选插件下安装以下插件Git Client Plugin.GIT plugi ...

  5. 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 ...

  6. Linux下的Jenkins+Tomcat+Maven+Git+Shell环境的搭建使用(jenkins自动化部署)

    jenkins自动化部署 目标:jenkins上点构建(也可以自动检查代码变化自动构建)>>>项目部署完成. 一.安装jenkins 1.下载jenkins 这里我选择的是war包安 ...

  7. Jenkins持续集成git、gitlab、sonarqube(7.0)、nexus,自动化部署实战,附安装包,严禁转载!!!

    导读 之前用的都是SVN,由于工作需要用到Git,求人不如求己,技多不压身,多学一项技能,未来就少求别人一次,系统的学一遍,自己搭建一整套环境,自动化部署(自动发版),代码质量检测等等(为啥不用doc ...

  8. jenkins中通过git发版操作记录

    之前说到的jenkins自动化构建发版是通过svn方式,今天这里介绍下通过git方式发本的操作记录. 一.不管是通过svn发版还是git发版,都要首先下载svn或git插件.登陆jenkins,依次点 ...

  9. jenkins离线安装git插件

    jenkins没有默认安装git,当jenkins无法连接外网的话,安装git插件就是一件很麻烦的事,需要自己去下载插件: 往下拉 这边的插件就是需要自己去下载了,在bing下搜索jenkins gi ...

随机推荐

  1. css一个元素垂直居中的6种方法

    方法一: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...

  2. 【ecfinal2019热身赛】B题

    原题: 给你一个长度为1e5的序列ai,问你它的所有子序列的最大值与最小值之差的1000次方的和是多少 即∑_{p是a的子序列}(max{p}-min{p})^1000 这题难点在于(max-min) ...

  3. Mysql读写分离 及高可用高性能负载均衡实现

    什么是读写分离,说白了就是mysql服务器读的操作和写的操作是分开的,当然这个需要两台服务器,master负责写,slave负责读,当然我们可以使用多个slave,这样我们也实现了简单意义上的高可用和 ...

  4. [转]从Deadlock报错理解Go channel机制

    原文: https://www.jianshu.com/p/147bd63801b6 -------------------------------------- Go与其他语言不一样,它从语言层面就 ...

  5. vue 有条件加载组件 执行某方法后再渲染组件

    <component :is="currentCom"></component>   import Grid from './component/grid' ...

  6. Windows Dialog对话框

    一.MessageBox弹出框 MessageBox.Show(<字符串> Text, <字符串> Title, <整型> nType,MessageBoxIcon ...

  7. WCF错误处理

    介绍 WCF(Windows Communication Foundation) -异常处理:一般Exception的处理,FaultException和FaultException<T> ...

  8. elasticsearch查询:启动项目报错No property ... found for...Did you mean '...'?

    网上找的案例是: 实体类字段定义:private String sku_no;dao中接口名定义:Goods findBySkuNo(String skuNo);spring-data按照接口方法定义 ...

  9. bug提交遵循的规则

    在提交缺陷时,需要遵循以下5个原则: 准确性:缺陷每个组成部分描述准确,不会产生误解,减少“异常”“正常”等模糊词的使用 完整性:复现该缺陷完整的步骤.截图.日志 一致性:按照一致的格式书写全部缺陷信 ...

  10. 设置easyUI-dialog窗口居中显示

    默认情况下应该是在屏幕居中显示的.但是有的时候没有居中只要重新纠正下就可以了 $('#add_dialog').dialog('open'); //打开添加对话框 $('#add_dialog').w ...