jenkins pipeline之自动构建(gitlab webhook 和 Generic Webhook Trigger集成)

2023-10-27

需求:

  • 1.开发在哪个分支上提交代码,jenkins就自动发布相对应的分支。
  • 2.实现既能手动发布jenkins,也要实现自动webhook发布

约定:

和开发约定分支对应的环境,比如 debug对应开发环境,develop对应测试环境,master对应预生产环境。

一、jenkins 安装插件 Generic Webhook Trigger

在这里插入图片描述
安装后会暴露出来一个公共API,GWT插件接收到 JSON 或 XML 的 HTTP POST 请求后,根据我们配置的规则决定触发哪个Jenkins项目。后面的gitlab也是基于http://JENKINS_URL/generic-webhook-trigger/invoke 来实现curl 请求post 来实现发布的。

二、创建jenkins job

1.创建job
在这里插入图片描述
2.编辑job 配置你的jenkins脚本,脚本最好放到git上统一版本控制。下面有我的测试pipeline脚本
在这里插入图片描述

三、pipeline 脚本

#!groovy
@Library('htjfPipeline@master') _
pipeline {
  agent any
  environment {
    repoUrl = "开发人员给你的工程项目git地址"
  }
  parameters {
    string(name:'repoBranch', defaultValue: '', description: 'git分支名称')  
  }
  triggers {
    GenericTrigger(
            genericVariables: [
              [key: 'branch', value: '$.ref']
            ],
            token: 'testpipeline-yxgj-marketing-job_PUSH' ,
            causeString: ' Triggered on $branch' ,
            printContributedVariables: true,
            printPostContent: true
        )
  }
  stages {
    stage('getBranch'){
      steps{
        script{
          try{                    
            if("${branch}" != ""){ 
              println "----------webhook式触发-----------"
              branchName = branch - "refs/heads"
              branchName = sh(returnStdout: true,script: "echo ${branchName}|awk -F '/' '{print \$NF}'").trim()
              println "webhook触发的分支是: " + "${branchName}"
            }
          } catch(exc) { }           
            if("${params.repoBranch}" != ""){
              println "-----------手动方式触发------------"
              branchName = "${params.repoBranch}"
              println "手动触发的分支是: " + "${branchName}"
            }           
        }  
      } 
    }    
    stage('checkOut') {
      steps{
        checkout([$class: 'GitSCM', branches: [[name: "${branchName}"]], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'CleanBeforeCheckout']], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '4axxx', url: "${repoUrl}"]]])
      }
    }
  }
}

提交代码后自动发布,实现获取git分支基本原理是:
1.开发提交代码触发钩子,其实就是发送post请求给jenkins 的Generic Webhook Trigger插件
2.Generic Webhook Trigger插件接收到后发布job,具体怎么发布还是在你的pipeline脚本里去定义。

其中triggers段 是定义Generic Webhook Trigger插件配置信息。
genericVariables:定义了branch变量 值对应的是post请求返回的$.ref 的值 也就是分支名字,不过这里的全名是 例如 refs/heads/debug 这种格式的分支pipeline scm不会识别到 需要转化只留下debug,这个才是分支名字。脚本中通过sed实现的
token: 必须定义触发钩子带的token 不配置会返回404
printContributedVariables: true, printPostContent: true:打开日志输出
脚本中其他的就不多说了 能懂的。

四、gitlab配置webhook

在这里插入图片描述
URL:填写http://JENKINS_URL/generic-webhook-trigger/invoke?token=你定义的token
Secret Token:为空就行
最确认添加

测试下是否通信正常
在这里插入图片描述
第一次test的时候会报404错误
在这里插入图片描述
原因是你的job还没有跑过一次,插件配置还没设置成你想要的配置,去你刚才创建的job 里设置Generic Webhook Trigger 插件里的token为你脚本自己定义的token。也可以手动触发你的job 先把配置填充进job里。然后再次test 返回200 就算成功了,不出意外的话你的job自动发布了。那证明提交代码自动发布的配置成功了。
在这里插入图片描述

五、实现手动发布job

            if("${params.repoBranch}" != ""){
              println "-----------手动方式触发------------"
              branchName = "${params.repoBranch}"
              println "手动触发的分支是: " + "${branchName}"
            }   

这段代码即实现了手动发布的判断逻辑。需要手动输入分支。
在这里插入图片描述

在这里插入图片描述

秀下整体的发布流程
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jenkins pipeline之自动构建(gitlab webhook 和 Generic Webhook Trigger集成) 的相关文章

