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

Posted

技术标签:

【中文标题】Bamboo - 在任务/脚本之间传递环境变量【英文标题】:Bamboo - Pass Environmental Variables Between Tasks/Scripts 【发布时间】:2016-01-28 17:54:07 【问题描述】:

是否可以将一个脚本中设置的环境变量传递给 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

【问题讨论】:

【参考方案1】:

这是使用自 5.7 以来捆绑的 Inject Variables 插件实现的: 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 是属性文件中属性的键。例如,它可以被称为:

回声 $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 变量。所有句号(句点)都转换为下划线。例如,变量bamboo.my.variable 在bash 中是$bamboo_my_variable。这与文件脚本任务(不是内联脚本任务)有关。

【讨论】:

【参考方案2】:

环境变量只能从父进程传递给子进程。 要将它们放入不相关的程序中,您可以将它们写入一个文件,然后在另一个脚本中获取该文件:

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

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

source .vars

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

【讨论】:

大家好,这是迄今为止唯一可用的方法吗?,因为我正在寻找一种方法将一个任务的结果发送到下一个任务,但找不到 Bamboo 提供的任何默认方式.成功实现这一目标的人可以详细说明这一点......在最新版本的 Bamboo CI Server 的上下文中。任何帮助,将不胜感激。谢谢

以上是关于Bamboo - 在任务/脚本之间传递环境变量的主要内容,如果未能解决你的问题,请参考以下文章

TFS。将变量从触发的构建传递到发布中的下一个任务

竹变量是不是自动用作环境变量?

批处理文件中的 Bamboo 变量替换

如何在 ECS 任务中将 rds.DatabaseCluster 机密作为环境变量传递

如何在传递 ShellCheck 时通过环境变量将 glob 传递给 shell 脚本

我想请教一下,powershell的脚本之间如何传递全局变量。