Jenkins配置仅合并代码后触发流水线

简介: Jenkins配置仅合并代码后触发流水线

使用GitLab+Jenkins集成, 使用Jenkins的Generic WebHook插件;此插件可以作为各个工具间集成使用的通用方式,但是遇到些场景需要写些代码。关于 “合并代码后触发Pipeline”的配置方式, 其实思路简单,实现和让我描述起来还是有点复杂的,今天来做一下,分享给需要的伙伴。

5c6745919075dfe9a56bbeb17b46d3e6.jpg


Jenkins 作业设置



开启webhook trigger;

ca711a9489da2c4d5181624a18a05da2.png


开启调试信息(为了便于拿到Gitlab POST数据)

5e1737c25d75b928b7dba13c130df327.png

为触发器配置一个全局且唯一的Token(一般使用作业名字)

ca84a382c5659603ea90d9c1dea350a4.png


生成该作业的触发URL

http://192.168.1.200:8080/generic-webhook-trigger/invoke?token=devops-merge-trigger


GitLab项目设置



创建一个项目

6bae4059b4c8eb005304e29cca2e39de.png


配置Merge request事件的webhook。

afaced2d508dbad25673e2038a9c900b.png


分析数据



创建Merge request,观察数据。

26453688487ff7dac3da63c58738d604.png


合并后GitLab的webhook触发了, 我们需要对比开启请求和合并请求的数据。找不同,找特点。

# approved状态
$.event_type = merge_request
$.object_attributes.state = opened
$.object_attributes.action = approved
# merge状态
$.event_type = merge_request
$.object_attributes.state = merged
$.object_attributes.action = merge
#拿到source和target分支
$.object_attributes.source_branch
$.object_attributes.target_branch


开始集成



此部分都是在jenkins上面配置的

配置Generic Webhook的过滤没用的请求,实现精准触发;

currentBuild.description = "Trigger: ${source_branch}  > ${target_branch} \n${event_type}  \n ${state}  \n ${action}"
pipeline {
    agent any
    triggers {
        GenericTrigger(causeString:'Generic Cause', 
            genericVariables: [[defaultValue:'', key:'event_type', regexpFilter:'', value:'$.event_type'], 
                [defaultValue:'NULL', key:'state', regexpFilter:'', value:'$.object_attributes.state'], 
                [defaultValue:'NULL', key:'action', regexpFilter:'', value:'$.object_attributes.action'],
                [defaultValue:'NULL', key:'source_branch', regexpFilter:'', value:'$.object_attributes.source_branch'], 
                [defaultValue:'NULL', key:'target_branch', regexpFilter:'', value:'$.object_attributes.target_branch']],
            printContributedVariables:true, 
            printPostContent:true, 
            regexpFilterExpression:'^merge_request\\smerged\\smerge$', 
            regexpFilterText:'$event_type $state $action', 
            token:'devops-merge-trigger', 
            tokenCredentialId:'')
    }
    stages {
        stage('Hello') {
            steps {
                echo 'Hello World'
            }
        }
    }
}


完成!

b0655fa486908f295854ccff7388f5ac.png


原文查看

相关文章
|
2月前
|
jenkins Java 持续交付
Gitee+Jenkins+SonarQube代码上线的实战操作
通过以上步骤,就可以实现基于Gitee、Jenkins和SonarQube的代码上线流程,确保代码的质量和上线过程的自动化和可控性。在实际操作中,可以根据项目的具体需求和环境进行适当的调整和优化。
|
2月前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
84 3
|
3月前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
【10月更文挑战第8天】本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
47 5
|
3月前
|
jenkins 持续交付 开发工具
【10月更文挑战第1天】通过jenkins选择tag完成代码上线
【10月更文挑战第1天】通过jenkins选择tag完成代码上线
|
5月前
|
jenkins 持续交付 网络安全
利用 Jenkins 实现持续集成与持续部署-代码拉取终端的配置
【8月更文挑战第30天】在Jenkins服务器中,git和Gitee是常用的代码拉取终端。Git作为分布式版本控制系统,具备出色的灵活性和可扩展性;而Gitee则在国内网络环境下表现更佳,适合团队协作。Git配置包括安装、设置用户信息及生成SSH密钥等步骤;Gitee配置也类似,需注册账号、创建仓库、配置基本信息并设置远程仓库地址。开发人员提交代码后,可通过Webhook、定时轮询或事件监听等方式触发Jenkins动作,确保持续集成和部署高效运行。正确配置这些触发机制并通过测试验证其有效性至关重要。
80 2
|
4月前
|
jenkins 持续交付 网络安全
利用 Jenkins 实现持续集成与持续部署-代码拉取终端的配置
安装Git、配置用户信息、生成SSH密钥以及在Gitee上创建项目仓库等。
96 0
|
5月前
|
jenkins Devops Java
jenkins学习笔记之十:配置Gitlab提交流水线
jenkins学习笔记之十:配置Gitlab提交流水线
|
5月前
|
弹性计算 运维 Serverless
项目管理和持续集成系统搭建问题之云效流水线支持阿里云产品的企业用户如何解决
项目管理和持续集成系统搭建问题之云效流水线支持阿里云产品的企业用户如何解决
93 1
项目管理和持续集成系统搭建问题之云效流水线支持阿里云产品的企业用户如何解决
|
5月前
|
敏捷开发 Java 测试技术
阿里云云效产品使用合集之如何下载流水线构建过程中生成的jar
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
5月前
|
敏捷开发 测试技术 持续交付
阿里云云效产品使用合集之如何限制在本地的构建主机创建的流水线的并发数
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。