es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo configurar variables de entorno para múltiples entornos de implementación mientras se utilizan acciones de GitHub.

Necesito usar acciones de Github para implementar mi pila en muchos entornos, por ejemplo, development y production. Mi implementación previa ya no funcionará y aunque tengo un nuevo flujo de trabajo funcionando, configurar variables de entorno para múltiples entornos parece repetitivo y me hace pensar que debe haber una mejor manera.

Lo que tenía antes:

jobs:
  build-and-deploy:
    name: Crear el contenedor e implementar
    runs-on: ubuntu-latest
    steps:
      - name: Establecer la variable de entorno para desarrollo
        if: ${{ !endsWith(github.ref, '/main') }}
        run: |
          echo "GCP_PROJECT=my-project-dev" >> $GITHUB_ENV
          echo "NODE_ENV=development" >> $GITHUB_ENV
          ...

      - name: Establecer la variable de entorno para producción
        if: ${{ endsWith(github.ref, '/main') }}
        run: |
          echo "GCP_PROJECT=my-project-prod" >> $GITHUB_ENV
          echo "NODE_ENV=production" >> $GITHUB_ENV
          ...

Lo que tengo ahora:

jobs:
  build-and-deploy:
    name: Crear el contenedor e implementar
    runs-on: ubuntu-latest
    env:
      GCP_PROJECT: ${{ (!endsWith(github.ref, '/main') && 'my-project-dev') || 'my-project-prod' }}
      NODE_ENV: ${{ (!endsWith(github.ref, '/main') && 'development') || 'production' }}
    steps:
      ...

Obviamente, no parece tan malo en el ejemplo, pero para muchas más variables de entorno, {!endsWith(github.ref, '/main') && 'dev-value') || 'prod-value'} parece ruidoso y sucio.

Entonces, ¿cuál sería la forma adecuada de hacer esto?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una manera de potencialmente hacer esto más limpio y menos repetitivo es utilizar la Estrategia de Matriz de GitHub Actions. La estrategia de matriz te permite definir múltiples variables con diferentes valores, y luego ejecutará el trabajo varias veces con cada combinación de esos valores.

    Por ejemplo, podrías definir una matriz para entornos de implementación de esta manera:

    strategy:
      matrix:
        env: [development, production]
        gcp_project: [my-project-dev, my-project-prod]
    

    Luego puedes usar estos valores en tus pasos de esta manera:

    steps:
      - name: Establecer variables de entorno
        run: |
          echo "GCP_PROJECT=${{ matrix.gcp_project }}" >> $GITHUB_ENV
          echo "NODE_ENV=${{ matrix.env }}" >> $GITHUB_ENV
    

    Esto ejecutaría el trabajo dos veces, una vez con env: development y gcp_project: my-project-dev, y luego nuevamente con env: production y gcp_project: my-project-prod.

    De esta manera, solo tienes que definir las variables una vez en la matriz, y automáticamente utilizará los valores correctos para cada entorno de implementación.

    Por supuesto, necesitarías modificar esto para adaptarlo a tu caso de uso específico, pero utilizar la estrategia de matriz puede ser una buena manera de simplificar y optimizar tu flujo de trabajo de GitHub Actions.

Comments are closed.