我有一个简单的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
型
我确实有以前的建设在历史上的管道是故障,所以我不知道为什么它不能找到他们。
1条答案
按热度按时间isr3a4wc1#
您的分支说明符似乎是正确的(
refs/heads/master
或*/master
)。但是,请确保没有拼写错误或多余的空格。而且
master
分支中的Jenkinsfile不应该有任何可能覆盖分支说明符的配置。作为测试/解决方案:要在Jenkinsfile中实现检查,如果不是
master
分支,则将退出管道,您可以在管道脚本的开头添加条件:字符串
GitHub推送到refs/tags/1.6.0仍然导致管道执行。
转到GitHub存储库的设置,检查Jenkins服务器的webhook配置,并确保webhook设置为仅触发"push"事件,而不是"tag push"事件。
另外,修改你的Jenkinsfile来明确检查ref是一个标签还是一个分支。如果是一个标签,你可以中止构建。
型
我注意到的是,对于行为正确的构建(不在非主推送上执行),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关联的方式存在问题,这可能会导致您遇到的问题。