“Build only if SCM changes” is set to true in jenkins job but doesn't build with the latest commit
我有一个作业BuildApp,其构建版本(MultiJob阶段)可以调用另一个作业BuildAppJar来构建jar。在作业BuildApp中,将"仅在SCM更改时才生成"设置为true。我期望Job BuildAppJar将使用最新的提交构建jar文件,因为Job BuildApp配置为在SCM更改时生成。但是,这没有发生。取而代之的是,我得到的日志是"自上次构建以来,子作业没有更改"。为什么会这样呢?任何想法? Jenkins是否应该使用最新的代码提交进行构建?我正在使用Git。
1 2 3 4 | [WS-CLEANUP] Deleting project workspace... [WS-CLEANUP] Deferred wipeout is used... [WS-CLEANUP] Done >> Job status: [BuildAppJar] subjob has no changes since last build. |
谢谢。
这可能是由于此错误(我相信两者都是同一个问题):
https://issues.jenkins-ci.org/browse/JENKINS-50168
https://issues.jenkins-ci.org/browse/JENKINS-55524
症状是Jenkins正在轮询两个存储库,但没有检查正确的存储库是否有更改。添加您的" git polling log "(或者,取决于您的插件,在您的构建历史记录上方的列表底部显示的任何日志)以进行确认。我没有找到解决方法。
Webhooks(gitlab,bitbucket或其他)实际上并不会导致Jenkins构建特定的提交-Webhook只是通知Jenkins某些更改,Jenkins轮询存储库以查看该更改是否应触发构建。在我的情况下,Jenkins接收到该钩子,轮询该回购,然后轮询另一个回购(也由该作业使用,但很少更新)并检查是否有更改。因此,您需要同时检查"将更改推送到GitLab时的构建"和"轮询SCM "。
有关其他可能性的详细列表,请检查
https://issues.jenkins-ci.org/browse/JENKINS-17614
有效!问题是-Jenkins无法检测到子作业分支的更改。您必须为每个子作业执行SCM轮询或使用WebHook通知Jenkins。
我在WebHook中的用法示例:
在您的子任务项目配置中:
部分构建触发器:
- 检查"将更改推送到GitLab时生成。GitLabwebhook URL:"
- 检查"轮询SCM "(无计划)。
- 单击"高级"按钮,并验证是否已选中选项"启用[ci-skip] "(默认情况下必须选中)。
部分构建环境:
- 检查" SCM跳过"。
在GIT项目中,添加位于"设置"->" WebHooks"中的WebHook。
-
放置网址:
<jenkins_url>/gitlab/notify_commit - 检查"推送事件"
在多作业配置中:
多作业部分的特定配置:
- 检查"在轮询时除了多任务外还要轮询子任务"
部分构建触发器:
- 检查"轮询SCM "(无计划)。
使用包含单词[ci-skip]的消息提交更改以跳过自动构建。
现在您可以将更改推送到您的分支,Jenkins将收到通知并跳过构建。之后,运行您的MultiJob。