IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Jenkins:配置jenkins 任务构建成功通知企业微信@相关人 -> 正文阅读

[系统运维]Jenkins:配置jenkins 任务构建成功通知企业微信@相关人

需求说明

jenkins个别项目构建时间较长,不想时刻关注构建情况,或构建成功后移交其他人继续处理,需要配置企业微信通知功能,本篇主要是针对pipeline和多分支流水线项目,自由风格类型项目可以使用插件Qy Wechat Notification,参考博文https://www.cnblogs.com/jianxuanbing/p/11459972.html

最终效果

本篇最终效果图
在这里插入图片描述

jenkins pipeline类型和多分支流水线类型项目,在构建完成后,不管失败还是成功,都会通知到企业微信群中,并@对应人,我这里做的是谁构建就通知谁,当然也可以使用参数化构建,把要通知的人通过参数传递进去。

实现过程

我这里使用的方法还是比较简单的,想到jenkins构建主要还是以pipeline为主,参考了下其他人写的python,然后跟pipeline一起使用就很怪异,所有我这里用pipeline+shell,并没有其他人做的那么复杂。首先必须是企业微信,创建三个人以上的群聊,添加一个机器人
在这里插入图片描述
创建机器人主要是为了接受我们传递的消息和提供一个控制它的API,记住机器人的webhook,下面的shell脚本将通过webhook方式调用它
在这里插入图片描述
企业微信目前支持文本和markdown类型@群成员,其他的不行,详情请查看企业微信API开发

安装插件

获取构建用户变量 需安装插件: build user vars plugin
获取构建时间变量 需安装插件:Build Timestamp Plugin

编写shell

shell脚本用于请求企业微信API,发送数据。详情请看

vim send_message-export.sh
#!/bin/sh
#替换成自己的群机器人key值
CHAT_WEBHOOK_KEY="c5ae4999-be22-491f-xxxxxxxxxxxxx"
CHAT_CONTENT_TYPE='Content-Type: application/json'
#-o代表或的意思,成功或失败 CHAT_WEBHOOK_URL都是一样的WEBHOOK url
if [ _"${TYPE}" = _"success" -o  _"${TYPE}" = _"failure" ]; then
  CHAT_WEBHOOK_URL='https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key'
fi

if [ _"${CHAT_WEBHOOK_KEY}" = _"" ]; then
  echo "please make sure CHAT_WEBHOOK_KEY has been exported as environment variable"

fi
echo "## send message for : ${TYPE}"
if [ _"${TYPE}" = _"success" ]; then
  curl "${CHAT_WEBHOOK_URL}=${CHAT_WEBHOOK_KEY}" \
   -H "${CHAT_CONTENT_TYPE}" \
   -d '
   {
        "msgtype": "markdown",
        "markdown": {
         "content": "<font color=\"warning\">**Jenkins任务通知**</font> \n
         >构建人:<font color=\"comment\">'"${BUILD_USER}"'</font>
         >构建时间:<font color=\"comment\">'"${BUILD_TIME}"'</font>
         >任务名称:<font color=\"comment\">'"${JOB_NAME}"'</font>
         >任务地址:<font color=\"comment\">[点击查看]('"${URL_JOB}"')</font>
         >构建日志:<font color=\"comment\">[点击查看]('"${URL_LOG}"')</font>
         >构建状态:<font color=\"info\">**Success**</font> \n
         >任务已构建完成请确认:<@'"${JOB_TIPS1}"'>"
         
        }
   }
'
elif [ _"${TYPE}" = _"failure" ]; then
  curl "${CHAT_WEBHOOK_URL}=${CHAT_WEBHOOK_KEY}" \
   -H "${CHAT_CONTENT_TYPE}" \
   -d '
   {
        "msgtype": "markdown",
        "markdown": {
         "content": "<font color=\"warning\">**Jenkins任务通知**</font> \n
         >构建人:<font color=\"comment\">'"${BUILD_USER}"'</font>
         >构建时间:<font color=\"comment\">'"${BUILD_TIME}"'</font>
         >任务名称:<font color=\"comment\">'"${JOB_NAME}"'</font>
         >任务地址:<font color=\"comment\">[点击查看]('"${URL_JOB}"')</font>
         >构建日志:<font color=\"comment\">[点击查看]('"${URL_LOG}"')</font>
         >构建状态:<font color=\"comment\">**Failure**</font>
         >任务已构建完成请确认:<@'"${JOB_TIPS1}"'>"
         
        }
   }
