Resumen
Nota: Cuando se especifica la concurrencia a nivel del job, no se garantiza el orden para los jobs o ejecuciones que se ponen en fila a 5 minutos uno del otro.
Puedes utilizar jobs.<job_id>.concurrency
para asegurarte de que un solo job o flujo de trabajo que utilice el mismo grupo de concurrencia sea el que se ejecute a la vez. Un grupo de concurrencia puede ser cualquier secuencia o expresión. La expresión puede utilizar cualquier contexto, con excepción del contexto secrets
. Para obtener más información sobre las expresiones, consulta la sección "Expresiones".
También puedes especificar la concurrency
a nivel del flujo de trabajo. Para obtener más información, consulta la concurrency
.
Cuando un job o flujo de trabajo concurrente se pone en cola, si otro job o workflow que utilicen el mismo grupo de concurrencia en el repositorio se encuentra en progreso, el job o flujo de trabajo en cola se mostrará como pending
. Cualquier job o flujo de trabajo pendientes anteriores en el grupo de concurrencia se cancelarán. Para también cancelar cualquier job ejecutándose concurrentemente en el mismo grupo de concurrencia, especifica cancel-in-progress: true
.
Ejemplos: Utilizando la concurrencia y el comportamiento predeterminado
concurrency: staging_environment
concurrency: ci-${{ github.ref }}
Ejemplo: Utilizar la concurrencia para cancelar cualquier job o ejecución en curso
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
Ejemplo: Utilizar un valor para segunda opción
Si compilas el nombre de grupo con una propiedad que solo se defina para eventos específicos, puedes utilizar un valor de segunda opción. Por ejemplo, github.head_ref
solo se define en los eventos de pull_request
. Si tu flujo de trabajo responde a otros eventos adicionalmente a los de pull_request
, necesitarás proporcionar una segunda opción para evitar un error de sintaxis. El siguiente grupo de concurrencia cancela los jobs o ejecuciones en curso únicamente en los eventos de pull_request
; si github.head_ref
no se define, el grupo de concurrencia se revertirá a la ID de ejecución, la cual garantiza ser única y definida para la ejecución.
concurrency:
group: ${{ github.head_ref || github.run_id }}
cancel-in-progress: true
Ejemplo: Cancelar únicamente los jobs o ejecuciones en curso para el flujo de trabajo actual
Si tienes flujos de trabajo múltiples en el mismo repositorio, los nombres del grupo de concurrencia deben ser únicos en todos los flujos de trabajo para evitar que se cancelen jobs o ejecuciones en curso desde otros flujos de trabajo. De otra forma, cualquier job pendiente o previamente en curso se cancelará sin importar el flujo de trabajo.
Para solo cancelar las ejecuciones en curso para el mismo flujo de trabajo, puedes utilizar la propiedad github.workflow
para crear el grupo de concurrencia:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true