工作流步骤是否可以访问 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
目前仅限于 AbstractBuild
s,而 WorkflowRun
s 不是,因此待定 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)
它也将被旧类型的构建使用。
我们为旧版本的 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
目前仅限于 AbstractBuild
s,而 WorkflowRun
s 不是,因此待定 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)
它也将被旧类型的构建使用。