Estoy tratando de establecer diferentes valores para las variables de entorno en CircleCI de acuerdo con el $ CIRCLE_BRANCH actual. Intenté establecer dos valores diferentes en la configuración de CircleCI y exportarlos en consecuencia en la fase de implementación, pero eso no funciona:

deployment:
  release:
    branch: master
    commands:
      ...
      - export API_URL=$RELEASE_API_URL; npm run build
      ...
  staging:
    branch: develop
    commands:
      ...
      - export API_URL=$STAGING_API_URL; npm run build
      ...

¿Cómo podría lograr eso?

Gracias de antemano.

4
felipeecst 25 jun. 2017 a las 20:57

2 respuestas

La mejor respuesta

Usa un script bash

En mis proyectos, archivo eso usando un script bash.

Por ejemplo, este es mi circle.yml :

machine:
  node:
    version: 6.9.5

dependencies:
  override:
    - yarn install

compile:
  override:
    - chmod -x compile.sh
    - bash ./compile.sh

Y este es mi compile.sh

#!/bin/bash

if [ "${CIRCLE_BRANCH}" == "development" ]
then
  export NODE_ENV=development
  export MONGODB_URI=${DEVELOPMENT_DB}
  npm run build
elif [ "${CIRCLE_BRANCH}" == "staging" ]
then
  export NODE_ENV=staging
  export MONGODB_URI=${STAGING_DB}
  npm run build
elif [ "${CIRCLE_BRANCH}" == "master" ]
then
  export NODE_ENV=production
  export MONGODB_URI=${PRODUCTION_DB}
  npm run build
else
  export NODE_ENV=development
  export MONGODB_URI=${DEVELOPMENT_DB}
  npm run build
fi

echo "Sucessfull build for environment: ${NODE_ENV}"

exit 0
4
Sam Quinn 26 jun. 2017 a las 16:20

La pregunta es hace casi 2 años, pero recientemente estaba buscando una solución similar y la encontré.

Se refiere a la función de CircleCI llamada Contextos (https://circleci.com/docs /2.0/contexts/). Gracias a Contextos puede crear múltiples conjuntos de variables de entorno que están disponibles en toda la organización. Luego puede cargar dinámicamente uno de los conjuntos dependiendo de la propiedad de los flujos de trabajo 'filters.

Permítanme demostrarlo con el siguiente ejemplo:

Imagine que tiene dos sucursales y desea que cada una de ellas se implemente en un servidor diferente. Lo que tienes que hacer es:

  1. cree dos contextos (por ejemplo, prod-ctx y dev-ctx) y defina la variable de entorno SERVER_URL en cada uno de ellos. Debe iniciar sesión en el panel de CircleCI e ir a "Configuración" -> "Contextos".

  2. en su .circleci/config.yml defina la plantilla del trabajo y llámelo deploy:

deploy: &deploy
steps:
  - ...
  1. definir flujos de trabajo:
workflows:
  version: 2
  deploy:
    jobs:
      - deploy-dev:
          context: dev-ctx
          filters:
            branches:
              only:
                - develop
      - deploy-prod:
          context: prod-ctx
          filters:
            branches:
              only:
                - master
  1. finalmente defina dos trabajos deploy-prod y deploy-dev que usarían la plantilla deploy:
jobs:
  deploy-dev:
    <<: *deploy

  deploy-prod:
    <<: *deploy

Los pasos anteriores crean dos trabajos y los ejecutan dependiendo de la condición filters. Además, cada trabajo obtiene un conjunto diferente de variables de entorno, pero la lógica de implementación permanece igual y se define una vez. Gracias a esto, logramos valores de variables de entorno dinámico para diferentes ramas.

10
Mariusz Pilarczyk 14 mar. 2019 a las 15:08