竹子 - 在任务/脚本之间传递环境变量

14

在Bamboo中,是否可以将一个脚本中设置的环境变量传递给另一个脚本?

例如,我如下设置Go,并希望后续任务(脚本)可以访问我在此处导出的PATH和GOPATH。

set -e

if [ ! -d "go" ]; then
    wget -q https://storage.googleapis.com/golang/go1.5.linux-amd64.tar.gz
    tar -xzf go1.5.linux-amd64.tar.gz
fi

export GOROOT=$(pwd)/go

mkdir -p gopath/
export GOPATH=$(pwd)/gopath
export PATH=$GOROOT/bin:$GOPATH/bin:$PATH
2个回答

10

这是使用Inject Variables插件实现的,该插件从5.7版本开始捆绑:

https://marketplace.atlassian.com/plugins/com.atlassian.bamboo.plugins.bamboo-variable-inject-plugin/server/overview

操作步骤如下:

  • 在初始任务中,使用一个脚本将状态存储到文件中(以key=value格式),例如:

echo "MYVAR=$(cat some_variable_info_file)" >> build/docker.properties

  • 配置下一个Inject任务,将上一步中的属性文件读入Bamboo变量。设置PATH为属性文件的路径(例如build/docker.properties)并设置名称空间,例如docker

  • 要在下一个脚本任务*中使用此变量,可以将其引用为:$bamboo_docker_MYVAR,其中docker是命名空间,MYVAR是属性文件中的键。例如可以这样引用它:

echo $bamboo_docker_MYVAR

这意味着您仍然可以使用基于文件的方法,只需确保其中的数据是以下类型:

some_key1=some_value1
some_key2=some_value2

注意,根据Bamboo文档,下划线是使用它的方式:

https://confluence.atlassian.com/bamboo/bamboo-variables-289277087.html

在bash中使用变量

Bamboo变量被导出为bash shell变量。所有的句点(periods)都会转换成下划线。例如,变量bamboo.my.variable在bash中为$bamboo_my_variable。这与文件脚本任务(而非内联脚本任务)有关。


五年后,我们仍然不得不在Bamboo中这样做,这真是令人难过。 - jediz

4

环境变量只能从父进程传递给子进程。如果您想将它们传递到与其无关的程序中,可以将它们写入文件,然后在其他脚本中使用source命令引用该文件:

...
echo export GOROOT=$GOROOT >>$GOROOT/.vars
echo export GOPATH=$GOPATH >>$GOROOT/.vars
echo export PATH=$PATH >>$GOROOT/.vars

然后,其他稍后启动的脚本应该在开头附近加入这个(假设它们从GOROOT目录中的工作目录开始):

source .vars

(或者将其添加到启动其他脚本的脚本中。)

大家好,这是目前唯一可用的方式吗?因为我正在寻找一种将一个任务的结果发送到下一个任务的方法,但是没有找到Bamboo提供的任何默认方式。有人能够详细说明一下吗?...与最新版本的Bamboo CI服务器相关。任何帮助都将不胜感激。谢谢。 - Rohit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接