在jenkins作业中,”仅在SCM更改时才构建”设置为true,但不使用最新提交进行构建

“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中的用法示例:

  • 安装SCM跳过插件(https://github.com/jenkinsci/scmskip-plugin),以避免在推送到分支后自动构建。
  • 在您的子任务项目配置中:

    部分构建触发器:

    • 检查"将更改推送到GitLab时生成。GitLabwebhook URL:"
    • 检查"轮询SCM "(无计划)。
    • 单击"高级"按钮,并验证是否已选中选项"启用[ci-skip] "(默认情况下必须选中)。

    部分构建环境:

    • 检查" SCM跳过"。
  • 在GIT项目中,添加位于"设置"->" WebHooks"中的WebHook。

    • 放置网址:<jenkins_url>/gitlab/notify_commit
    • 检查"推送事件"
  • 在多作业配置中:

    多作业部分的特定配置:

    • 检查"在轮询时除了多任务外还要轮询子任务"

    部分构建触发器:

    • 检查"轮询SCM "(无计划)。
  • 使用包含单词[ci-skip]的消息提交更改以跳过自动构建。

  • 现在您可以将更改推送到您的分支,Jenkins将收到通知并跳过构建。之后,运行您的MultiJob。