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 puedo establecer de manera dinámica una variable de entorno en un paso de acción compuesta de GitHub?

Necesito que sea una variable de entorno y esto es específicamente para una “acción compuesta”.

En una acción compuesta, he intentado muchas formas diferentes de configurar variables de entorno. La única forma que he encontrado para hacerlo es usando “env” dentro de un paso en sí mismo:

runs:
  using: "composite"
  steps:
    - name: "Un paso"
      env:
        BRANCH_REF: "${{ github.ref }}"
      run: echo "La rama es $BRANCH_REF"
      shell: bash

Desafortunadamente, necesito configurar esta variable de manera dinámica. En una acción regular, habría hecho algo como esto:

env:
  FOO: "${{ secrets.FOO }}"
#...
- run: echo "FOO=${{ github.event.inputs.foo }}" >> $GITHUB_ENV
  if: ${{ github.event.inputs.foo != '' }}

Dado que no puedo hacer eso, he probado varias otras formas que no han funcionado. Este fue mi último intento, que tampoco funciona:

- name: "Un paso"
  run: |
    if ${{ github.event.inputs.foo != '' }}
    then
      echo "Configurado a partir de la entrada manual: ${{ github.event.inputs.foo }}"
      echo "FOO=${{ github.event.inputs.foo }}" >> $GITHUB_ENV
    else
      echo "Usar entrada secreta del flujo de trabajo para FOO: ${{ inputs.FOO }}"
      echo "FOO=${{ inputs.FOO }}" >> $GITHUB_ENV
    fi
    echo "foo es $FOO"
  shell: bash

La salida que obtengo en la consola de GitHub es:

Ejecutar si es verdadero
  si es verdadero
  then
    echo "Configurado a partir de la entrada manual: Mi foo es un buen foo"
    echo "FOO=Mi foo es un buen foo" >> $GITHUB_ENV
  else
    echo "Usar FOO secreto: *"
    echo "FOO=*" >> $GITHUB_ENV
  fi
  echo "foo es $FOO"
  shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
Configurado a partir de la entrada manual: Mi foo es un buen foo

foo es 

En la línea de salida final, obtengo “foo es”, por lo que parece que la variable de entorno $FOO no se está configurando.

¿Cómo puedo configurar dinámicamente la variable de entorno en mi acción compuesta?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para establecer dinámicamente una variable de entorno en una acción compuesta, puedes utilizar la sintaxis ${{ env.NOMBRE_VARIABLE }} para hacer referencia a las variables de entorno y escribir los valores en $GITHUB_ENV. Aquí tienes un ejemplo:

    runs:
      using: "composite"
      steps:
        - name: "Paso"
          run: |
            if [ -n "${{ github.event.inputs.foo }}" ]; then
              echo "Estableciendo FOO a partir de entrada manual: ${{ github.event.inputs.foo }}"
              echo "FOO=${{ github.event.inputs.foo }}" >> $GITHUB_ENV
            else
              echo "Estableciendo FOO a partir de entrada secreta del flujo de trabajo: ${{ secrets.FOO }}"
              echo "FOO=${{ secrets.FOO }}" >> $GITHUB_ENV
            fi
            echo "FOO es $FOO"
    

    En este ejemplo, estamos comprobando si se ha pasado una entrada manual llamada foo o si se ha establecido un secreto del flujo de trabajo llamado FOO. Si cualquiera de las dos condiciones es verdadera, establecemos la variable de entorno FOO de forma dinámica utilizando el archivo $GITHUB_ENV. Por último, mostramos el valor de $FOO para verificar que se haya establecido correctamente.

Comments are closed.