特拉维斯:你能用其他环境变量构建env var吗?

时间:2017-02-08 08:03:07

标签: environment-variables travis-ci

我要做的是设置我的travis.yml,根据正在构建的分支使用适当命名的环境变量。

如果我已经存储在travis $ DEV_ARTIFACTS_KEY / $ TEST_ARTIFACTS_KEY等中,我正在思考这个问题

然后我推送到DEV分支,所以$ TRAVIS_BRANCH = DEV

我可以这样做:ARTIFACTS_KEY = $ {$ TRAVIS_BRANCH} _ARTIFACTS_KEY 它变为:ARTIFACTS_KEY = $ DEV_ARTIFACTS_KEY

显然,{}的上述语法不起作用,或者我不会在这里!想知道理论上这种方法是否可行,如果可行,怎么做!?

编辑:有关我尝试做什么的更多细节

我想以上述方式设置3个变量。

ARTIFACTS_KEY,ARTIFACTS_SECRET& ARTIFACTS_BUCKET即时创建 {BRANCH} _ARTIFACTS_KEY,{BRANCH} _ARTIFACTS_SECRET,{BRANCH} _ARTIFACTS_BUCKET

我没有分支变量,如:

env:
  - ARTIFACTS_KEY=$DEV_ARTIFACTS_KEY ARTIFACTS_SECRET=$DEV_ARTIFACTS_SECRET ARTIFACTS_BUCKET=$DEV_ARTIFACTS_BUCKET

其中$ DEV_ARTIFACTS_KEY等在Travis中定义。但是到目前为止,我还没有动态用分支名称替换DEV部分。

1 个答案:

答案 0 :(得分:0)

这适用于bash,因此也适用于Travis:

# setup dummy values
TRAVIS_BRANCH=DEV
DEV_ARTIFACTS_KEY=dev-artifacts-key-value
DEV_ARTIFACTS_SECRET=dev-artifacts-secret-value
DEV_ARTIFACTS_BUCKET=dev-artifacts-bucket-value

# actual lines you want
eval ARTIFACTS_KEY=\$${TRAVIS_BRANCH}_ARTIFACTS_KEY
eval ARTIFACTS_SECRET=\$${TRAVIS_BRANCH}_ARTIFACTS_SECRET
eval ARTIFACTS_BUCKET=\$${TRAVIS_BRANCH}_ARTIFACTS_BUCKET

# test results
echo "key=$ARTIFACTS_KEY"
echo "secret=$ARTIFACTS_SECRET"
echo "bucket=$ARTIFACTS_BUCKET"

每当你在另一个变量中有一个变量的名称时,你需要eval来解释它。当bash看到这一行时:

eval ARTIFACTS_KEY=\$${TRAVIS_BRANCH}_ARTIFACTS_KEY

首先展开变量(并单独保留转义的$):

eval ARTIFACTS_KEY=\$DEV_ARTIFACTS_KEY

然后它会对字符串eval执行ARTIFACTS_KEY=$DEV_ARTIFACTS_KEY,而$DEV_ARTIFACTS_KEY会扩展ARTIFACTS_KEY并将值分配给#each