在我的.travis.yml
配置中,我想根据触发构建的分支将部署设置到不同的阶段(开发/生产)。我正在使用shell脚本进行部署,即script
提供程序。
问题:我需要为不同的阶段(主要是AWS密钥)传递不同的环境变量。当存储在版本控制中时,这些变量需要加密。所以,我想做这样的事情:
deploy:
- provider: script
script: ./deploy.sh development
env:
-secure: <encrypted AWS_* variables for dev>
on:
branch: master
- provider: script
script: ./deploy.sh production
env:
-secure: <encrypted AWS_* variables for prod>
on:
branch: release
但env
密钥只能在全局范围内使用。是否有可能仅为特定脚本指定环境而不是其他任何东西?
答案 0 :(得分:1)
您可以通过在Web界面define it using the repository settings中将环境变量限制为特定分支来完成此操作(我不知道如何使用.travis.yaml
来执行此操作)。您可以创建多个具有相同名称的变量,只要它们限于不同的分支即可。在您的情况下,请使用开发凭据为AWS_SECRET_FOO
创建master
,并使用生产凭据为AWS_SECRET_FOO
创建release
。
尽管如此,如果您只是为了方便而定义特定于部署的env vars,那就太棒了。
答案 1 :(得分:0)
您可以简单地在脚本标记中包含env,例如正如here所述。
包含加密env的所有更改都是通过travis encrypt MY_SECRET_ENV=super_secret --add
(Reference)或在travis环境中(例如通过界面)将加密加密到版本控制而不是设置envs public。在你的情况下可能:
deploy:
- provider: script
script: env SUPER_SECRET_AWS_VARS=<encrypted AWS_* variables for dev> ./deploy.sh development
on:
branch: master
- provider: script
script: env SUPER_SECRET_AWS_VARS=<encrypted AWS_* variables for prod> ./deploy.sh production
on:
branch: release