'
fi

把shell脚本放到gitlab项目的根目录

编写jenkinsfile

主要用到pipeline参数:post
post 部分定义一个或多个steps ,这些阶段根据流水线或阶段的完成情况而 运行(取决于流水线中 post 部分的位置). post 支持以下 post-condition 块中的其中之一: always, changed, failure, success, unstable, 和 aborted。这些条件块允许在 post 部分的步骤的执行取决于流水线或阶段的完成状态。
Conditions
always
无论流水线或阶段的完成状态如何,都允许在 post 部分运行该步骤。

changed
只有当前流水线或阶段的完成状态与它之前的运行不同时,才允许在 post 部分运行该步骤。

failure
只有当前流水线或阶段的完成状态为"failure",才允许在 post 部分运行该步骤, 通常web UI是红色。

success
只有当前流水线或阶段的完成状态为"success",才允许在 post 部分运行该步骤, 通常web UI是蓝色或绿色。

unstable
只有当前流水线或阶段的完成状态为"unstable",才允许在 post 部分运行该步骤, 通常由于测试失败,代码违规等造成。通常web UI是黄色。

aborted
只有当前流水线或阶段的完成状态为"aborted"。当前执行结果是中止状态时(一般为人为中止)执行,才允许在 post 部分运行该步骤, 通常由于流水线被手动的aborted。通常web UI是灰色。

cleanup
清理条件块。不论当前完成状态是什么,在其他所有条件块执行完成后都执行。post部分可以同时包含多种条件块。

在jenkinsfile文件最底部添加:

pipeline {
  agent {  
    label "jenkins_slave"
  }
    options {
        timeout(time: 30, unit: 'MINUTES')
         buildDiscarder(logRotator(numToKeepStr: '5', artifactNumToKeepStr: '5'))
    }
  stages {
    stage('setting env') {
      agent any
      options {
        skipDefaultCheckout(true)
      }
      steps {
      //配置构建人变量
        wrap([$class: 'BuildUser']) {
           script {
                BUILD_USER = "${env.BUILD_USER}"
                BUILD_USER_ID ="${BUILD_USER_ID}"
                    }
          }
          script {
                env.BUILD_USERNAME = "${BUILD_USER}"
                env.BUILD_USERNAMEID = "${BUILD_USER_ID}"
                       }

...
...略写了,以自己的为准
...
    post {
    success {
       script {
         sh 'export TYPE=success;export JOB_NAME="${JOB_BASE_NAME}";export BUILD_NUM="$BUILD_NUMBER";export BUILD_TIME="$BUILD_TIMESTAMP";export BUILD_USER="${BUILD_USERNAME}"; export URL_JOB="${BUILD_URL}";export URL_LOG="${BUILD_URL}console";export JOB_TIPS1="${BUILD_USERNAMEID}" ;sh send_message-export.sh'
        }
    }
   failure {
      script {
        sh 'export TYPE=failure;export JOB_NAME="${JOB_BASE_NAME}";export BUILD_NUM="$BUILD_NUMBER";export BUILD_TIME="$BUILD_TIMESTAMP"; export BUILD_USER="${BUILD_USERNAME}"; export URL_JOB="${BUILD_URL}";export URL_LOG="${BUILD_URL}console";export JOB_TIPS1="${BUILD_USERNAMEID}" ;sh send_message-export.sh'
      }
    }
  }
}

简单说下原理吧
1、Jenkins通过jenkinsfile文件构建任务
2、jenkinsfile文件在最后使用了post参数,判断该任务状态,然后调用shell脚本,把jenkins构建过程中获得的数据传递到shell脚本里
3、shell脚本开始请求企业微信机器人Webhook,发送信息到企业微信群聊中

测试一下

在这里插入图片描述
在这里插入图片描述

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-09-20 16:05:36  更:2021-09-20 16:06:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 15:37:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码