持续集成之钉钉消息推送:4:在Jenkins中向钉钉推送消息

在这里插入图片描述
在这篇文章中结合具体的示例来介绍在Jenkins中如何向钉钉推送消息。

环境准备

这里使用Easypack的Jenkins 2.164.3来创建验证用的Jenkins环境。使用如下步骤即可完成。

事前准备

事前准备docker和docker-compose,版本要求如下所示:

  • Docker: >= 1.13.1
  • docker-compose: >= 1.13

启动Jenkins

使用Easypack中准备好的LTS的Jenkins镜像,启动Jenkins。

  • git clone

命令:git clone https://github.com/liumiaocn/easypack.git

  • 启动服务

命令:
cd easypack/containers/alpine/jenkins
docker-compose up -d

  • 使用的docker-compose配置文件
liumiaocn:jenkins liumiao$ cat docker-compose.yml 
version: '2'

services:
  # jenkins service based on Jenkins LTS version
  jenkins:
    image: liumiaocn/jenkins:2.164.3centos7.7openjdk1.8 
    ports:
      - "32002:8080"
      - "50000:50000"
    environment:
      - JENKINS_ADMIN_ID=root
      - JENKINS_ADMIN_PW=liumiaocn
      - JENKINS_MODE=master
    volumes:
      - ./data/:/data/jenkins
      - /var/run/docker.sock:/var/run/docker.sock
    restart: "no"
liumiaocn:jenkins liumiao$
  • 执行日志
liumiaocn:jenkins liumiao$ docker-compose up -d
Creating network "jenkins_default" with the default driver
Creating jenkins_jenkins_1 ... done
liumiaocn:jenkins liumiao$ docker-compose ps
      Name                     Command               State                         Ports                      
--------------------------------------------------------------------------------------------------------------
jenkins_jenkins_1   /bin/tini -- /usr/local/bi ...   Up      0.0.0.0:50000->50000/tcp, 0.0.0.0:32002->8080/tcp
liumiaocn:jenkins liumiao$ 

Job示例

本文示例的Job将流水线分按照功能分为逻辑上的三段:构建(Build) 、测试(Test)、部署(Deploy),顺序如下所示。

构建
测试
部署

创建一个名为test-dingtalk-notification的Pipeline类型的Job,具体Job内容如下:

pipeline {
    agent any 

    stages {
        stage('Build') { 
            steps { 
                sh 'echo Build stage ...' 
            }
        }
        stage('Test'){
            steps {
                sh 'echo Test stage ...' 
            }
        }
        stage('Deploy') {
            steps {
                sh 'echo Deploy stage ...' 
            }
        }
    }
  }

执行一次之后,通过BlueOcean确认运行结果如下所示:
持续集成之钉钉消息推送:4:在Jenkins中向钉钉推送消息_第1张图片

插件方式

Jenkins中有相关的插件,但是使用受限,而且目前也都已经不更新了
持续集成之钉钉消息推送:4:在Jenkins中向钉钉推送消息_第2张图片
以上述的插件为例,由于明文将密码存在Jenkins的配置文件config.xml中作为CVE被爆出来但是一直没有对应。
持续集成之钉钉消息推送:4:在Jenkins中向钉钉推送消息_第3张图片
插件方式本文不再详细验证,直接使用钉钉提供的API进行消息推送。

通用消息推送示例

详细使用示例可参看:https://liumiaocn.blog.csdn.net/article/details/103753450
在本例中将使用此脚本进行消息推送。

增加钉钉消息推送

脚本准备

在每个阶段添加消息推送,首先将上述脚本拷贝至Jenkins镜像的/usr/local/bin下并设置可以执行权限。

liumiaocn:chatops liumiao$ ls
dingtalk	send_message.sh	wechat
liumiaocn:chatops liumiao$ docker cp send_message.sh jenkins_jenkins_1:/usr/local/bin
liumiaocn:chatops liumiao$ docker exec -it jenkins_jenkins_1 sh
sh-4.2# which send_message.sh
which: no send_message.sh in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin)
sh-4.2# chmod 755 /usr/local/bin/send_message.sh 
sh-4.2# which send_message.sh
/usr/local/bin/send_message.sh
sh-4.2# send_message.sh 
usage: /usr/local/bin/send_message.sh TYPE TITLE CONTENT [URL]
       TYPE: wechat|dingtalk
sh-4.2# 

添加消息推送

修改流水线代码,添加如下消息推送示例

pipeline {
    agent any 

    stages {
        stage('Build') { 
            steps { 
                sh 'echo Build stage ...' 
                sh 'export CHAT_WEBHOOK_KEY=your_owen_dingtalk_token_info; send_message.sh dingtalk "Build Stage" "Build Stage has been successfully completed..."'
            }
        }
        stage('Test'){
            steps {
                sh 'echo Test stage ...' 
                sh 'export CHAT_WEBHOOK_KEY=your_owen_dingtalk_token_info; send_message.sh dingtalk "Test Stage" "Test Stage has been successfully completed..."'

            }
        }
        stage('Deploy') {
            steps {
                sh 'echo Deploy stage ...' 
                sh 'export CHAT_WEBHOOK_KEY=your_owen_dingtalk_token_info; send_message.sh dingtalk "Deploy Stage" "Deploy Stage has been successfully completed..."'
            }
        }
    }
  }

Jenkins上的执行结果如下所示
持续集成之钉钉消息推送:4:在Jenkins中向钉钉推送消息_第4张图片
钉钉的消息推送信息确认
持续集成之钉钉消息推送:4:在Jenkins中向钉钉推送消息_第5张图片

你可能感兴趣的:(#,持续构建,#,Jenkins)