如何链接手动触发的下游作业,同时传递参数?

时间:2012-08-16 09:00:32

标签: jenkins jenkins-plugins

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

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

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

然而,我找不到任何触发手动参数化作业的方法。

有谁知道这样做的方法?我可以使用另一个插件吗?

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

我也一直在考虑以下问题,但这似乎是一个不错的选择:

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

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

5 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:2)

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

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

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

为了传递参数,我们可以在构建开始时需要执行系统Groovy脚本的作业之间进行SVN修订。这是一个添加SVN_UPSTREAM参数的示例,可供任何下游作业使用。 注意:我注意到创建一个也有系统groovy脚本的下游作业时出现问题。它似乎吹走了对创建的原始参数的任何引用。

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'];

答案 2 :(得分:2)

有一种解决方法:

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

在我看来,没有可能实现目标

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

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