工作流步骤是否可以访问 EnvironmentContributingAction 提供的环境变量?

Can a workflow step access environment variables provided by an EnvironmentContributingAction?

我们为旧版本的 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}"
}

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

EnvironmentContributingAction 目前仅限于 AbstractBuilds,而 WorkflowRuns 不是,因此待定 JENKINS-29537 我刚刚提交,您的插件需要修改不知何故。选项包括:

  • 让构建器添加一个普通的 Action,然后注册一个 EnvironmentContributor,其 buildEnvironmentFor(Run, …) 使用 Run.getAction(Class).
  • 检查其存在
  • 切换到定义范围内环境变量的 SimpleBuildWrapper,然后使用 wrap 步骤从 Workflow 调用它。
  • 依赖于 workflow-step-api 并定义具有类似功能但直接返回 List<String> 或任何在您的上下文中有意义的自定义工作流 Step。 (code sample)

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

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