web-dev-qa-db-fra.com

Comment ajouter un fichier .env dans gitlab ci pendant la phase de déploiement?

J'ai donc une application react/TypeScript dans mon référentiel sur lequel je travaille et dans mon référentiel j'ai un fichier .env que j'ignore afin que mes secrets ne soient pas exposés et un fichier .env-exemple important variables d'environnement à configurer. Mon problème est, puisque je ne pousse pas le fichier .env vers mon référentiel, lorsque je déploie mon application via le moteur d'application Google (cela se fait à l'étape du déploiement dans mon gitlab -ci.yml fichier), ces variables d'environnement ne seront pas présentes en production et j'en ai besoin pour que mon application fonctionne car je fais quelque chose comme ça dans mon fichier webpack.config.js.

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

puis

new webpack.DefinePlugin({
  'process.env': dotenv.parsed
})

Voici mon fichier .gitlab-ci pour référence au cas où quelqu'un ici voudrait le voir.

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

Aussi, n'hésitez pas à critiquer mon fichier gitlab-ci.yml afin que je puisse l'améliorer.

13
Luis Averhoff

Je ne sais pas si vous en avez encore besoin, mais c'est comme ça que j'ai réalisé, ce que vous vouliez.

  1. Créez vos variables d'environnement dans votre configuration gitlab repo

  2. Créer setup_env.sh:

#!/bin/bash

echo $API_URL >> .env
echo $NODE_ENV >> .env
  1. Modifiez votre .gitlab-ci.yml. Renversez ci-dessous votre before_script: section
  - chmod +x ./setup_env.sh
  - ./setup_env.sh
  1. Dans webpack.config.js utilisez https://www.npmjs.com/package/dotenv
require('dotenv').config();

Cela passe votre .env variables disponibles dans webpack.config.js fichier.

Ajoutez ceci à votre tableau plugins (ajoutez les variables dont vous avez besoin):

    new webpack.DefinePlugin({
      'process.env.API_URL': JSON.stringify(process.env.API_URL),
      'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
      ...
    })

Maintenant, votre déploiement doit utiliser vos variables d'environnement spécifiées dans vos paramètres gitlab.

7
Michał Czarnota