zoukankan      html  css  js  c++  java
  • Jenkins:整合企业微信实现构建消息推送

    安装插件

    http request plugin插件

    image-20210616151220149

    该插件用于在Jenkinsfile中发送http请求

    build-user-vars-plugin插件

    image-20210616151328751

    该插件用于在Jenkinsfile中获取用户名信息

    企业微信webhook

    可以在企业微信的群组中新建一个机器人,名称随便

    image-20210616151632248

    点击复制,拿到机器人的Webhook地址

    image-20210616151739784

    编写Jenkinsfile

    获取当前部署人

            wrap([$class: 'BuildUser']) {
                script {
                    BUILD_USER = "${env.BUILD_USER}"
                }
            }
    

    BUILD_USER就是当前部署人,后面直接引用该变量即可

    获取当前时间

    def start = new Date().format('yyyy-MM-dd HH:mm:ss')
    

    对于本项目,有如下参数,branch、部署项目名、部署的服务器ip

    image-20210616152204305

    我们需要将这些信息给提取到企业微信的消息中:

    jenkinsfile如下(敏感信息已脱敏):

    def git_auth = "XXXXXX-XXXX-XXXX-XXX-XXXXXXXXX"
    def git_url = "git@XXXX.XXXXX.com:XXXXX/XXXXXX-server.git"
    node {
        def start = new Date().format('yyyy-MM-dd HH:mm:ss')
        def selectedProjectNames = "${project_name}".split(",")
        def selectedServers = "${publish_server}".split(",")
        stage('拉取代码') {
            checkout([$class: 'GitSCM', branches: [[name: "*/${branch}"]], extensions: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_url}"]]])
        }
        stage('编译,安装公共子工程') {
            sh "mvn -f xxxxx-base-starter clean install -Dmaven.test.skip=true"
        }
        stage('编译,打包微服务工程') {
            for(int i = 0 ; i < selectedProjectNames.length; i++){
                def projectInfo = selectedProjectNames[i];
                sh "mvn -f ${projectInfo} clean install -Dmaven.test.skip=true"
                for(int j = 0 ; j < selectedServers.length; j++){
                    def selectedServer = selectedServers[j];
                    sshPublisher(publishers: [sshPublisherDesc(configName: "${selectedServer}", transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "sh /xxxxx/${branch}/xxxx-xxxxx-server.sh ${projectInfo} ${branch}", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: "/xxxxx/${branch}", remoteDirectorySDF: false, removePrefix: "${projectInfo}/target", sourceFiles: "${projectInfo}/target/${projectInfo}-1.0-SNAPSHOT.jar")], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
                }
            }
        }
        stage('webhook') {
            wrap([$class: 'BuildUser']) {
                script {
                    BUILD_USER = "${env.BUILD_USER}"
                }
            }
            def head = ""构建${JOB_NAME}:#${env.BUILD_ID}<font color=\"info\">成功</font>,详细信息如下:"
            def s1 = ">部署分支:<font color=\"comment\">${branch}</font>"
            def s2 = ">部署服务:<font color=\"comment\">${project_name}</font>"
            def s3 = ">部署服务器:<font color=\"comment\">${publish_server}</font>"
            def execTime = start+"   "+new Date().format('yyyy-MM-dd HH:mm:ss')
            def s4 = ">部署时间:<font color=\"comment\">${execTime}</font>"
            def s5 = ">部署人:<font color=\"comment\">${BUILD_USER}</font>"
            def msg = "${head}"+"
    "+ "${s1}"+"
    "+"${s2}"+"
    "+"${s3}"+"
    "+"${s4}"+"
    "+"${s5}""
            echo "${msg}"
            def body = "{ "msgtype": "markdown", "markdown": { "content": ${msg} } }"
            echo "${body}"
            httpRequest contentType: 'APPLICATION_JSON_UTF8', httpMode: 'POST', requestBody: "${body}", responseHandle: 'NONE', url: 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxx-xxxxx-xxx-xxxxx-xxxxxxxxxxx', wrapAsMultipart: false
        }
    }
    

    最后webhook一步,会发送Post请求,到企业微信机器人的webhook中.

    然后每次只要部署成功,企业微信机器人都会在群里发送消息:

    image-20210616152659736

  • 相关阅读:
    设计模式之开篇(C#语法) 爱拼才会赢
    C#语法糖之第一篇:自动属性&隐式类型 爱拼才会赢
    C#语法糖之第四篇: 扩展方法 爱拼才会赢
    C#中this在扩展方法的应用
    笔记20120215_转义字符_运算符
    Linux基本操作
    SQL创表
    软件测试的概念
    java 线程池
    Redis广播
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/14889606.html
Copyright © 2011-2022 走看看