前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Jenkins配置仅合并代码后触发流水线

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

作者头像
DevOps云学堂
发布2022-05-23 10:38:39
9250
发布2022-05-23 10:38:39
举报
文章被收录于专栏:DevOps持续集成

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

Jenkins 作业设置

开启webhook trigger;

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

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

生成该作业的触发URL

代码语言:javascript
复制
http://192.168.1.200:8080/generic-webhook-trigger/invoke?token=devops-merge-trigger

GitLab项目设置

创建一个项目

配置Merge request事件的webhook。

分析数据

创建Merge request,观察数据。

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

代码语言:javascript
复制
# 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的过滤没用的请求,实现精准触发;

代码语言:javascript
复制

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'
            }
        }
    }
}

完成!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevOps云学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Jenkins 作业设置
  • GitLab项目设置
  • 分析数据
  • 开始集成
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档