You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Generic Webhook Trigger无法仅触发TAG推送构建问题

问题

无法仅针对基于TAG的代码检出触发构建,当前会同时触发基于BRANCH和TAG的代码检出构建。

版本信息
  • Jenkins: 2.401.1
  • Generic Webhook Trigger插件: 1.86.3
复现步骤
  • 使用以下代码创建Jenkinsfile并构建流水线:
def val = "Jenkins-Agent-01"
def registryLogin = "docker-hub.example.com"
def imageURL = "centos/devops-build:latest" 

pipeline {
    agent {
        node {
            label val
            customWorkspace "/opt/devops/workspace/${JOB_NAME}/${BUILD_NUMBER}"
        }
    }
    triggers {
        GenericTrigger(
            genericVariables: [
            [key: 'eventKey', value: '$.eventKey', defaultValue: 'null'],
            [key: 'tagId', value: '$.changes[0].refId', defaultValue: 'null'],
            [key: 'repoName', value: '$.repository.name', defaultValue: 'null'],
            [key: 'repository_slug', value: '$.repository.slug', defaultValue: 'null'],
            [key: 'repository_project_key', value: '$.repository.project.key', defaultValue: 'null'],
            [key: 'changes_ref_ids', value: '$.changes[?(@.ref.type == "TAG")].ref.id', defaultValue: 'null']
            ],
            causeString: 'Triggered By BitBucket',
            token: '',
            tokenCredentialId: '',
            printContributedVariables: false,
            printPostContent: false,
            silentResponse: false,
            regexpFilterText: '$changes_ref_ids',
            regexpFilterExpression: '^refs/tags/.*$'
        )
    }

    stages {
        stage('Display Payload') {
            steps {
                script {
                    sh """
                    echo "Repo ref Id: ${changes_ref_ids}"
                    echo "Repo Project Key: ${repository_project_key}"
                    """
                }            
            }
        }

        stage('Build Jar file') {
            steps {
                script {
                    docker.withRegistry("https://${registryLogin}", "docker-hub-creds") {
                        docker.image("${imageURL}").pull()
                        docker.image("${imageURL}").inside() {
                            echo "Starting the build...."
                            checkout([$class: 'GitSCM', 
                              branches: [[name: "${tagId}"]], 
                              userRemoteConfigs: [[credentialsId: "bitbucket-creds", url: "https://bitbucket.example.com/scm/${repository_project_key}/${repoName}.git"]]])
                            sh """
                            mvn help:evaluate -Dexpression=project.version -q -DforceStdout;
                            mvn clean install -DskipTests -Ptest
                            """
                        }
                    }
                }            
            }
        }
    }
}
  • 在BitBucket中配置Jenkins的Webhook地址
  • 推送分支或标签触发流水线构建
预期结果
  • Jenkins应仅在推送TAG时触发构建,分支推送时不触发。
实际结果
  • 推送分支或TAG时,Jenkins都会触发构建。
解决方法

你当前的过滤逻辑失效的核心原因是:分支推送时changes_ref_ids会返回空值,而插件对空值的过滤判断不符合预期,导致分支推送也能触发构建。可以通过以下方式调整:

方案1:直接过滤引用类型

修改GenericTrigger配置,新增获取引用类型的变量,仅允许TAG类型的变更触发构建:

triggers {
    GenericTrigger(
        genericVariables: [
            [key: 'eventKey', value: '$.eventKey', defaultValue: 'null'],
            [key: 'tagId', value: '$.changes[0].refId', defaultValue: 'null'],
            [key: 'repoName', value: '$.repository.name', defaultValue: 'null'],
            [key: 'repository_project_key', value: '$.repository.project.key', defaultValue: 'null'],
            // 新增获取当前变更的引用类型
            [key: 'ref_type', value: '$.changes[0].ref.type', defaultValue: 'null']
        ],
        causeString: 'Triggered By BitBucket',
        token: '',
        tokenCredentialId: '',
        printContributedVariables: false,
        printPostContent: false,
        silentResponse: false,
        // 过滤引用类型为TAG的事件
        regexpFilterText: '$ref_type',
        regexpFilterExpression: '^TAG$'
    )
}

方案2:双重过滤事件类型与引用类型

如果需要更严格的控制,可以同时匹配BitBucket的事件Key和引用类型,确保只有标签变更事件触发:

triggers {
    GenericTrigger(
        genericVariables: [
            [key: 'eventKey', value: '$.eventKey', defaultValue: 'null'],
            [key: 'tagId', value: '$.changes[0].refId', defaultValue: 'null'],
            [key: 'repoName', value: '$.repository.name', defaultValue: 'null'],
            [key: 'repository_project_key', value: '$.repository.project.key', defaultValue: 'null'],
            [key: 'ref_type', value: '$.changes[0].ref.type', defaultValue: 'null']
        ],
        causeString: 'Triggered By BitBucket',
        token: '',
        tokenCredentialId: '',
        printContributedVariables: false,
        printPostContent: false,
        silentResponse: false,
        // 同时匹配事件Key和引用类型
        regexpFilterText: '$eventKey $ref_type',
        regexpFilterExpression: 'repo:refs_changed TAG'
    )
}

调试建议

如果调整后仍有问题,可以暂时开启printContributedVariables: true和printPostContent: true,Jenkins会打印Webhook推送的原始内容和解析到的变量值,方便排查过滤逻辑是否正确。

内容的提问来源于stack exchange,提问作者Udayendu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 23:24:54