Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 在部署阶段,如何在gitlab ci中添加.env文件?_Google App Engine_Google Cloud Platform_Gitlab_Gitlab Ci - Fatal编程技术网

Google app engine 在部署阶段,如何在gitlab ci中添加.env文件?

Google app engine 在部署阶段,如何在gitlab ci中添加.env文件?,google-app-engine,google-cloud-platform,gitlab,gitlab-ci,Google App Engine,Google Cloud Platform,Gitlab,Gitlab Ci,因此,我在我的repo中有一个react/typescript应用程序,我正在处理,在我的repo中有一个.env文件,我忽略了它,这样我的秘密就不会暴露出来,还有一个.env示例文件,其中包含要配置的重要环境变量。我的问题是,由于我没有将.env文件推送到我的repo,当我通过谷歌应用程序引擎部署我的应用程序时(这是在我的gitlab ci.yml文件的部署阶段完成的),这些环境变量将不会出现在生产环境中,我需要它们来让我的应用程序工作,因为我在webpack.config.js文件中执行了类

因此,我在我的repo中有一个react/typescript应用程序,我正在处理,在我的repo中有一个.env文件,我忽略了它,这样我的秘密就不会暴露出来,还有一个.env示例文件,其中包含要配置的重要环境变量。我的问题是,由于我没有将.env文件推送到我的repo,当我通过谷歌应用程序引擎部署我的应用程序时(这是在我的gitlab ci.yml文件的部署阶段完成的),这些环境变量将不会出现在生产环境中,我需要它们来让我的应用程序工作,因为我在webpack.config.js文件中执行了类似的操作

const dotenv = require('dotenv').config({ path: __dirname + '/.env' });
然后

new webpack.DefinePlugin({
  'process.env': dotenv.parsed
})
这是我的.gitlab ci文件,供参考,以防这里的任何人想看到

cache:
  paths:
    - node_modules/

stages:
  - build
  - test
  - deploy

Build_Site:
  image: node:8-alpine
  stage: build
  script:
    - npm install --progress=false
    - npm run-script build
  artifacts:
    expire_in: 1 week
    paths:
      - build

Run_Tests:
  image: node:8-alpine
  stage: test
  script:
    - npm install --progress=false
    - npm run-script test

Deploy_Production:
  image: google/cloud-sdk:latest
  stage: deploy
  environment: Production
  only:
    - master
  script:
    - echo $DEPLOY_KEY_FILE_PRODUCTION > /tmp/$CI_PIPELINE_ID.json
    - gcloud auth activate-service-account --key-file /tmp/$CI_PIPELINE_ID.json
    - gcloud config set project $PROJECT_ID_PRODUCTION
    - gcloud info
    - gcloud --quiet app deploy
  after_script:
    - rm /tmp/$CI_PIPELINE_ID.json

另外,请随意评论我的gitlab-ci.yml文件,这样我就可以把它做得更好。

我不知道您是否还需要它,但这就是我如何实现的,您想要的

  • 在gitlab repo配置中创建环境变量

  • 创建
    设置\u env.sh

  • 修改您的
    .gitlab ci.yml
    。在脚本之前向上插入下面的
    部分
  • webpack.config.js中
    使用
  • 这将传递
    webpack.config.js
    文件中可用的
    .env
    变量

    将其添加到
    插件
    数组中(添加您需要的变量):


    现在,您的部署应该使用在gitlab设置中指定的环境变量。

    您找到解决方案了吗?我也在寻找一种方法。@IMB一种解决方案是创建一个bash脚本,该脚本在构建阶段(将其放在before scipt中)通过gitlab的环境变量设置创建一个临时的.env,通过npm run build构建项目,然后删除.env文件,使其不再作为工件保留(将此放在后面的脚本中).@LuisAverhoff您有此解决方案的示例可供共享吗?将.env文件提交到repo是一个错误的选择practice@FrancisManojFernnado是的,这就是为什么会有这样的情况procedure@MichaCZARNOTA,您是否考虑将GalTabCI环境变量中的所有.Env内容复制为一个坏的实践?在.dotenv文件中定义条目时(至少在最坏的情况下)。然后我们在规定的指令中重建.env文件。对我来说似乎有些过分。让我们把整个.env内容放在Gitlab CI环境变量中。@chaiyachaiya我想你是对的。在下一个项目中,我省略了这个开销。但是,不幸的是,我没有找到一种方法来避免在Gitlab repo config中设置env变量。
    #!/bin/bash
    
    echo API_URL=$API_URL >> .env
    echo NODE_ENV=$NODE_ENV >> .env
    
      - chmod +x ./setup_env.sh
      - ./setup_env.sh
    
    require('dotenv').config();
    
        new webpack.DefinePlugin({
          'process.env.API_URL': JSON.stringify(process.env.API_URL),
          'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
          ...
        })