Jenkins仅在推送到master时运行管道

izj3ouym  于 2023-11-17  发布在  Jenkins
关注(0)|答案(1)|浏览(150)

我有一个简单的Jenkins管道项目,我想在推送发生时触发主分支,我已经使用以下设置配置了管道:

  • 构建触发器:GITScm轮询的GitHub钩子触发器
  • 管道:
  • 定义:SCM管道脚本
  • SCM:Git
  • 仓库URL:$URL
  • 凭据:Jenkins中配置的SSH密钥
  • 分支说明符:refs/heads/master(我也尝试将其设置为 /master*,但没有效果)
  • 脚本路径:Jenkinsfile

现在的问题是,无论我的推送发生在什么ref上,这个管道都会被启动并运行。例如,删除或创建一个标签,都会启动这个管道。
在同一个Jenkins示例中,我没有看到类似定义的管道的这种行为,但它们的定义完全相同(除了指向同一个GitHub示例中的不同存储库)。
有没有人知道我可以在哪里查找故障排除,为什么任何GitHub推送,无论ref是什么,都要构建这个管道?
编辑:
我注意到的是,对于行为正确的构建(不在非主推送上执行),Jenkins日志显示以下内容:

[2023-11-14 18:20:08] [INFO] Received PushEvent for https://$GITHUB_REPO from $IP_ADDRESS ⇒ https://$JENKINSURL/webhook
[2023-11-14 18:20:08] [INFO] Poked GoodPipeline
[2023-11-14 18:20:08] [FINEST] lastBuildRevisionSha1 matches sha1:029801983091280128101290129012, returning lastBuild 
[2023-11-14 18:20:09] [FINEST] lastBuildRevisionSha1 matches sha1:029801983091280128101290129012, returning lastBuild

字符串
对于此行为不正确的管道,日志显示以下内容:

[2023-11-14 18:16:23] [INFO] Received PushEvent for https://$GITHUB_REPO from $IP_ADDRESS ⇒ https://$JENKINS_URL/webhook
[2023-11-14 18:16:23] [INFO] Poked MyPipeline 
[2023-11-14 18:16:24] [FINEST] lastBuildRevisionSha1 matches sha1:103981293812312391239012390123, returning lastBuild 
[2023-11-14 18:16:24] [FINEST] lastBuildRevisionSha1 matches sha1:103981293812312391239012390123, returning lastBuild 
[2023-11-14 18:16:25] [FINEST] lastBuild is null 
[2023-11-14 18:16:25] [FINEST] No match found in getLastBuild for sha1:103981293812312391239012390123, returning null 
[2023-11-14 18:16:25] [INFO] SCM changes detected in MyPipeline. Triggering #5


我确实有以前的建设在历史上的管道是故障,所以我不知道为什么它不能找到他们。

isr3a4wc

isr3a4wc1#

您的分支说明符似乎是正确的(refs/heads/master*/master)。但是,请确保没有拼写错误或多余的空格。
而且master分支中的Jenkinsfile不应该有任何可能覆盖分支说明符的配置。
作为测试/解决方案:要在Jenkinsfile中实现检查,如果不是master分支,则将退出管道,您可以在管道脚本的开头添加条件:

pipeline {
    agent any
    stages {
        stage('Precheck') {
            steps {
                script {
                    if(env.BRANCH_NAME != 'master') {
                        currentBuild.result = 'ABORTED'
                        error('Building on master branch only')
                    }
                }
            }
        }
        // rest of your pipeline
    }
}

字符串
GitHub推送到refs/tags/1.6.0仍然导致管道执行。
转到GitHub存储库的设置,检查Jenkins服务器的webhook配置,并确保webhook设置为仅触发"push"事件,而不是"tag push"事件。
另外,修改你的Jenkinsfile来明确检查ref是一个标签还是一个分支。如果是一个标签,你可以中止构建。

pipeline {
    agent any
    stages {
        stage('Precheck') {
            steps {
                script {
                    if(env.GIT_BRANCH.startsWith('refs/tags/')) {
                        currentBuild.result = 'ABORTED'
                        error('Ignoring tag push')
                    }
                }
            }
        }
        // rest of your pipeline
    }
}


我注意到的是,对于行为正确的构建(不在非主推送上执行),Jenkins日志显示了以下内容
在发生故障的管道中,日志条目[FINEST] lastBuild is null[FINEST] No match found in getLastBuild for sha1...表明Jenkins无法将传入的提交SHA与管道历史中以前的任何构建相关联。
这导致Jenkins将每次推送都视为新的更改,从而触发构建。
确保在Jenkins中正确配置了SCM轮询。它应该准确地反映您所针对的存储库和分支。
仔细检查您的Jenkins文件和管道配置,以确定工作管道和故障管道之间的任何差异,特别是SCM的设置方式。
另外,请验证日志中提到的SHA1是否对应于存储库的master分支中的提交。如果它不是来自master,则可能表明Jenkins错误地处理了来自其他分支或标签的事件。
检查故障管道的构建历史。如果Jenkins维护构建历史或将构建与特定SHA1关联的方式存在问题,这可能会导致您遇到的问题。

相关问题