Travis CI:如何仅为部署脚本设置环境变量?

时间:2017-04-04 15:03:47

标签: travis-ci

在我的.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密钥只能在全局范围内使用。是否有可能仅为特定脚本指定环境而不是其他任何东西?

2 个答案:

答案 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
相关问题