Definición de variables de entorno para un único flujo de trabajo
Para definir una variable de entorno personalizada para su uso en un único flujo de trabajo, puede definir la clave env
en el archivo de flujo de trabajo. El alcance de una variable personalizada establecida por este método se limita al elemento en el cual se define. Puedes definir las variables que tienen alcance para:
- Todo el flujo de trabajo, mediante el uso de
env
en el nivel superior del archivo de flujo de trabajo. - El contenido de un trabajo dentro de un flujo de trabajo mediante
jobs.<job_id>.env
. - Un paso específico dentro de un trabajo mediante
jobs.<job_id>.steps[*].env
.
name: Greeting on variable day on: workflow_dispatch env: DAY_OF_WEEK: Monday jobs: greeting_job: runs-on: ubuntu-latest env: Greeting: Hello steps: - name: "Say Hello Mona it's Monday" run: echo "$Greeting $First_Name. Today is $DAY_OF_WEEK!" env: First_Name: Mona
name: Greeting on variable day
on:
workflow_dispatch
env:
DAY_OF_WEEK: Monday
jobs:
greeting_job:
runs-on: ubuntu-latest
env:
Greeting: Hello
steps:
- name: "Say Hello Mona it's Monday"
run: echo "$Greeting $First_Name. Today is $DAY_OF_WEEK!"
env:
First_Name: Mona
Puedes acceder a los valores de variable env
mediante variables de entorno de ejecutor o mediante contextos. En el ejemplo anterior, se muestran tres variables personalizadas que se usan como variables de entorno de ejecutor en un echo
comando: $DAY_OF_WEEK
, $Greeting
y $First_Name
. A los valores para estas variables se les configura y da el alcance en el flujo de trabajo, job y nivel de paso respectivamente. La interpolación de estas variables se produce en el ejecutor.
El shell que usa en el ejecutor procesa los comandos de los pasos run
de un flujo de trabajo o una acción a la que se hace referencia. Las instrucciones en las otras partes del flujo de trabajo son procesadas por GitHub Actions y no se envían al ejecutor. Puede usar contextos o variables de entorno de ejecutor en los pasos run
, pero en las partes de un flujo de trabajo que no se envían al ejecutor debe usar contextos para tener acceso a los valores de las variables. Para más información, consulta Uso del contexto para acceder a los valores de las variables.
Debido a que la interpolación de las variables de ambiente del ejecutor se realiza después de que un trabajo del flujo de trabajo se envíe a una máquina ejecutora, debes utilizar la sintaxis adecuada para el shell que se utiliza en el ejecutor. En este ejemplo, el flujo de trabajo especifica ubuntu-latest
. De manera predeterminada, los ejecutores de Linux utilizan el shell bash, así que debe utilizar la sintaxis $NAME
. De forma predeterminada, los ejecutores de Windows usan PowerShell, por lo que tendría que usar la sintaxis $env:NAME
. Para obtener más información sobre shells, consulta Sintaxis del flujo de trabajo para GitHub Actions.
Definición de variables de configuración para varios flujos de trabajo
Puedes crear variables de configuración para su uso en varios flujos de trabajo y definirlas en el nivel de organización, repositorio o entorno.
Por ejemplo, puedes usar variables de configuración para establecer valores predeterminados para los parámetros pasados a herramientas de compilación en un nivel de organización, pero, a continuación, permitir que los propietarios del repositorio invaliden estos parámetros por caso.
Al definir variables de configuración, están disponibles automáticamente en el contexto vars
. Para más información, consulta Uso del contexto vars
para acceder a los valores de las variables de configuración.
Creación de variables de configuración para un repositorio
Para crear secretos o variables en GitHub para el repositorio de una cuenta personal, debe ser propietario del repositorio. Para crear secretos o en GitHub para el repositorio de una organización, debe tener acceso de admin
. Por último, para crear secretos o variables para el repositorio de una cuenta personal o el repositorio de una organización a través de la API de REST, es preciso tener acceso de colaborador.
-
En GitHub, navegue hasta la página principal del repositorio.
-
En el nombre del repositorio, haz clic en Configuración. Si no puedes ver la pestaña "Configuración", selecciona el menú desplegable y, a continuación, haz clic en Configuración.
-
En la sección "Seguridad" de la barra lateral, seleccione Secretos y variables y haga clic en Acciones.
-
Haz clic en la pestaña Variables.
-
Haz clic en Nueva variable de repositorio.
-
Escribe el nombre de la variable en el campo Nombre.
-
En el campo Valor, escribe el valor de la variable.
-
Haga clic en Agregar variable.
Creación de variables de configuración para un entorno
Para crear secretos o variables para un entorno en el repositorio de una cuenta personal, debe ser el propietario del repositorio. A fin de crear secretos o variables para un entorno en el repositorio de una organización, debe tener acceso de admin
. Para más información sobre los entornos, consulta Administrar entornos para la implementación.
-
En GitHub, navegue hasta la página principal del repositorio.
-
En el nombre del repositorio, haz clic en Configuración. Si no puedes ver la pestaña "Configuración", selecciona el menú desplegable y, a continuación, haz clic en Configuración.
-
En la barra lateral de la izquierda, haz clic en Entornos.
-
Haz clic en el ambiente al cual quieras agregar una variable.
-
En Variables de entorno, haz clic en Agregar variable.
-
Escribe el nombre de la variable en el campo Nombre.
-
En el campo Valor, escribe el valor de la variable.
-
Haga clic en Agregar variable.
Creación de variables de configuración para una organización
Cuando creas un secreto o una variable en una organización, puedes usar una política para limitar el acceso por repositorio. Por ejemplo, puedes otorgar acceso a todos los repositorios, o limitarlo a solo los repositorios privados o a una lista específica de estos.
Los propietarios de la organización y los usuarios con los permisos "Administrar variables de acciones de la organización" o "Administrar secretos de acciones de la organización" pueden crear secretos o variables a nivel de organización.
Para más información, consulta Acerca de los roles personalizados de organización
-
En GitHub, navega a la página principal de tu organización.
-
En el nombre de la organización, haz clic en Configuración. Si no puedes ver la pestaña "Configuración", selecciona el menú desplegable y, a continuación, haz clic en Configuración.
-
En la sección "Seguridad" de la barra lateral, seleccione Secretos y variables y haga clic en Acciones.
-
Haz clic en la pestaña Variables.
Nota:
Es posible que la página "Actions secrets and variables" no muestre pestañas distintas para secretos y variables en función de los permisos. Los propietarios y usuarios de la organización con los permisos "Administrar variables de acciones de la organización" y "Administrar secretos de acciones de la organización" verán las pestañas Variables y Secretos. Para más información, consulta Acerca de los roles personalizados de organización.
-
Haz clic en Nueva variable de organización.
-
Escribe el nombre de la variable en el campo Nombre.
-
En el campo Valor, escribe el valor de la variable.
-
En la lista desplegable Repository access (Acceso al repositorio), elija una directiva de acceso.
-
Haga clic en Agregar variable.
Uso de contextos para acceder a los valores de las variables
Los contextos son una manera de acceder a información acerca de las ejecuciones de flujo de trabajo, variable, entornos del ejecutor, trabajos y pasos. Para obtener más información, consulta Contexts reference. Hay muchos otros contextos que puedes utilizar para propósitos diversos en tus flujos de trabajo. Para obtener más información sobre dónde se pueden usar varios contextos dentro de un flujo de trabajo, consulta Contexts reference.
Puedes acceder a los valores de variables de entorno mediante el env
contexto y los valores de las variables de configuración mediante el contexto vars
.
Uso del contexto env
para acceder a los valores de las variables de entorno
Adicionalmente a las variables de entorno del ejecutor, GitHub Actions también te permite configurar y leer los valores clave env
utilizando contextos. Se pretende utilizar las variables de ambiente y contextos en puntos diferentes del flujo de trabajo.
Un ejecutor procesa los pasos run
de un flujo de trabajo o de una acción a la que se hace referencia. Como resultado, puede usar las variables de entorno del ejecutor aquí, mediante la sintaxis adecuada para el shell que está utilizando en el ejecutor; por ejemplo, $NAME
para el shell de Bash en un ejecutor de Linux o $env:NAME
para PowerShell en un ejecutor de Windows. En la mayoría de los casos también puede usar contextos, con la sintaxis ${{ CONTEXT.PROPERTY }}
, para tener acceso al mismo valor. La diferencia es que el contexto se interpolará y reemplazará por una cadena antes de enviar el trabajo a un ejecutor.
Sin embargo, no puede utilizar las variables de entorno de ejecutor en partes de un flujo de trabajo que son procesadas por GitHub Actions y no son enviadas al ejecutor. En su lugar, puedes utilizar contextos. Por ejemplo, GitHub Actions siempre procesará un condicional if
, el cual determina si un trabajo o paso se envía al ejecutor o no. Tendrá que utilizar un contexto en una declaración condicional if
para acceder al valor de una variable.
name: Conditional env variable on: workflow_dispatch env: DAY_OF_WEEK: Monday jobs: greeting_job: runs-on: ubuntu-latest env: Greeting: Hello steps: - name: "Say Hello Mona it's Monday" if: ${{ env.DAY_OF_WEEK == 'Monday' }} run: echo "$Greeting $First_Name. Today is $DAY_OF_WEEK!" env: First_Name: Mona
name: Conditional env variable
on: workflow_dispatch
env:
DAY_OF_WEEK: Monday
jobs:
greeting_job:
runs-on: ubuntu-latest
env:
Greeting: Hello
steps:
- name: "Say Hello Mona it's Monday"
if: ${{ env.DAY_OF_WEEK == 'Monday' }}
run: echo "$Greeting $First_Name. Today is $DAY_OF_WEEK!"
env:
First_Name: Mona
En esta modificación del primer ejemplo, hemos introducido un valor if
condicional. Ahora, el paso del flujo de trabajo solo se ejecuta si DAY_OF_WEEK
está establecido en "Monday". Accedemos a este valor desde la instrucción condicional if
mediante el contexto env
. El contexto env
no es necesario para las variables a las que se hace referencia en el comando run
. Se hace referencia a ellas como variables de entorno de ejecutor y se interpolan después de que el ejecutor reciba el trabajo. Sin embargo, podríamos haber elegido interpolar esas variables antes de enviar el trabajo al ejecutor mediante contextos. La salida resultante sería la misma.
run: echo "${{ env.Greeting }} ${{ env.First_Name }}. Today is ${{ env.DAY_OF_WEEK }}!"
Nota:
Normalmente, los contextos se denotan con el signo del dólar y las llaves, como ${{ context.property }}
. En un condicional if
, ${{
y }}
son opcionales, pero si los usa, deben incluir toda la instrucción de comparación, como se muestra anteriormente.
Advertencia
Al crear flujos de trabajo y acciones, siempre debe tener en cuenta si el código podría ejecutar una entrada de posibles atacantes que no es de confianza. Se tratará a algunos contextos como una entrada no confiable, ya que un atacante podrían insertar su propio contenido malintencionado. Para más información, consulta Fortalecimiento de seguridad para GitHub Actions.
Uso del contexto vars
para acceder a los valores de las variables de configuración
Se puede acceder a las variables de configuración en el flujo de trabajo mediante el contexto vars
. Para más información, consulta Contexts reference.
Si no se ha establecido una variable de configuración, el valor devuelto de un contexto que hace referencia a la variable será una cadena vacía.
En los ejemplos siguientes, se muestra el uso de variables de configuración con el contexto vars
en un flujo de trabajo. Cada una de las siguientes variables de configuración se han definido en los niveles de repositorio, organización o entorno.
on: workflow_dispatch: env: # Setting an environment variable with the value of a configuration variable env_var: ${{ vars.ENV_CONTEXT_VAR }} jobs: display-variables: name: ${{ vars.JOB_NAME }} # You can use configuration variables with the `vars` context for dynamic jobs if: ${{ vars.USE_VARIABLES == 'true' }} runs-on: ${{ vars.RUNNER }} environment: ${{ vars.ENVIRONMENT_STAGE }} steps: - name: Use variables run: | echo "repository variable : $REPOSITORY_VAR" echo "organization variable : $ORGANIZATION_VAR" echo "overridden variable : $OVERRIDE_VAR" echo "variable from shell environment : $env_var" env: REPOSITORY_VAR: ${{ vars.REPOSITORY_VAR }} ORGANIZATION_VAR: ${{ vars.ORGANIZATION_VAR }} OVERRIDE_VAR: ${{ vars.OVERRIDE_VAR }} - name: ${{ vars.HELLO_WORLD_STEP }} if: ${{ vars.HELLO_WORLD_ENABLED == 'true' }} uses: actions/hello-world-javascript-action@main with: who-to-greet: ${{ vars.GREET_NAME }}
on:
workflow_dispatch:
env:
# Setting an environment variable with the value of a configuration variable
env_var: ${{ vars.ENV_CONTEXT_VAR }}
jobs:
display-variables:
name: ${{ vars.JOB_NAME }}
# You can use configuration variables with the `vars` context for dynamic jobs
if: ${{ vars.USE_VARIABLES == 'true' }}
runs-on: ${{ vars.RUNNER }}
environment: ${{ vars.ENVIRONMENT_STAGE }}
steps:
- name: Use variables
run: |
echo "repository variable : $REPOSITORY_VAR"
echo "organization variable : $ORGANIZATION_VAR"
echo "overridden variable : $OVERRIDE_VAR"
echo "variable from shell environment : $env_var"
env:
REPOSITORY_VAR: ${{ vars.REPOSITORY_VAR }}
ORGANIZATION_VAR: ${{ vars.ORGANIZATION_VAR }}
OVERRIDE_VAR: ${{ vars.OVERRIDE_VAR }}
- name: ${{ vars.HELLO_WORLD_STEP }}
if: ${{ vars.HELLO_WORLD_ENABLED == 'true' }}
uses: actions/hello-world-javascript-action@main
with:
who-to-greet: ${{ vars.GREET_NAME }}
Detectar el sistema operativo
Puede generar un único archivo de flujo de trabajo que se pueda usar para distintos sistemas operativos mediante la variable de entorno predeterminada RUNNER_OS
y la propiedad de contexto correspondiente ${{ runner.os }}
. Por ejemplo, el siguiente flujo de trabajo puede ejecutarse correctamente si ha cambiado el sistema operativo de macos-latest
a windows-latest
sin tener que alterar la sintaxis de las variables de entorno, lo cual difiere dependiendo del shell que esté utilizando el ejecutor.
on: workflow_dispatch jobs: if-Windows-else: runs-on: macos-latest steps: - name: condition 1 if: runner.os == 'Windows' run: echo "The operating system on the runner is $env:RUNNER_OS." - name: condition 2 if: runner.os != 'Windows' run: echo "The operating system on the runner is not Windows, it's $RUNNER_OS."
on: workflow_dispatch
jobs:
if-Windows-else:
runs-on: macos-latest
steps:
- name: condition 1
if: runner.os == 'Windows'
run: echo "The operating system on the runner is $env:RUNNER_OS."
- name: condition 2
if: runner.os != 'Windows'
run: echo "The operating system on the runner is not Windows, it's $RUNNER_OS."
En este ejemplo, las dos instrucciones if
comprueban la propiedad os
del contexto runner
para determinar el sistema operativo del ejecutor. GitHub Actions procesa los condicionales if
y solo los pasos en donde la comprobación se resuelve de manera que se envían los true
al ejecutor. Una de las comprobaciones siempre será true
y la otra false
, por lo que solo se envía uno de estos pasos al ejecutor. Una vez enviado el trabajo al ejecutor, el paso se ejecuta y la variable de entorno del comando echo
se interpola mediante la sintaxis adecuada ($env:NAME
para PowerShell en Windows y $NAME
para bash y sh en Linux y macOS). En este ejemplo, la instrucción runs-on: macos-latest
significa que se ejecutará el segundo paso.
Pasar valores entre pasos y jobs en un flujo de trabajo
Si genera un valor en un paso de un trabajo, puede utilizar dicho valor en los pasos siguientes del mismo trabajo. Para ello, asigne el valor a una variable de entorno nueva o existente y escriba lo siguiente en el archivo de entorno GITHUB_ENV
. Una acción puede utilizar directamente el archivo de entorno, o puede utilizarse desde un comando de shell en el archivo de flujo de trabajo con la palabra clave run
. Para más información, consulta Comandos de flujo de trabajo para Acciones de GitHub.
Si quieres pasar un valor desde un paso en un job que está en un flujo de trabajo a un paso en otro job del mismo flujo de trabajo, puedes definir el valor como una salida de job. Puedes entonces referenciar esta salida de job desde un paso en otro job. Para más información, consulta Sintaxis del flujo de trabajo para GitHub Actions.