Jenkins-实现钉钉报警(pipline)

一.前言

最近打算在项目发版的时候,Jenkins实现钉钉告警,本文用的pipeline结合钉钉实现发版告警。

效果图:

发版成功通知,内容包括版本更新记录。

 

发版失败通知

 

 

二.配置步骤

1.钉钉配置

需要在钉钉电脑端操作

建群-配置机器人-取得讨论组token

 

 

 

 

 

 

 

 记录下wehhook地址,后面用得上。

2.Jenkins配置

1.1 安装jenkins插件

搜索dingding

 

 

1.2 添加机器人

进入系统配置

 

添加机器人

 

 

 记录机器人ID,后面用得上

3.pipeline配置

此pipeline包含两个点重要内容

1)获取项目发版变更记录

下面pipeline脚本可供参考

#!groovy
pipeline{
agent any
parameters {
        string defaultValue: 'master', name: 'branch_name'
    }
environment{  
    REPOSITORY="git@gitlab.xxxxx.com:java/customer-support.git"
    COUNTRY="idn"
    SCRIPT_PATH="/data/script"
    PROJECT="customer-support"
    IMAGE="registry-intl.ap-southeast-1.aliyuncs.com/zf/customer-support"
}
stages {
  stage("获取代码") {
      steps {
          echo "start fetch code from git:${REPOSITORY}"
          deleteDir()
          checkout([$class: 'GitSCM', branches: [[name: '*/${branch_name}']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'CleanBeforeCheckout']], submoduleCfg: [], userRemoteConfigs: [[url: "${REPOSITORY}"]]])
      }    
   }
  stage('输出日志') {
      steps {
            script{
                //调用方法得到日志 并 输出
                def changeString = getChangeString()
                echo "$changeString"
            }
      }
   }

  stage('发送钉钉') {
     steps {
       dingtalk (
       robot: 'zongfan',
       type: 'MARKDOWN',
       at:[],
       atAll: true,
       title: "${PROJECT}开始上线",
       text:["### [微笑]开始上线\n\n**项目**: **$PROJECT**\n\n**记录**: \n\n$changeString"],
       )
   }
  }
  stage("编译") {
      steps {
          echo "start compile"
          sh "mvn  clean package -Dmaven.test.skip=true"
      }   
   }
   stage("构建+推送镜像") {
      steps {
          echo "start build image"
          sh "cp -ar start/target/start.jar  /data/docker/${ENV}/${PROJECT}/start.jar"
          sh "${SCRIPT_PATH}/build-images-sit.sh ${ENV}  ${IMAGE}  ${PROJECT}"
      }   
   }
   stage("发布系统") {
      steps {
          echo "start deploy"
          sh "${SCRIPT_PATH}/deploy.sh java-fk ${PROJECT}" }   
   }
}  
    post {
      success {
       echo "发版成功"
       dingtalk (
       robot: 'zongfan',
       type: 'MARKDOWN',
       at:[],
       atAll: false,
       title: "${PROJECT}上线成功",
       text:["### [耶]上线完成\n\n**项目**: **$PROJECT**\n\n**记录**:\n\n$changeString"]
       )
      }
      failure {
       echo "上线失败"
       dingtalk (
       robot: 'zongfan',
       type: 'MARKDOWN',
       at:["18217477767"],
       atAll: false,
       title: "${PROJECT}上线失败",
       text:["### [捂脸哭]上线失败\n\n**项目**: **$PROJECT**\n\n**记录**:\n\n$changeString"]
       )
      }
  }
}
@NonCPS
def getChangeString() {
    MAX_MSG_LEN = 100
    def changeString = ""

    echo "Gathering SCM changes"
    def changeLogSets = currentBuild.changeSets
    for (int i = 0; i < changeLogSets.size(); i++) {
        def entries = changeLogSets[i].items
        for (int j = 0; j < entries.length; j++) {
            def entry = entries[j]
            truncated_msg = entry.msg.take(MAX_MSG_LEN)
            changeString += "> - ${truncated_msg} [${entry.author}]\n"
        }
    }
    if (!changeString) {
        changeString = "> - 没有更新记录"
    }
    return changeString
} 

2)钉钉配置说明

 1 dingtalk (
 2 #机器人ID
 3 robot: 'b9b37ae7-3132-4d9b-9b07-7021ad0e11be', 
 4 #数据类型
 5 type: 'LINK',
 6 #钉钉群里需要@的负责人
 7 at:["18217472232"],
 8 atAll: false,
 9 #标题
10 title: "${PROJECK}上线成功!",
11 #报警内容
12 text:["更新记录\n$changeString"],
13 messageUrl: "${WEBURL}",
14 #图片链接地址
15 picUrl:'http://kmzsccfile.kmzssss.com/upload/2020/success.jpg',
16 singleTitle:'',
17 btns: [],
18 hideAvatar: false
19 )

详细说明请参考插件文档

https://jenkinsci.github.io/dingtalk-plugin/guide/pipeline.html

 

posted @ 2020-04-20 10:50  人生是一场修行  阅读(2734)  评论(0)    收藏  举报