jenkins pipeline 实现钉钉审批

这篇具有很好参考价值的文章主要介绍了jenkins pipeline 实现钉钉审批。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

jenkins pipeline 实现钉钉审批

一、需求

  1. Jenkins job 在构建任务时,推送一条审批消息。
  2. 点击消息确认与取消按钮进行审批。
  3. 根据审批结果触发继续构建还是取消构建。

二、流程图

jenkins集成钉钉审批,devops,jenkins,钉钉,java

三、实现效果

任务开始:

jenkins集成钉钉审批,devops,jenkins,钉钉,java

jenkins集成钉钉审批,devops,jenkins,钉钉,java

确认效果:

jenkins集成钉钉审批,devops,jenkins,钉钉,java

拒绝效果

jenkins集成钉钉审批,devops,jenkins,钉钉,java

jenkins集成钉钉审批,devops,jenkins,钉钉,java

任务状态失败与取消后点击效果:

jenkins集成钉钉审批,devops,jenkins,钉钉,java

jenkins集成钉钉审批,devops,jenkins,钉钉,java

重复点击效果:

jenkins集成钉钉审批,devops,jenkins,钉钉,java

四、pipeline脚本

pipeline {
    
    agent any 
    
    stages {
        stage('dingtask') {
            steps {
                script {
            		hook = registerWebhook(authToken: '123456')
            		webhookId = hook.url.substring(hook.url.lastIndexOf('/') + 1)
                		
                    dingtalk (
                        robot: '70e44955-d04b-4e65-b90c-f853c9f44ba4',
                        type: 'ACTION_CARD',
                        title: '确认发布',
                        text: [
                            '**是否确认发布**',
                            '',
                            '---',
                            "- 任务名称:${JOB_NAME}",
                            "- 构建ID:[#${env.BUILD_NUMBER}](${env.BUILD_URL})",
                            "- 构建人:${env.USER}",
                            "- 持续时长:${currentBuild.durationString}"
                        ],
                        btns: [
                            [
                                title: '确认',
                                actionUrl: "http://python脚本所在公网ip:8769/jenkins/webhook?url=${webhookId}&type=confirm&jobName=${JOB_NAME}&buildNumber=${env.BUILD_NUMBER}"
                            ],
                            [
                                title: '取消',
                                actionUrl: "http://python脚本所在公网ip:8769/jenkins/webhook?url=${webhookId}&type=cancel&jobName=${JOB_NAME}&buildNumber=${env.BUILD_NUMBER}"
                            ]
                        ]
                    )
                    
                    // 30秒没有确认 取消任务
                    timeout(time: 30, unit: 'SECONDS') {
                        data = waitForWebhook hook
                        // 解析 JSON 字符串
                        def json = new groovy.json.JsonSlurperClassic().parseText(data)
                        def type = json.type
                        // 判断 type 的值
                        if (type == 'cancel') {
                            echo "取消"
                            currentBuild.result = 'ABORTED'
                            error('任务被取消')
                        }
                    }
                }
            }
        }
        
        stage('test') {
            steps {
                echo '触发了~'
            }
        }
    }
}

脚本中使用到的 registerWebhook 方法 需要安装 Webhook Step Plugin 插件

jenkins集成钉钉审批,devops,jenkins,钉钉,java文章来源地址https://www.toymoban.com/news/detail-754858.html

五、python脚本

# -*- coding: utf-8 -*-

from flask import Flask, request
from jenkinsapi.jenkins import Jenkins
import requests

app = Flask(__name__)

@app.route('/jenkins/webhook', methods=['GET'])
def post():
    commitType = request.args.get('type')
    webhookId = request.args.get('url')
    jobName = request.args.get('jobName')
    buildNumber = request.args.get("buildNumber")

    # 创建Jenkins对象
    jenkins_url = 'http://jenkins ip:8080'
    username = 'admin'
    password = '123456'
    jenkins = Jenkins(jenkins_url, username, password)
    
    # 获取job对象
    job = jenkins.get_job(jobName)
    
    # 获取指定构建的信息
    build_number = int(buildNumber)
    build = job.get_build(build_number)
    build_result = build.get_status()

    # 打印构建状态
    print('Job "{}" build {} status: {}'.format(jobName, buildNumber, build_result))

    if build_result == 'ABORTED':
        return "<h1 style='font-size: 2em;display: flex;justify-content: center;align-items: center;height: 100%;color:orange;'>任务已中止,请重新构建<h1>"
    elif build_result == 'FAILURE':
        return "<h1 style='font-size: 2em;display: flex;justify-content: center;align-items: center;height: 100%;color:red;'>任务构建失败,请勿重复点击<h1>"

    # 组装webhook基础参数
    url = 'http://jenkins ip:8080/webhook-step/' + webhookId
    data = {'type': commitType}
    headers = {
        'Authorization': '123456',
        'Content-Type': 'application/json'
    }

    # 调用webhook
    try:
        response = requests.post(url, json=data, headers=headers)
        response.raise_for_status()
    except Exception as e:
        logging.exception("Failed to call Jenkins webhook step service.")
        return "请求失败:" + str(e)

    if commitType == 'confirm': 
        return "<h1 style='font-size: 2em;display: flex;justify-content: center;align-items: center;height: 100%;color: green;'>已同意</h1>" if response.status_code == 200 else "<h1 style='font-size: 2em;display: flex;justify-content: center;align-items: center;height: 100%;color:orange;'>请勿重复操作</h1>"
    else:
        return "<h1 style='font-size: 2em;display: flex;justify-content: center;align-items: center;height: 100%;;'>已拒绝</h1>" if response.status_code == 200 else "<h1 style='font-size: 2em;display: flex;justify-content: center;align-items: center;height: 100%;color:orange;'>请勿重复操作</h1>"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8769)

