So I have a react/typescript app in my repo that I'm working on and in my repo I have a .env file that I'm ignoring so that my secrets don't get exposed and a .env-example file of important environment variables to configure. My problem is, since I'm not pushing the .env file to my repo, when I deploy my app through the google app engine(this is done in the deployment stage in my gitlab-ci.yml file), these environment variables will not be present in production and I need them for my app to work as I do something like this in my webpack.config.js file.
const dotenv = require('dotenv').config({ path: __dirname + '/.env' });
and then
new webpack.DefinePlugin({
'process.env': dotenv.parsed
})
Here is my .gitlab-ci file for reference in case anyone here wants to see.
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
Also, feel free to critique my gitlab-ci.yml file so I can make it better.