我有一个作业 BuildApp ,该作业的构建(MultiJob阶段)调用另一个作业 BuildAppJar 来构建一个jar。在作业 BuildApp 中,“ 仅在SCM更改时构建”设置为true。我希望作业 BuildAppJar 将使用最新的提交构建jar文件,因为作业 BuildApp 被配置为在SCM更改时生成。但是,这没有发生。取而代之的是,我得到的日志是“子作业自上次构建以来没有变化”。为什么会这样呢?任何想法?詹金斯不应该使用最新的代码来构建吗?我正在使用Git。
[WS-CLEANUP] Deleting project workspace...
[WS-CLEANUP] Deferred wipeout is used...
[WS-CLEANUP] Done
>> Job status: [BuildAppJar] subjob has no changes since last build.
谢谢。
答案 0 :(得分:1)
这可能是由于此错误(我相信两者都是同一个问题):
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
答案 1 :(得分:0)
有效!问题是-詹金斯无法检测到子作业分支的变化。您必须为每个子作业执行SCM轮询或使用WebHook通知Jenkins。
我在WebHook中使用的示例:
在您的子作业项目中Configs:
部分构建触发器:
部分构建环境:
在GIT项目中,添加位于设置-> WebHooks 的WebHook。
<jenkins_url>/gitlab/notify_commit
在多作业配置中:
部分针对多作业的配置:
部分构建触发器:
使用包含单词 [ci-skip] 的消息来进行更改以跳过自动构建。
现在您可以将更改推送到您的分支,Jenkins将收到通知并跳过构建。之后,运行您的MultiJob。