我要做的是设置我的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部分。
答案 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
。