2

我们为旧版本的 Jenkins 编写的自定义插件使用 EnvironmentContributingAction 为执行提供环境变量,以便它们可以在未来的构建步骤中使用并作为参数传递给下游作业。

在尝试将我们的构建转换为工作流时,我无法访问这些变量:

node {
    // this step queries an API and puts the results in
    // environment variables called FE1|BE1_INTERNAL_ADDRESS
    step([$class: 'SomeClass', parameter: foo])

    // this ends up echoing 'null and null'
    echo "${env.FE1_INTERNAL_ADDRESS} and ${env.BE1_INTERNAL_ADDRESS}"
}

有没有办法访问注入的环境变量?我是否必须将此功能转换为构建包装器?

4

2 回答 2

3

EnvironmentContributingAction目前仅限于AbstractBuilds,而WorkflowRuns 不是,所以我刚刚提交的JENKINS-29537未决,您的插件需要以某种方式进行修改。选项包括:

  • 让构建器添加一个plain Action,然后使用 注册一个who检查它的EnvironmentContributor存在。buildEnvironmentFor(Run, …)Run.getAction(Class)
  • 切换到SimpleBuildWrapper在范围内定义环境变量的 a,然后使用该wrap步骤从 Workflow 调用它。
  • 依赖workflow-step-api并定义Step具有类似功能的自定义工作流,但直接返回 aList<String>或在您的上下文中有意义的任何内容。(代码示例
于 2015-07-21T14:31:52.203 回答
0

由于PR-2975已合并,您可以使用新界面: void buildEnvVars(@Nonnull Run<?, ?> run, @Nonnull EnvVars env, @CheckForNull Node node)

它也将被旧类型的构建使用。

于 2017-08-24T13:59:22.153 回答