• 提交代码触发Jenkins流水线更新


    提交哪个构建哪个

    或者

    某个指定分支提交才构建

    jenkins自己的restful接口在权限认证上比较麻烦,所以我选择了Jenkins的插件generic-webhook-trigger

    使用下来感觉没有选错

    1. 安装jenkins插件generic-webhook-trigger

    在系统配置中去安装插件。

    2. 在Jenkinsfile中配置

    node {
     properties([
      pipelineTriggers([
       [$class: 'GenericTrigger',
        genericVariables: [
         [key: 'ref', value: '$.ref'],
         [
          key: 'before',
          value: '$.before',
          expressionType: 'JSONPath', //Optional, defaults to JSONPath
          regexpFilter: '', //Optional, defaults to empty string
          defaultValue: '' //Optional, defaults to empty string
         ]
        ],
        genericRequestVariables: [
         [key: 'requestWithNumber', regexpFilter: '[^0-9]'],
         [key: 'requestWithString', regexpFilter: '']
        ],
        genericHeaderVariables: [
         [key: 'headerWithNumber', regexpFilter: '[^0-9]'],
         [key: 'headerWithString', regexpFilter: '']
        ],
    
        causeString: 'Triggered on $ref',
    
        token: 'abc123',
        tokenCredentialId: '',
    
        printContributedVariables: true,
        printPostContent: true,
    
        silentResponse: false,
    		// 这里只更新master
        regexpFilterText: '$ref'+'/'+'master',
        regexpFilterExpression: 'refs/heads/master/'+ env.BRANCH_NAME
       ]
      ])
     ])
    
     stage("build") {
      	// other stage
     }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    这里解释一下

    // 这里只更新master
    regexpFilterText: '$ref'+'/'+'master',
    regexpFilterExpression: 'refs/heads/master/'+ env.BRANCH_NAME
    
    • 1
    • 2
    • 3

    $ref 的值为git更新后推送过来的分支,如果是master分支,则会是refs/heads/master,获取到对应值后,会与regexpFilterExpression进行正则比对。如果是每个分支提交对应构建对应的分支可以这么写:

    // 这里只更新master
    regexpFilterText: '$ref',
    regexpFilterExpression: 'refs/heads/'+ env.BRANCH_NAME
    
    • 1
    • 2
    • 3

    如果只在某个分支提交时进行构建,则使用第一种我的写法,当提交分支与当前分支一致都为master才进行构建。

    3. 将项目通过Jenkinsfile进行构建。

    构建之后,就可以尝试用链接调用,验证是否生效

    // jenkins地址
    http://[xxx.xxx.xxx]//generic-webhook-trigger/invoke?token=abc123
    
    • 1
    • 2

    通过浏览器或者postman进行调用,返回结果如下:

    {
        "jobs": {
            "test/master": {
                "regexpFilterExpression": "refs/heads/master",
              	// 这里显示true就是对应分支生效了。
                "triggered": true,
                "resolvedVariables": {
                    "before": ""
                },
                "regexpFilterText": "refs/heads/master",
                "id": 5337,
                "url": "queue/item/5337/"
            }
        },
        "message": "Triggered jobs."
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    4. 添加钩子到gitlab(用的什么代码管理工具就到哪里设置,这里使用gitlab)

    image-20220907144837980

    将刚才的地址放在url就可以。尝试提交代码,看是否生效。

  • 相关阅读:
    文件上传—WAF拦截的绕过方式
    最小堆提升每次排序的效率
    代码随想录算法训练营第二天(C) | 977.有序数组的平方 209.长度最小的子数组 59.螺旋矩阵
    3900页手册415集视频426G资料迅为RK3568开发板
    winform 使用MiniExcel 动态读取EXCEL文件 动态加载列跟数据
    卷积神经网络的应用领域,卷积神经网络应用举例
    首购2元起!CDN与加速特惠专场来啦~
    物通博联持续参与京东方(BOE)工厂数字化项目
    阿里云-maven私服idea访问私服与组件上传
    如何看待AIGC技术?
  • 原文地址:https://blog.csdn.net/w_monster/article/details/126751558