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

时间:2017-05-22 20:53:42

标签: bamboo

定义Bamboo计划变量时,页面会显示此变量。

  

对于任务配置字段,请使用语法   $ {} bamboo.myvariablename。对于内联脚本,变量公开为   可以使用语法访问的shell环境变量   $ BAMBOO_MY_VARIABLE_NAME(Linux / Mac OS X)或%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

在日志查看器窗口中。

任何指针?

2 个答案:

答案 0 :(得分:2)

我尝试了以下内容并且有效:

在计划中,我将my_plan_var设置为“it works”(没有引号)

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

list

我得到了预期的结果:

  

测试:它有效

答案 1 :(得分:0)

我还想创建一个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}使用该变量。最后一个脚本任务只是看它是否在其他脚本中工作。您还可以在网络应用程序中将这些变量视为构建元数据。

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

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