3 votes

Comment définir une variable Env dans Circle CI

J'exécute un travail de base de données en utilisant le plugin Maven liquibase sur circle ci. J'ai besoin de lire les paramètres comme le nom d'utilisateur, le mot de passe, dburl, etc. à partir du magasin de paramètres AWS. Mais lorsque j'essaie de définir la valeur renvoyée par aws cli dans une variable personnalisée, elle est toujours vide. Je sais que la valeur existe car la même commande sur le terminal Mac renvoie une valeur.

Je suis en train d'utiliser un Bash script pour installer AWS CLI avec circle ci job.Quand je fais écho du mot de passe avec dans le fichier .sh je vois la valeur mais quand je le fais écho sur mon config.yml je vois une valeur vide vide. J'ai également essayé d'obtenir la valeur en utilisant aws ssm avec le fichier config.yml mais même là, la valeur est vide.

Mon Config.yml

version: 2

references:
defaults: &defaults
working_directory: ~/tmp

environment:
  PROJECT_NAME: DB Job

build-filters: &filters 
filters:
  tags:
    only: /^v[0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2}-(dev)/
  branches:
    ignore: /.*/
jobs:
checkout-code:
<<: *defaults

docker:
  - image: circleci/openjdk:8-jdk-node

steps: 
  - attach_workspace:
       at: ~/tmp

  - checkout

  - restore_cache:
      key: cache-{{ checksum "pom.xml" }}

  - save_cache:
      paths:
        - ~/.m2
      key: cache-{{ checksum "pom.xml" }}

  - persist_to_workspace:
      root: ~/tmp
      paths: ./

build-app:
<<: *defaults

docker:
  - image: circleci/openjdk:8-jdk-node

steps:
  - attach_workspace:
       at: ~/tmp

  - restore_cache:
      key: cache-{{ checksum "pom.xml" }}

  - run: chmod 700 resources/circleci/*.sh   
  - run: 
      name: Getting DB password
      command: resources/circleci/env-setup.sh

  - run: echo 'export ENV="$(echo $CIRCLE_TAG | cut -d '-' -f 2)"' >> $BASH_ENV
  - run: echo $ENV
  - run: echo $dbPasswordDev
  - run: export PASS=$(aws ssm get-parameters --names "/enterprise/org/dev/spring.datasource.password" --with-decryption --query "Parameters[0].Value" | tr -d '"') >> $BASH_ENV
  - run: echo $PASS
  - run: mvn resources:resources liquibase:update -P$ENV,pre-release

workflows:
version: 2
build-deploy:
jobs:
  - checkout-code:
      <<: *filters

  - build-app:
      requires:
        - checkout-code

      <<: *filters

env-setup.sh

sudo apt-get update
sudo apt-get install -y python-pip python-dev
sudo pip install awscli

aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID
aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY
aws configure set aws_region $AWS_DEFAULT_REGION

dbPassword=`aws ssm get-parameters --names "/enterprise/org/dev/spring.datasource.password" --with-decryption --query "Parameters[0].Value" | tr -d '"' `
echo "dbPassword = ${dbPassword}"

export dbPasswordDev=$dbPassword >> $BASH_ENV
echo $"Custom = $dbPasswordDev"

Lorsque je fais écho à $dbPasswordDev dans env-set.sh, je vois la valeur, mais dans config.yml, je ne vois pas la valeur et je vois une chaîne vide. De même, lorsque j'essaie de faire écho à $PASS dans le fichier config.yml, je m'attends à voir la valeur, mais je vois une chaîne vide.

7voto

Admon Sasson Points 169

Selon leur documentation officielle vous devez echo le "export foo=bar" dans $BASH_ENV (qui est juste un fichier qui s'exécute au démarrage d'une session bash) :

ainsi dans votre fichier env-setup.sh :

echo "export dbPasswordDev=$dbPassword" >> $BASH_ENV

0voto

Alex.Designworks Points 132

Voici un cas plus avancé où les variables peuvent être chargées à partir de .env fichier.

version: 2
aliases:

  - &step_process_dotenv
      run:
        name: Process .env file variables
        command: echo "export $(grep -v '^#' .env | xargs)" >> $BASH_ENV

jobs:
  build:
    working_directory: ~/project
    docker:
      - image: php
    steps:
      - checkout
      - *step_process_dotenv

Dépôt de sources avec tests : https://github.com/integratedexperts/circleci-sandbox/tree/feature/dotenv

Résultat de l'exécution du CI : https://circleci.com/gh/integratedexperts/circleci-sandbox/14

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X