Skip to main content

Usando simultaneidade

Execute um único trabalho de cada vez.

Visão Geral

Observação: Quando a concorrência é especificada no nível do trabalho, não se garante a ordem para trabalhos ou execuções que são enfileiradas em 5 minutos uma da outra.

Você pode usar jobs.<job_id>.concurrency para garantir que apenas um trabalho ou fluxo de trabalho que usa o mesmo grupo de concorrência será executado de cada vez. Um grupo de concorrência pode ser qualquer string ou expressão. A expressão pode usar qualquer contexto, exceto para o contexto de segredos. Para obter mais informações sobre expressões, consulte "Expressões".

Você também pode especificar concorrência no nível do fluxo de trabalho. Para obter mais informações, consulte concorrência.

Quando um trabalho simultâneo ou fluxo de trabalho é enfileirado, se outro trbalho ou fluxo de trabalho que usa o mesmo grupo de concorrência no repositório estiver em andamento o trabalho na fila ou o fluxo de trabalho ficará pendente. Qualquer trabalho ou fluxo de trabalho anterior pendente no grupo de concorrência será cancelado. Para cancelar também qualquer trabalho atualmente em execução ou fluxo de trabalho no mesmo grupo de concorrência, especifique cancel-in-progress: true.

Exemplos: Como usar a concorrência e o comportamento padrão

concurrency: staging_environment
concurrency: ci-${{ github.ref }}

Exemplo: Usar a concorrência para cancelar qualquer trabalho em andamento ou em execução

concurrency: 
  group: ${{ github.ref }}
  cancel-in-progress: true

Exemplo: Usando um valor para segunda opção

Se você construir o nome do grupo com uma propriedade que só é definida para eventos específicos, você pode usar um valor de segunda opção. Por exemplo, github.head_ref está definido apenas em eventos pull_request. Se o seu fluxo de trabalho responder a outros eventos além dos eventos pull_request, você deverá fornecer uma segunda opção para evitar um erro de sintaxe. O grupo de concorrência a seguir cancela trabalhos em andamento ou executa somente em eventos pull_request; se github.head_ref não estiver definido, o grupo de concorrência voltará ao ID de execução e será garantido que ambos serão únicos e definidos para a execução.

concurrency: 
  group: ${{ github.head_ref || github.run_id }}
  cancel-in-progress: true

Exemplo: Cancele somente trabalhos em andamento ou execuções no fluxo de trabalho atual

Se você tiver vários fluxos de trabalho no mesmo repositório, os nomes dos grupos de concorrência devem ser únicos em todos os fluxos de trabalho para evitar o cancelamento de trabalhos em andamento ou de executores a partir de outros fluxos de trabalho. Caso contrário, qualquer trabalho em andamento ou pendente será cancelado, independentemente do fluxo de trabalho.

Para cancelar apenas execuções no mesmo fluxo de trabalho, você pode usar a propriedade github.workflow para criar o grupo de concorrência:

concurrency: 
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

Monitorando os seus trabalhos atuais na sua organização ou empresa

Para identificar qualquer restrição de concorrência ou fila, você pode verificar quantos trabalhos estão sendo processados atualmente nos executores hospedados em GitHub na sua organização ou empresa.

Captura de tela da lista de trabalhos ativos

Para obter mais informações, consulte "Monitorando seus trabalhos atuais. "