如何在内联脚本任务中使用奔步计划变量?



定义奔步计划变量时,页面有这个。

对于任务配置字段,请使用语法 ${bamboo.myvariablename}.对于内联脚本,变量公开为 可以使用语法访问的 shell 环境变量 $BAMBOO_MY_VARIABLE_NAME (Linux/Mac OS X) or %BAMBOO_MY_VARIABLE_NAME% (视窗)。

但是,这在我的 Linux 内联脚本中不起作用。例如,我定义了以下计划变量

name: my_plan_var    value: some_string

我的内联脚本很简单...

PLAN_VAR=$BAMBOO_MY_PLAN_VAR
echo "Plan var: $PLAN_VAR"

我只是得到一个空白字符串。

我试过这个

PLAN_VAR=${bamboo.my_plan_var}

但我得到

${bamboo.my_plan_var}: bad substitution

在日志查看器窗口中。

有什么指示吗?

我尝试了以下方法,它有效:

在计划中,我将my_plan_var设置为"它有效"(不带引号)

在内联脚本中(不要忘记第一行):

#/bin/sh
PLAN_VAR=$bamboo_my_plan_var
echo "testing: $PLAN_VAR"

我得到了预期的结果:

测试:它有效

我还想创建一个 Bamboo 变量,我发现唯一可以在脚本之间共享它的是如下所示inject-variables

  1. 在将创建变量的脚本之后添加到bamboo-spec.yaml以下内容:
Build:
tasks:
- script: create-bamboo-var.sh
- inject-variables:
file: bamboo-specs/vars.yaml
scope: RESULT
# namespace: plan
- script: echo ${bamboo.inject.GIT_VERSION} # just for testing

注意:命名空间默认为inject

  1. create-bamboo-var.sh创建文件bamboo-specs/vars.yaml
#!bin/bash
versionStr=$(git describe --tags --always --dirty --abbrev=4)
echo "GIT_VERSION: ${versionStr}" > ./bamboo-specs/vars.yaml

或者对于多行,您可以使用:

SW_NUMBER_DIGITS=${1}    # Passed as first parameter to build script
cat <<EOT > ./bamboo-specs/vars.yaml
GIT_VERSION: ${versionStr}
SW_NUMBER_APP: ${SW_NUMBER_DIGITS}
EOT

Scope可以是局部的,也可以是结果。本地意味着它仅适用于当前作业,结果意味着它可以用于此计划的后续阶段以及从结果创建的发布。

Namespace仅用于避免与其他变量的命名冲突。

有了上述内容,您可以在以后的脚本中将该变量与${bamboo.inject.GIT_VERSION}一起使用。最后一个脚本任务只是查看它是否在其他脚本中工作。您还可以将 Web 应用程序中的变量视为生成元数据。

我在构建(在我的情况下编译 C 代码)之前使用上述脚本,因此我还可以创建一个可供源代码使用的version.h文件。

这仍然有点麻烦,但我对此感到满意,我希望它能帮助其他人配置 Bamboo。奔步文档可能会更好。(仍然有很多尝试和错误)

最新更新