【问题标题】:How do I chain a manually triggered downstream job, also passing parameters?如何链接手动触发的下游作业,同时传递参数?
【发布时间】:2012-08-16 09:00:32
【问题描述】:

我正在使用 Jenkins 创建构建管道,并且需要在管道中触发部署步骤。这意味着一个手动过程(构建自动发生,定时,然后在部署阶段停止,等待手动授权)。

我还需要使用上一步中的参数触发部署步骤。

因此,使用“参数化插件”我可以在作业之间传递参数。我可以触发自动或手动触发的下游作业(不确定这是标准功能,还是某些插件添加了手动构建)。

但是,我找不到任何方法来触发手动参数化作业。

有人知道这样做的方法吗?有没有其他插件可以用?

我需要参数的原因是我已经创建了一个通用的部署作业,并且需要传入模块名称和 maven 版本来部署。我可以为每个模块创建特定的部署作业,但这会非常痛苦。

我也一直在考虑以下问题,但这似乎是一个杂项:

  1. 自动化作业执行构建,触发“部署触发器”构建,传递参数。
  2. “部署触发器”将这些参数写入文件系统上的文件(构建步骤 - shell 执行),并手动触发实际部署作业
  3. 部署作业(必须使用“部署触发器”作业中的 WORKSPACE)从文件系统读取参数(使用 EnvInject 插件)。

这种方法存在各种问题

  1. 我就是不喜欢。
  2. 有一个中间作业只是来传递参数。这会使 Jenkins 工作区变得混乱
  3. 由于构建是在同一个 WORKSPACE 上执行的,所以对我来说似乎很脆弱(尽管可行!)

【问题讨论】:

  • 你有没有为此想出一个可以忍受的解决方案?
  • 没有。最后我自动触发了一个中间作业,将参数传递给它。这会将环境变量设置为工作区 FS 上的文件。然后我触发了一个手动步骤,在 same 环境中运行另一个作业,它根据之前设置的环境文件设置了一个环境。哈基。
  • 我只是在构建的后续步骤中使用了一个脚本来回显 myparameter=$POM_VERSION >> version.properties。然后在下一次构建中使用 EnvInject 读取 version.properties。

标签: jenkins jenkins-plugins


【解决方案1】:

build-pipeline-plugin 的当前生产版本 (1.4.2) 允许它使用参数指定手动下游作业,该参数显示在管道上并且可以从那里启动。 旧版本做不到。

【讨论】:

  • 还没有尝试过(我已经离开了这个项目),但我会相信这个插件。
  • 我似乎仍然无法完成这项工作。和 OP 一样,我可以让它自动运行,而且效果很好,但手动不行。
  • 我遇到了自动运行主导手动运行的问题。事实证明,当另一个作业运行时,这些作业被设置为构建,而不是仅仅依赖于 build-pipeline-plugin 提供的手动触发器。
【解决方案2】:

看看构建管道插件:https://wiki.jenkins-ci.org/display/JENKINS/Build+Pipeline+Plugin。

您可以指定要自动触发或手动触发的作业。

此外,如果您需要在作业之间传递参数,则需要下载 Groovy 插件:https://wiki.jenkins-ci.org/display/JENKINS/Groovy+plugin

为了在作业之间传递参数,假设您需要在构建开始时执行 System Groovy 脚本。这是一个示例,它将添加可供任何下游作业使用的 SVN_UPSTREAM 参数。 注意:我注意到创建下游作业时存在问题,该作业也具有系统常规脚本。它似乎消除了对创建的原始参数的任何引用。

import hudson.model.*
def build = Thread.currentThread().executable;
build.addAction(new ParametersAction(new StringParameterValue("SVN_UPSTREAM", build.getEnvVars()['SVN_REVISION'])));
println "SVN_UPSTREAM:" + build.getEnvVars()['SVN_UPSTREAM'];

【讨论】:

  • 问题是我需要为后续作业设置的设置是基于构建期间生成的东西(例如,我传入了构建工件的版本号,它基于jenkins 内部版本号和计算值 [maven 版本,减去'-SNAPSHOT]')。据我所知,系统脚本只能在作业开始时运行。
  • 我试过各种插件;构建管道插件、构建流程插件、参数化触发器插件。问题是,它们似乎都没有提供此功能。 [构建流程插件看起来很有希望,但我一直没有跟上它的发展。它现在可能提供此功能,我不知道。但它并没有在 wiki 页面上提到任何类似的内容]。
  • 使用 groovy 脚本在上游作业中看起来是正确的,但对我来说没有传递到下游。
  • 有没有办法在下游作业中编写Groovy脚本从上游作业中拉取参数?
【解决方案3】:

有一种解决方法:

  • 在上游作业中设置手动升级(在... > 仅在手动批准时升级构建)
  • 在促销中指定添加操作>在其他项目上触发参数化构建,指定作业并添加参数

一旦您手动提升上游作业的特定构建,它将启动下游作业的构建。 但下游作业不会出现在管道上。

【讨论】:

  • 这是一种可接受的解决方法,可以将参数传递给手动触发的作业。不幸的是,在我的情况下,我的手动触发作业也需要手动输入的参数,它不会停止并在此解决方法中要求。
【解决方案4】:

Build Pipeline Plugin 可以做到这一点,但在撰写本文时,尚未发布任何版本。我从 main(当时是 392 版)构建了插件,其中包括 this issue 中提到的 patch,它对我有用。
安装后,您可以在第一个作业中使用名为“构建其他项目(手动步骤)”的构建后操作,您可以在那里配置要传递给第二个(手动触发)管道作业的参数。

【讨论】:

  • 这很有希望,但不幸的是似乎不起作用。我可以让下游作业使用自动参数作业,但不能使用手动。
【解决方案5】:

在我看来,实现目标是不可能的

当您启动管道交付时,管道插件仅检查第一个作业的参数 -> 然后显示(或不显示)initParam 屏幕

但是当下一步(例如部署)是手动的并且需要参数时,initParam 屏幕将被忽略 看issuehttps://issues.jenkins-ci.org/browse/JENKINS-32336

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 2011-12-28
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多