Google App Engine和Travis CI上的NodeJS环境变量

时间:2019-03-24 11:51:36

标签: node.js google-app-engine environment-variables travis-ci

我有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

这样的配置运行良好:如果在testlint命令中未发生任何错误,则项目将部署到Google App Engine。

但是我遇到了一个问题:我不能安全地导出我的环境。在CI流程中要为GAE构建的变量,因为构建需要从master不存在的.env存储库中提取文件(具有敏感数据的文件位于.gitignore中)。因此,尽管已部署该应用程序,但它不能作为环境使用。变量不存在。

我没有找到一种方法,可以使用Travis CI将环境变量安全地导出到GAE,并希望得到您的帮助。

P.S。您可能会注意到,我已经加密了我的环境。 .travis.yml中的变量。我在运行使用环境详细信息的测试时取得了成功。但是我不知道如何将它们导出到GAE构建过程。

1 个答案:

答案 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作为授权,然后检查保存的值:)祝您有美好的一天^ _ ^