13

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

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

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

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

有谁知道这样做的方法?我可以使用其他插件吗?

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

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

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

这种方法存在各种问题

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

5 回答 5

7

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

于 2014-03-28T07:36:05.543 回答
2

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

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

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

为了传递参数,让我们说作业之间的 SVN 修订版,您需要在构建开始时执行 System Groovy 脚本。这是一个示例,它将添加可供任何下游作业使用的 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'];
于 2012-09-20T20:51:02.430 回答
2

有一种解决方法:

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

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

于 2014-03-26T14:24:49.603 回答
1

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

于 2013-01-14T13:18:48.890 回答
0

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

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

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

于 2016-09-12T14:10:13.380 回答