zoukankan      html  css  js  c++  java
  • 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 + '
    ' + "[项目地址] : " + Subject + '
    ' + Content + '
    '
            },
            "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} 
    [项目名称] : ${Project} 
    [项目地址] : ${Joburl}
    [变更日志] :${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 

  • 相关阅读:
    BZOJ 1977: [BeiJing2010组队]次小生成树 Tree( MST + 树链剖分 + RMQ )
    BZOJ 2134: 单选错位( 期望 )
    BZOJ 1030: [JSOI2007]文本生成器( AC自动机 + dp )
    BZOJ 2599: [IOI2011]Race( 点分治 )
    BZOJ 3238: [Ahoi2013]差异( 后缀数组 + 单调栈 )
    ZOJ3732 Graph Reconstruction Havel-Hakimi定理
    HDU5653 Bomber Man wants to bomb an Array 简单DP
    HDU 5651 xiaoxin juju needs help 水题一发
    HDU 5652 India and China Origins 并查集
    HDU4725 The Shortest Path in Nya Graph dij
  • 原文地址:https://www.cnblogs.com/topicjie/p/11111594.html
Copyright © 2011-2022 走看看