zoukankan      html  css  js  c++  java
  • Jenkins配置钉钉通知

    Jenkins配置钉钉通知

    说起来添加钉钉通知的原理很简单,钉钉生成一个订阅地址(API接口),Jenkins相关步骤去调用这个订阅地址即达到通知效果。

    创建钉钉机器人

    注意:钉钉机器人需要群主开放权限才能创建。

    建群,打开【群设置】->【智能群助手】->【添加机器人】->【自定义 WebHook接入】

    安全设置选三者之一。这里我选择【自定义关键词】方式。

    点击完成后会有一串webhook接口地址,也需记住。

    安装钉钉插件

    打开Jenkins的Dashboard,安装插件。

    打开【系统管理】->【插件管理】,安装"DingTalk"插件并重启。

    打开【系统管理】->【系统配置】翻到“钉钉”配置位置,新增配置。

    机器人Id不用填,保存时自动分配,在webhook上添加顶顶机器人接口地址,加密处添加加签密码。

    点击测试,钉钉群会收到配置信息。

    安装用户构建插件

    安装用户构建插件“build user vars”,安装步骤同上。

    可获得如下参数

    Variable Description
    BUILD_USER Full name (first name + last name)
    BUILD_USER_FIRST_NAME First name
    BUILD_USER_LAST_NAME Last name
    BUILD_USER_ID Jenkins user ID
    BUILD_USER_GROUPS Jenkins user groups
    BUILD_USER_EMAIL Email address

    安装后还要在【系统管理】->【系统配置】滑到【Build User Variables】选项,勾选生效。勾选后直接在全局变量中生效。否则需要用warp包装使用。

    包装使用

    always {
        echo 'This will always run'
        wrap([$class: 'BuildUser']) {
            sh 'echo "${BUILD_USER}"'
        }
    }
    

    钉钉机器人开发权限

    不确定是否一定要机器人开发权限。我是遇到webhook地址curl失败的问题,然后让管理员给了钉钉机器人开发权限。

    开通方式参照如下地址。

    https://developers.dingtalk.com/document/app#/serverapi2/qf2nxq
    

    流水线配置

    在工程中添加Jenkinsfile文件。内容如下:

    pipeline {
        agent any
        stages {
            stage("stage 1: Test dingding notify") {
                steps {
                    echo 'Test dingding notify'
                    script {
                        env.commit = "${sh(script:'git log --oneline --no-merges|head -1', returnStdout: true)}"
                    }
                }
                
            }
        }
        post {
            always {
                echo 'This will always run'
                wrap([$class: 'BuildUser']) {
                    sh 'echo "${BUILD_USER}"'
                    sh """curl 'https://oapi.dingtalk.com/robot/send?access_token=3dfb***9ece'  -H 'Content-Type: application/json' -d '{"msgtype":"text","text":{"content": "Jenkins提醒。部署服务:${JOB_NAME} \n构建分支: ${BRANCH_NAME}\n构建ID: ${BUILD_ID}\n提交信息:${commit}构建状态:${currentBuild.currentResult}"}}'"""
                }
            }
            success {
                echo 'successful'
            }
            failure {
                echo 'failed'
            }
        }
    }
    
    

    将推送消息放到always里,任何构建都会推送消息。

    warp包装器圈定BuildUser使用范围。本例安全机制是使用关键字的方式,Jenkins作为关键字才能推送成功。

    currentBuild.currentResult可以打印出结果,详情可参考https://issues.jenkins.io/browse/JENKINS-56402

    注意:文件中的中文可能会乱码,注意添加转码配置。

    钉钉消息格式

    消息格式参考管网接口参数说明,可以配置纯文本、markdown、连接等。结合审计流程制造卡点审批等效果

    https://developers.dingtalk.com/document/robots/message-types-and-data-format
    
    text
    sh """curl 'https://oapi.dingtalk.com/robot/send?access_token=3dfb***9ece'  -H 'Content-Type: application/json' -d '{"at":{"atMobiles":[153****]},"msgtype":"text","text":{"content": "Jenkins Pipeline. \n:${JOB_NAME} \nBuild branch: ${BRANCH_NAME}\nBuild ID: ${BUILD_ID}\nCommit message:${commit}\nBuild state:${currentBuild.currentResult}"}}'"""
    
    markdown
    sh """curl 'https://oapi.dingtalk.com/robot/send?access_token=3dfb***9ece'  -H 'Content-Type: application/json' -d '{"at":{"atMobiles":[153****]},"msgtype":"markdown","markdown":{"title":"Jenkins 构建提醒", "text":"## Jenkins Message \n![](http://47.119.xx.xx/src/assets//img/girls/11.jpg) \n **Build ID**: ${BUILD_ID} \n**Commit message**: ${commit}\n**Build state**: ${currentBuild.currentResult}"}}'"""
    
    actionCard
    """curl 'https://oapi.dingtalk.com/robot/send?access_token=3dfb***9ece'  -H 'Content-Type: application/json' -d '{"at":{"atMobiles":[153***]}, "msgtype":"actionCard","actionCard":{"title":"Jenkins Pipeline.", "text":"## Jenkins Message<br/>![](http://47.119.XX.XX/src/assets//img/girls/15.jpg)<br/>**Build ID**: ${BUILD_ID}<br/>**Commit message**: ${commit}<br/>**Build state**: ${currentBuild.currentResult}<br/>@153","btns":[{"title":"Yes","actionURL":"#"},{"title":"No","actionURL":"#"}]}}'"""
    

    附录

    问题1:No such property: BUILD_USER for class: groovy.lang.Binding

    安装后还要去全局配置中勾选

    问题2:{"errcode":310000,"errmsg":"sign not match, more: [https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq]"}

    调用webhook接口报错,原因是自定义机器人安全机制定义了“加签”,要验证方式。有三种验证方式,具提参考钉钉官方说明文档。https://developers.dingtalk.com/document/robots/customize-robot-security-settings

    问题3:中文乱码

    //TODO

    敌人总是会在你最不想它出现的地方出现!
  • 相关阅读:
    NullPointerException
    面试oracle 经常问的一个问题- 事务
    python 之 import、from、as 关键字的 白话 解释与例子
    python 学习 之 第二章(条件、循环和其他语句)
    python学习 之 第一章 (简单例子与常用数据类型)
    python中常用函数含义记录
    python 2 版本中的input() 和 raw_input() 函数的比较
    字符串处理关键字str 和 repr
    文件操作-一个可以直接复制文件数据的小程序
    C语言 32个关键字
  • 原文地址:https://www.cnblogs.com/longhx/p/15741644.html
Copyright © 2011-2022 走看看