随机推荐

  • 经纬度正则表达式

    经度 180 0 180 0 整数部分为0 180 输入1到8位小数 0 d 1 8 1 9 d d 1 8 1 0 7 d 1 d 1 8 180 0 1 8 纬度 90 0 90 0 整数部分为0 90 输入1到8位小数 0 1 8 d
  • ant上传组件upload,前端读取文件、创建文件

    业务需求是用户上传文件后 还能修改文件内容 最后保存修改后的文件 实现方式 1 前端读取文件内容后显示在代码编辑器中 方便用户修改 2 点保存按钮时 拿到改变的文件内容后 创建新的文件流 提交给后端 这里演示的是JSON文件数据 选择文件
  • 图显系统DRM CRTC完全解析

    目录 CRTC 工作原理和意义 CRTC 模块的初始化和功能 0 引言 DRM 下的 CRTC 代表 RGB 数据管道 从 drm plane 接收像素数据并将其混合到一起 传输给下级显示设备 drm encoder 由 drm displ
  • 原址删除有序数组重复整数

    给定一个有序数组 原址删除重复超过两次的整数 本笔记适合熟悉Python列表list的 coder 翻阅 学习的细节是欢悦的历程 Python 官网 https www python org Free 大咖免费 圣经 教程 python 完
  • Spring中bean创建的生命周期

    1 推断构造方法 2 实例化 3 依赖注入 4 处理Award回调beanFatoryAware 5 初始化前 处理 postConstruct注解 6 初始化 处理iniyializingBean接口 7 初始化前 进行aop
  • Distributed Database System —— Multi-raft协议介绍

    文章目录 Multi Raft协议 Multi Raft需要解决的问题 Multi Raft实现细节 Cockroach Multi Raft Raft Consistency of Range Replicas Range Leaders
  • SQL备份表数据

    1 情况说明 对某个表 需要进行某些删除或修改操作测试 但也需要数据还原 所以需要备份表中数据 2 思路分析 一般操作 将表A所有的数据 备份到新建表B中 若有其他更屌的操作 请告诉我 万分感谢 3 具体SQL实现 库类型说明 SQL SE
  • Java编程--IO流(Ⅱ 字节流)

    Java编程 IO流 字节流 File类虽然可以操作文件 但是并不是操作文件的内容 若要进行文件内容的操作只能通过两种途径完成 字节流和字符流 若要进行输入及输出操作一般都会按照如下的步骤进行 以文件操作为例 1 通过File类定义一个要操
  • 自定义SonarQube Java规则

    自定义SonarQube扫描Java Rule 在介绍如何自定义规则之前 先介绍一下这几个产品 SonarQube 代码质量管理平台 PMD 源代码分析器 FindBugs Java源代码分析器 查找代码Bug Sonar PMD Sona
  • PhotonServer的使用

    https blog csdn net a962035 article details 80713726
  • 一些编译器与解释器的理解

    概述 在19年拜读完Python解释器以及PHP部分解释器并未完全理解 当时主要关心于几个问题 解释器在干嘛 为什么 怎么干的 导致出现区域性片面的理解 直到今年读到内核才逐渐理解 碰巧看到LLVM 大佬思路就是清晰 简单描述个人的理解 如
  • k8s中的有状态,无状态,pv、pvc等

    数据库是一个典型的有状态服务 他的部署和无状态服务是不一样的 PostgresSQL 基于Kubernetes部署PostgresSQL CSDN博客 一 创建SC PV和PVC存储对象 二 部署PostgresSQL Volume Kub
  • dell进入u盘启动模式_uefi不识别u盘怎么办 uefi不识别u盘方法【图文详解】

    现代的电脑配置更新换代都很频繁 从以前的bios主板到现在的uefi主板配置都有很大的进步 而这种新型uefi配置也给新用户装系统带来麻烦 有些用户用u盘启动盘装系统发现uefi不识别u盘 uefi bios识别不了u盘的原因其实就是Lau
  • layui+poi-Java实现导入导出excel文件

    目录 需求说明 一 实现思路 二 前端代码 1 引入layui 2 隐藏部分内容 1 静态页面代码 2 js jquery 代码 点击 导入xx 按钮的js 弹出上面隐藏的内容 3 效果如下 3 下载模板js 4 选择文件 上传js 三 后
  • STM32USB的枚举过程简介

    STM32的USB枚举过程介绍 之前的说明 文中大量引用网上资料 在文后已给出资料的引用说明 文件涉及到的USB各种传输包各个位的含义以及USB标准设备请求的含义都没有做说明 推荐看 圈圈教你玩USB 里面有详细的说明 一 枚举前的工作 系
  • 034_非关系型数据库Redis_安装配置 & 基础语法 & Python交互

    文章目录 1 认识Redis 2 Redis 安装和配置 3 Redis 数据类型 4 Redis 内置指令 5 Redis 配置文件 远程登陆 6 Redis 应用场景 6 1 Redis 应用 手机手机验证码 6 2 Redis 应用
  • 【系统分析师之路】第七章 复盘系统设计(面向服务开发方法)

    系统分析师之路 第七章 复盘系统设计 面向服务开发方法 复盘系统设计 面向服务开发方法 系统分析师之路 第七章 复盘系统设计 面向服务开发方法 前言部分 历年真题考点分析 1 考点分析 2 重要知识点 第一部分 综合知识历年真题 2008下
  • ucint核心边缘分析_社会网络分析中核心边缘分析的简单教程

    最近碰到一位朋友在留言向我咨询如何用社会网络分析进行核心边缘分析 因此 根据这位朋友提供的数据 简单的操作了一下 并制作成教程 分析了可能存在的问题 教程如下 1 打开软件 2 点击上图表格 通过复制 粘贴输入数据 并保存至某一文件夹 3
  • python 字典

    字典的特征 1 字典中数据必须是以键值对的形式出现的 2 键不能重复 而值可以 3 字典中的键是不能修改的 而值是可以修改的 可以为任何对象 因此键不能用变量 字典的书写范例 dictory 猫 cat 狗 dog 狼 holf print
  • jenkins pipeline之自动构建(gitlab webhook 和 Generic Webhook Trigger集成)

    需求 1 开发在哪个分支上提交代码 jenkins就自动发布相对应的分支 2 实现既能手动发布jenkins 也要实现自动webhook发布 约定 和开发约定分支对应的环境 比如 debug对应开发环境 develop对应测试环境 mast