小哥之哥 小哥之哥
首页
    • Prometheus
    • Kubertenes
    • Docker
    • MySQL
  • Go
  • Python
  • Vue
  • Jenkins
  • ELK
  • LDAP
  • 随笔
  • 最佳实践
  • 博客搭建
  • 问题杂谈
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

小哥之哥

运维扫地僧
首页
    • Prometheus
    • Kubertenes
    • Docker
    • MySQL
  • Go
  • Python
  • Vue
  • Jenkins
  • ELK
  • LDAP
  • 随笔
  • 最佳实践
  • 博客搭建
  • 问题杂谈
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • LDAP

  • Jenkins

    • Jenkins之Docker部署
    • Jenkins之自动化项目发布
    • Jenkins之使用ansible发布项目
    • Jenkins之pipline初识
    • Jenkins之pipline语法
    • Jenkins之钉钉通知
      • Jenkins最佳实践之为job添加构建预览信息
      • Jenkins最佳实践之webhook
    • 技术专题
    • Jenkins
    tchua
    2023-06-08
    目录

    Jenkins之钉钉通知

    # 一、前言


    Jenkins作为一款非常受用的CI/CD工具,相信很多公司项目构建发布都是直接依赖于该工具。试想一下,我们job任务并不是说点击构建按钮之后就会立即发布成功,因为涉及到很多步骤,特别构建的时候,会持续一段时间,这里如果我们不持续关注,可能会在某一个阶段失败了,我们并不能立即知情,因此需要接入一个webhoook机制,把构建结果通知我们。

    钉钉相信很多人都在使用,而且对于Jenkins也有现成的钉钉插件 (opens new window),因此我们这里介绍下Jenkins结合钉钉发送构建通知的操作。

    # 二、安装


    登录Jenkins至插件管理中心,搜索DingTalk,点击安装,然后重启Jenkins即可

    image-20230608101159486

    # 2.1 钉钉配置

    新版本(我这里Jenkins版本2.387,DingTalk版本2.7.0),在系统管理最下方的未分类里面

    image-20230608101943844

    # 2.2 配置参数

    钉钉创建机器人这里就不说了,这里需要注意的就是,这里安全验证使用的是加密方式,对应机器人的加签、

    • 机器人全局配置

    image-20230608102957924

    • 机器人参数配置

    image-20230608165926166

    # 2.3 测试

    上面我们配置好相关参数之后,可以点击机器人配置页面右下角测试按钮,测试下是否可以正常发生信息,没有问题点击保存即可

    image-20230608103853126

    • 查看钉钉信息

    image-20230608103916954

    # 三、freestyle 项目中使用

    # 3.1 job任务添加机器人

    在项目配置的 General 选项卡中找到 钉钉配置,勾选需要的机器人

    image-20230608104400701

    # 3.2 效果测试

    新增机器人配置之后,默认不需要配置其他,点击构建,就会触发钉钉通知

    image-20230608104739055

    可以看到,这里不仅会显示执行人,也会显示job的持续构建时间,这些信息都是DingTalk内置的信息,如果想要定义更多,则需要自定义信息。

    # 3.3 自定义消息
    • 内容配置

    image-20230608110004138

    • 查看效果

    image-20230608110059448

    # 四、 pipeline 中使用

    使用pipline,这里我们在post代码段进行配置,这里对应的就是job任务执行后进行相关的操作

    # 4.1 pipline机器人配置
    • pipline流水线配置
        post {
            success {
                        dingtalk (
                        robot: '120039c5-1111-4d7d-9461-f7499be9cb75',
                        type: 'ACTION_CARD',
                        title: "${JOB_BASE_NAME}构建",
                        text: [
                                "### [测试消息]($JOB_URL)",
                                "",
                                "---",
                                "",
                                "- 任务:[#$BUILD_ID]($BUILD_URL)",
                                "- 状态:<font color=green>success</font>"
                                ]
                        )
                }
                
        }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    • 效果查看

    image-20230608144649679

    • 总结

    通过上面配置的pipline钉钉脚本我们可以看到,发送告警内容信息配置更加灵活,但是这里有一个问题就是,pipeline中的全局变量,默认是不支持获取当前构建任务的构建人的,要想获取构建人的信息,只能通过插件来帮助我们获取,因为我们需要这些信息,因此我们默认的使用会有很大的局限性,接下来我们通过安装build user vars (opens new window)进行构建信息的发送。

    img

    # 4.2 安装插件

    同样到插件中心,搜索build user vars,安装后重启Jenkins

    image-20230608145958699

    # 4.3 配置进阶流水线脚本
    post {
            always {
                script {
                    catchError{
                        wrap([$class: 'BuildUser']) {
                            buildTime = currentBuild.durationString.split("and")[0]
                            if(currentBuild.currentResult == "SUCCESS"){
                                statusColor = "#4CC417"
                                status = "成功"
                            }else if(currentBuild.currentResult == "FAILURE"){
                                statusColor = "#FF0000"
                                status = "失败"
                            }else if(currentBuild.currentResult == "ABORTED"){
                                statusColor = "#529578"
                                status = "取消"
                            } else {
                                statusColor = "#9D9D9D"
                                status = "未知"
                            }
                            dingtalk (
                                robot: '120039c5-1111-4d7d-9461-f7499be9cb75',
                                type: 'MARKDOWN',
                                title: "${JOB_BASE_NAME}构建通知",
                                text: [
                                    "### [$JOB_BASE_NAME]($JOB_URL)通知",
                                    "",
                                    "---",
                                    "",
                                    "> * 任务: [#$BUILD_ID]($BUILD_URL)",
                                    "> * 状态: <font color=$statusColor>$status</font>",
                                    "> * 持续时间: $buildTime",
                                    "> * 执行人: ${BUILD_USER}"
                                ]
                            )
                        }
                    }
                }
            }
        }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    • 查看效果

    image-20230608160913721

    • 配置解读

    always

    这里配置到always模块中,主要是为了保证无论成功失败都可以发送,通过判断构建成功失败状态,这样不用在每个模块中都定义dingtalk逻辑。

    catchError

    catchError 是pipline中的一个错误处理模块,用于捕获步骤执行过程中的错误,并在出现错误时执行相应的操作,这里我们使用catchError捕获构建过程中的错误,并使用currentBuild.result来获取实际的构建结果。

    如果不使用该错误处理模块,有可能会受到wrap([$class: 'BuildUser'])包装器的影响,导致currentBuild.result获取的值总是SUCCESS,从而影响判断。

    wrap([$class: 'BuildUser'])

    wrap是用来包装构建环境的步骤或指令,$class用来指定类包装器,BuildUser包装器名称,需要安装build user vars插件才可以,这里指会在包装的代码块中记录与用户相关的信息,例如用户名、用户ID等。这样,我们就可以在构建过程中获取和使用这些信息。

    currentBuild

    currentBuild内置变量,包含很多属性和方法,可以在流水线语法,全局变量中查看,通过这些属性和方法获取相关构建信息,对于后续构建报告、通知、日志记录和后续处理非常有用。

    image-20230608165102500

    image-20230608165116623

    dingtalk

    dingtalk,发送信息至钉钉机器人相关的配置,其中robot是前面在系统配置中机器人的ID,告警信息内容,可以自己按照MARKDOWN格式自定义,不过需要注意使用变量时,需要确保可以正常获取对应的变量值,否则会出现异常等信息。

    编辑 (opens new window)
    上次更新: 2024/06/04, 10:49:46
    Jenkins之pipline语法
    Jenkins最佳实践之为job添加构建预览信息

    ← Jenkins之pipline语法 Jenkins最佳实践之为job添加构建预览信息→

    最近更新
    01
    cert-manager自动签发Lets Encrypt
    09-05
    02
    Docker构建多架构镜像
    08-02
    03
    Prometheus数据迁移至VMstorage
    08-01
    更多文章>
    Theme by Vdoing | Copyright © 2023-2024 |豫ICP备2021026650号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式