为什么 Jenkins Git 插件在被 SCM 工具触发时使用旧参数值
Why is the Jenkins Git Plugin using old parameter values when being triggered by SCM tool
在推送到多个 Git 存储库后,我们使用 Jenkins 构建服务器来构建我们的软件。
由于我们最近进行了一些代码重组,所以我尝试建立一个更复杂的构建管道,按照依赖项的顺序构建我们的每个产品(每个产品一个 Git 存储库)。
每个作业都会触发后续项目构建作业的执行,将 $GIT_BRANCH
传递给下一个作业。
整个管道运行良好,我在 origin/master
中开始构建第一个项目,项目 2、3 和 4 在 master 中构建。我从另一个分支开始,后续项目切换到这个分支。
我使用 Git 参数插件进行分支选择并将其传递给 Git 分支引用。默认值为空字符串。
不幸的是,整个设置破坏了 Gitblit 的推送挂钩。虽然 Jenkins 仍然报告具体项目已被触发以检查 SCM,但构建仅在提交位于为上次手动构建选择的分支中时才开始。
检查 Git 轮询日志,我发现仅检查了先前选择的分支是否有更改。
根据我对所有这些的基本理解,我猜想 SCM 轮询触发器使用最后一个 "known" 值,而不是参数的默认值。这是 Jenkins、插件或我的配置中的错误吗?有没有人完成过这样的两用管道?
编辑:我试过“**”作为默认值,结果相同。
我找到了一个不太干净的问题解决方案。我添加了进一步的构建作业,这些作业除了坐在 SCM 上什么都不做,然后触发真正的项目。他们将 "built" 的 GIT 提交 ID 传递给下一个作业。
这是一个例子:
projectA_trigger
Freestyle Project
GIT Repository configured
Build triggert by SCM
Post-Build-Action Trigger parameterized build of projectA, submit built GIT commit ID
projectA
Maven-Project
GIT repository configured
Build NOT triggered by SCM
Post-Build-Action Trigger parameterized build of projectB...
我为以前的每个主要项目创建了一个触发器项目,现在 SCM 更改触发器在正确的分支中构建并使用管道。
可行,但感觉有点老套,所以如果您有更好的解决方案,请告诉我。
在推送到多个 Git 存储库后,我们使用 Jenkins 构建服务器来构建我们的软件。
由于我们最近进行了一些代码重组,所以我尝试建立一个更复杂的构建管道,按照依赖项的顺序构建我们的每个产品(每个产品一个 Git 存储库)。
每个作业都会触发后续项目构建作业的执行,将 $GIT_BRANCH
传递给下一个作业。
整个管道运行良好,我在 origin/master
中开始构建第一个项目,项目 2、3 和 4 在 master 中构建。我从另一个分支开始,后续项目切换到这个分支。
我使用 Git 参数插件进行分支选择并将其传递给 Git 分支引用。默认值为空字符串。
不幸的是,整个设置破坏了 Gitblit 的推送挂钩。虽然 Jenkins 仍然报告具体项目已被触发以检查 SCM,但构建仅在提交位于为上次手动构建选择的分支中时才开始。
检查 Git 轮询日志,我发现仅检查了先前选择的分支是否有更改。
根据我对所有这些的基本理解,我猜想 SCM 轮询触发器使用最后一个 "known" 值,而不是参数的默认值。这是 Jenkins、插件或我的配置中的错误吗?有没有人完成过这样的两用管道?
编辑:我试过“**”作为默认值,结果相同。
我找到了一个不太干净的问题解决方案。我添加了进一步的构建作业,这些作业除了坐在 SCM 上什么都不做,然后触发真正的项目。他们将 "built" 的 GIT 提交 ID 传递给下一个作业。
这是一个例子:
projectA_trigger
Freestyle Project
GIT Repository configured
Build triggert by SCM
Post-Build-Action Trigger parameterized build of projectA, submit built GIT commit ID
projectA
Maven-Project
GIT repository configured
Build NOT triggered by SCM
Post-Build-Action Trigger parameterized build of projectB...
我为以前的每个主要项目创建了一个触发器项目,现在 SCM 更改触发器在正确的分支中构建并使用管道。
可行,但感觉有点老套,所以如果您有更好的解决方案,请告诉我。