处理一个脚本化管道参数覆盖另一个

问题描述 投票:0回答:1

我有一个带有 2 个脚本化管道的设置(都在共享库中)

管道A:

caller.groovy

管道B: 消费我.groovy

它们都有自己的参数(properties.parameters) 它们中的每一个都是一个自己的共享库,独立运行,没有任何问题。 问题是我有一个场景,我进入 Jenkins UI,我为调用者设置了我想要的参数,其中一些参数稍后用于提供“consumeMe”

问题是,一旦调用者执行consumeMe,consumeMe就会用consumeMe参数填充UI中的初始(调用者)参数,我该如何克服这个问题?它要求我再次运行调用者(这将失败,因为参数不匹配),并且只会注册调用者的默认值。

有没有办法在consumeMe执行完成后重新应用调用者参数,以便下次我单击使用参数构建时,它将显示实际的调用者参数,而不是consumeMe的“虚拟”参数?

我正在研究: currentBuild.replaceAction(currentBuild.getAction(hudson.model.ParametersAction.class))

到目前为止还没有运气

jenkins jenkins-pipeline jenkins-plugins jenkins-groovy
1个回答
0
投票

如果您使用该 properties([parameters([ ... ])]) 块定义一个方法并调用它两次(在调用

consumeMe
之前和之后),那么它
可能
可能会起作用。

但看起来确实最好重新设计管道,因为即使在这种情况下动态处理管道参数,稍后您也可能会面临完全相同的问题 - 因为 Jenkins 只能在构建后更新作业参数被触发。

假设您有两个管道(上游和下游),它们应该对

choice
参数使用相同的选项集,并且第一个管道使用
build
步骤触发第二个管道。如果您使用新值运行第一个管道,第二个管道将不会启动,因为 Jenkins 在管道启动之前验证了
choice
选项 - 因此使用旧的选择集。如果我没记错的话,Jenkins 甚至不会将第一份工作标记为失败,所以你必须自己弄清楚。

解决该锁定的唯一方法是手动运行第二个管道,在读取新的 Jenkinsfile 后停止它,但在采取任何进一步操作之前,检查是否应用了新的参数集,然后重新运行第一个管道管道。您可以尝试向第二个管道添加一个阶段,如果新的参数值集与旧的参数值不对应,该阶段会自动停止执行,但现在第一个阶段将失败。

所以我只是建议不要尝试并投入时间来简化管道。

© www.soinside.com 2019 - 2024. All rights reserved.