我有nodejs
应用程序,并使用 Travis CI 进行了持续集成(运行测试和eslint编写代码)。在我的项目中,我在.env
文件中使用了一些环境变量(jwt密钥,mongodb凭据等)
现在,我想在将development
分支合并到master
之后设置持续部署。为此,我已经研究了Travis文档和其他在Google上找到的指南,并进行了一些设置。我的.travis.yml
文件:
language: node_js
node_js: lts/*
cache:
directories:
- node_modules
script:
- yarn install
- yarn test
- yarn lint
notifications:
email: false
deploy:
provider: gae
project: gae-project-name
skip_cleanup: true
keyfile: gae.json
on: master
env:
global:
- secure: FlwzKDN8HXl1cuGBhtQwbm/GjbOVMcLfEhcJkKky+2aGIhe4BOSxjMynrCts7eM53a87GMnyJXsmFxKOeO+w8RYqHVixD77duejV2o+XkoZL1QWORqiSMyK8dvLNc+lqoJ1Lf+qFqOOQCq1TxJ4W5ycFs82/hJMlMuu8jf2fxGhENoDwcARivZ0Fsrq/4/JA+YS3JjG6dqr78M7VwhrKv4mk4M5wMHiacHpKPhHib56v//wwUtsgYnyVLV0n+CPBlm6yh2aWbESt+YLU4uar39gumpG5bzp4+F01qDrWQwi3ctArOYZ5sKHgSfHZDP4jOEcKF4pYWoUlMqkT1vInmK27jnoiiCjZzQ6sfLw2O8eTb104Rlbgae4ttY38KWNE5N5w37DvSV5VzkAZ5xJuXb4j+GF/YmDep5tKNFKgjyUkFeNb7gXY/9INaJlCMiw6guQ6dYRoQlHCbv43jLnxy75E5PHPKMKHkZEi1nfvCKBYgJhIZxZ1PEjWyrupvnt+eyV0IxC7e9vCr/Ih8GkUEPa/uFVHAhDzr5x11OxQogOlSbh+G1kytUS2LhUyxqnQeFwo0DZACML/GPW41r2iXmIwI+SZzSVuT/01ZTRJNiS56UfnncI/+q5rbHR/1muTArnEqbeCISOP0YN2cBF4MefelXuNmjy2IJop56vea/U=
...other variables
这样的配置运行良好:如果在test
和lint
命令中未发生任何错误,则项目将部署到Google App Engine。
但是我遇到了一个问题:我不能安全地导出我的环境。在CI流程中要为GAE构建的变量,因为构建需要从master
不存在的.env
存储库中提取文件(具有敏感数据的文件位于.gitignore
中)。因此,尽管已部署该应用程序,但它不能作为环境使用。变量不存在。
我没有找到一种方法,可以使用Travis CI将环境变量安全地导出到GAE,并希望得到您的帮助。
P.S。您可能会注意到,我已经加密了我的环境。 .travis.yml
中的变量。我在运行使用环境详细信息的测试时取得了成功。但是我不知道如何将它们导出到GAE构建过程。
答案 0 :(得分:1)
有几种方法可以解决此问题。我更喜欢ci中的ENV变量,将它们放在目录中并随后删除。
echo "$ENV_DEVELOP" > ./.env
echo $APP_ENGINE_TEST_KEY > /tmp/$CI_PIPELINE_ID.json
在管道中执行类似的操作,然后在从系统部署过程之后将其删除
rm /tmp/$CI_PIPELINE_ID.json
rm ./.env
此外,如果您不想在管道的envs中的任何地方存储凭据,则可以创建基本的https服务器,该服务器将根据请求使用提交哈希的auth为您检索env示例。
您可以为push事件创建一个钩子,然后在push上将提交哈希发送到您的服务器并将其存储在某个文件中,然后,当到达env的时候,将管道直接卷曲到服务器,并以deployment_commit_hash作为授权,然后检查保存的值:)祝您有美好的一天^ _ ^