我想要做的是设置我的 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 部分。
最佳答案
这适用于 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
.
关于environment-variables - 特拉维斯 : Can you construct env var using other env vars?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42107655/