到了这里,关于jenkins pipeline 实现钉钉审批的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • iOS 集成Jenkins pipeline 完整流程

    选择参数化构建构成,如上图所示,通过该参数配置分支,然后我们选择 ‘选项参数’ 选项,如下图 然后我们填入参数名称和选项 手动进行archive ,获取一个 ExportOptions.plist 文件,然后将该文件放到工程中, 后面进行自动化打包需要用到里面的配置,文件位置如图 我这里选

    2024年02月13日
    浏览(32)
  • DevOps持续集成-Jenkins(4)

    DevOps概述 软件开发最初是由两个团队共同组成:(没有采用DevOps之前) 开发团队 :从头开始设计和整体系统的构建(编写代码)。需要系统不停的迭代更新。 运维团队 :将开发团队的代码进行测试通过后再部署上线。确保系统稳定运行。 没有采用DevOps的缺点: 这看似两个

    2024年02月08日
    浏览(50)
  • DevOps持续集成-Jenkins(2)

    DevOps概述 软件开发最初是由两个团队共同组成:(没有采用DevOps之前) 开发团队 :从头开始设计和整体系统的构建(编写代码)。需要系统不停的迭代更新。 运维团队 :将开发团队的代码进行测试通过后再部署上线。确保系统稳定运行。 没有采用DevOps的缺点: 这看似两个

    2024年02月08日
    浏览(54)
  • 持续集成交付CICD:Jenkins Pipeline与远程构建触发器

    目录 一、实验 1.Jenkins Pipeline本地构建触发器 2.Jenkins Pipeline与远程构建触发器(第一种方式) 3.Jenkins Pipeline与远程构建触发器(第二种方式) 4.Jenkins Pipeline与远程构建触发器(第三种方式) 二、问题 1.pipeline插件依赖安装报错 2.控制台输出环境变量名冲突 3.并行构建job存在

    2024年02月03日
    浏览(43)
  • Devops系列五(CI篇之pipeline libraray)jenkins将gitlab helm yaml和argocd 串联,自动部署到K8S

    本文是CI篇的上文,因为上一篇已经作了总体设计,就不再赘述,有需要的请看前文。 我们将演示,使用CI工具–jenkins,怎么和CD工具–argocd串联,重点是在Jenkins该怎么做。准备工作和argocd等相关事项,在前文已铺垫ok。 Jenkins,我们是使用k8s来部署的一个master-slave结构的集群

    2024年02月13日
    浏览(43)
  • DevOps(九)Selenium 介绍和Jenkins集成

    Selenium 是一个开源的自动化测试工具,主要用于 Web 浏览器自动化测试。它支持多种编程语言,包括 Java、Python、Ruby、C# 等,可以在多种浏览器中运行,包括 Chrome、Firefox、IE、Edge 等。 Selenium 的主要特点 多浏览器支持 :Selenium 支持多种浏览器,包括 Chrome、Firefox、IE、Edge 等

    2024年04月25日
    浏览(35)
  • jenkins自动化脚本集成时钉钉消息未发送

           在进行jenkins自动化脚本集成时,需要配置钉钉发送消息。钉钉的配置正确,测试钉钉消息发送成功,但是当构建项目时,却没有收到钉钉消息,报错如下: [钉钉插件]发送消息时报错: java.lang.NullPointerException: Cannot invoke \\\"io.jenkins.plugins.DingTalkUserProperty.getMobile()\\\" becaus

    2024年02月07日
    浏览(32)
  • DevOps-Jenkins-CI持续集成操作

    创建个web项目 我这里直接用Spring Web自动生成的demos 启动项目,访问展示如下默认页面信息 在项目下新建docker目录,新增Dockerfile、docker-compose.yml文件 Dockerfile文件,将mytest.jar 复制到容器的/usr/local/目录下,在/usr/local执行命令java -jar mytest.jar docker-compose.yml文件,当前目录以D

    2024年03月13日
    浏览(54)
  • 【云原生 • DevOps】一文掌握持续集成工具 Jenkins

    目录 一、持续集成工具 Jenkins 介绍 1. 什么是持续集成 2. Jenkins 介绍 二、Jenkins 的安装与部署 1. 安装 Jenkins 2. 本地访问 Jenkins 3. 插件的安装 4. 卸载 Jenkins 三、Jenkins 全局配置 1. Git 的安装与配置 2. JDK 的安装与配置 3. maven 的安装与配置 三、将代码上传至 Git 服务器 1. Gogs 的搭

    2024年02月03日
    浏览(56)
  • SkyEye与Jenkins的DevOps持续集成解决方案

    在技术飞速发展的当下,随着各行各业的软件逻辑复杂程度提升带来的需求变更,传统测试已无法满足与之相对应的一系列测试任务,有必要引入一个自动化、可持续集成构建的DevOps平台来解决此类问题。本文将主要介绍SkyEye与Jenkins的持续集成解决方案。 何谓DevOps?DevOps是

    2024年02月15日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包