{"meta":{"title":"Controlar a simultaneidade de fluxos de trabalho e tarefas","intro":"Gerencie os fluxos de trabalho e os trabalhos que podem ser executados juntos.","product":"GitHub Actions","breadcrumbs":[{"href":"/pt/actions","title":"GitHub Actions"},{"href":"/pt/actions/how-tos","title":"Instruções"},{"href":"/pt/actions/how-tos/write-workflows","title":"Escrever fluxos de trabalho"},{"href":"/pt/actions/how-tos/write-workflows/choose-when-workflows-run","title":"Escolher quando os fluxos de trabalho são executados"},{"href":"/pt/actions/how-tos/write-workflows/choose-when-workflows-run/control-workflow-concurrency","title":"Controlar a simultaneidade do fluxo de trabalho"}],"documentType":"article"},"body":"# Controlar a simultaneidade de fluxos de trabalho e tarefas\n\nGerencie os fluxos de trabalho e os trabalhos que podem ser executados juntos.\n\n## Usar a simultaneidade em diferentes cenários\n\nVocê pode usar `jobs.<job_id>.concurrency` para garantir que apenas um trabalho ou fluxo de trabalho que usa o mesmo grupo de simultaneidade seja executado por vez. Um grupo de concorrência pode ser qualquer string ou expressão. Contextos de expressão permitidos: [`github`](/pt/actions/learn-github-actions/contexts#github-context), [`inputs`](/pt/actions/learn-github-actions/contexts#inputs-context), [`vars`](/pt/actions/learn-github-actions/contexts#vars-context), [`needs`](/pt/actions/learn-github-actions/contexts#needs-context), [`strategy`](/pt/actions/learn-github-actions/contexts#strategy-context) e [`matrix`](/pt/actions/learn-github-actions/contexts#matrix-context). Para obter mais informações sobre expressões, confira [Avaliar expressões em fluxos de trabalho e ações](/pt/actions/learn-github-actions/expressions).\n\nEspecifique também `concurrency` no nível do fluxo de trabalho. Para obter mais informações, confira [`concurrency`](/pt/actions/using-workflows/workflow-syntax-for-github-actions#concurrency).\n\nIsso significa que pode haver no máximo um trabalho em execução e um pendente em um grupo de simultaneidade a qualquer momento. Quando um trabalho ou um fluxo de trabalho simultâneo é colocado na fila, se outro trabalho ou fluxo de trabalho que usa o mesmo grupo de simultaneidade no repositório estiver em andamento, o trabalho ou o fluxo de trabalho na fila ficará `pending`. Qualquer trabalho ou fluxo de trabalho do `pending` existente no mesmo grupo de simultaneidade, se existir, será cancelado e o novo trabalho ou fluxo de trabalho na fila tomará seu lugar.\n\nPara também cancelar qualquer trabalho ou fluxo de trabalho em execução no mesmo grupo de simultaneidade, especifique `cancel-in-progress: true`. Para cancelar condicionalmente trabalhos ou fluxos de trabalho em execução no mesmo grupo de simultaneidade, é possível especificar `cancel-in-progress` como uma expressão com qualquer um dos contextos de expressão permitidos.\n\n> \\[!NOTE]\n>\n> * O nome do grupo de simultaneidade não diferencia maiúsculas de minúsculas. Por exemplo, `prod` e `Prod` serão tratados como o mesmo grupo de simultaneidade.\n> * A ordem não é garantida para trabalhos ou execuções de fluxo de trabalho usando grupos de simultaneidade. As tarefas ou execuções de fluxo de trabalho no mesmo grupo de simultaneidade são tratadas em ordem arbitrária.\n\n### Exemplos: Usar a simultaneidade e o comportamento padrão\n\nO comportamento padrão de GitHub Actions é permitir que vários trabalhos ou execuções de fluxo de trabalho sejam executados simultaneamente. A palavra-chave `concurrency` permite controlar a simultaneidade de execuções de fluxo de trabalho.\n\nPor exemplo, você pode usar a palavra-chave `concurrency` imediatamente após a definição das condições de disparo para limitar a simultaneidade de execuções de fluxo de trabalho inteiro para uma ramificação específica:\n\n```yaml\non:\n  push:\n    branches:\n      - main\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}\n  cancel-in-progress: true\n```\n\nVocê também pode limitar a simultaneidade de trabalhos em um fluxo de trabalho usando a palavra-chave `concurrency` no nível do trabalho:\n\n```yaml\non:\n  push:\n    branches:\n      - main\n\njobs:\n  job-1:\n    runs-on: ubuntu-latest\n    concurrency:\n      group: example-group\n      cancel-in-progress: true\n```\n\n### Exemplo: grupos de simultaneidade\n\nOs grupos de simultaneidade fornecem uma maneira de gerenciar e limitar a execução de execuções de fluxo de trabalho ou trabalhos que compartilham a mesma chave de simultaneidade.\n\nA chave `concurrency` é usada para agrupar fluxos de trabalho ou trabalhos em um grupo de simultaneidade. Quando você define uma chave `concurrency`, GitHub Actions garante que apenas um fluxo de trabalho ou trabalho com essa chave seja executado a qualquer momento. Se um novo fluxo de trabalho for executado ou iniciado com a mesma chave `concurrency`, GitHub Actions cancelará qualquer fluxo de trabalho ou trabalho já em execução com essa chave. A chave `concurrency` pode ser uma cadeia de caracteres codificada ou pode ser uma expressão dinâmica que inclui variáveis de contexto.\n\nÉ possível definir condições de simultaneidade em seu fluxo de trabalho para que o fluxo de trabalho ou trabalho faça parte de um grupo de simultaneidade.\n\nIsso significa que, quando um fluxo de trabalho for executado ou iniciado, o GitHub cancelará todas as execuções de fluxo de trabalho ou trabalhos que já estejam em andamento no mesmo grupo de simultaneidade. Isso é útil em cenários em que você deseja impedir execuções paralelas para um determinado conjunto de fluxos de trabalho ou trabalhos, como os usados para implantações em um ambiente de preparo, a fim de evitar ações que possam causar conflitos ou consumir mais recursos do que o necessário.\n\nNeste exemplo, `job-1` faz parte de um grupo de simultaneidade chamado `staging_environment`. Isso significa que, se uma nova execução de `job-1` for acionada, todas as execuções do mesmo trabalho no grupo de simultaneidade `staging_environment` que já estiverem em andamento serão canceladas.\n\n```yaml\njobs:\n  job-1:\n    runs-on: ubuntu-latest\n    concurrency:\n      group: staging_environment\n      cancel-in-progress: true\n```\n\nComo alternativa, usar uma expressão dinâmica, como `concurrency: ci-${{ github.ref }}` em seu fluxo de trabalho, significa que o fluxo de trabalho ou trabalho faria parte de um grupo de simultaneidade nomeado `ci-` seguido pela referência da ramificação ou tag que acionou o fluxo de trabalho. Neste exemplo, se uma nova confirmação for enviada para a ramificação principal enquanto uma execução anterior ainda estiver em andamento, a execução anterior será cancelada e a nova será iniciada:\n\n```yaml\non:\n  push:\n    branches:\n      - main\n\nconcurrency:\n  group: ci-${{ github.ref }}\n  cancel-in-progress: true\n```\n\n### Exemplo: Usar a concorrência para cancelar qualquer trabalho em andamento ou em execução\n\nPara usar simultaneidade para cancelar qualquer trabalho em andamento ou executar no GitHub Actions, você pode usar a chave `concurrency` com o a opção `cancel-in-progress` definida como `true`:\n\n```yaml\nconcurrency:\n  group: ${{ github.ref }}\n  cancel-in-progress: true\n```\n\nObserve que, neste exemplo, sem definir um grupo de simultaneidade específico, GitHub Actions cancelará *qualquer* execução em andamento do trabalho ou fluxo de trabalho.\n\n### Exemplo: Usando um valor para segunda opção\n\nSe 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` só é definido em eventos `pull_request`. Se o fluxo de trabalho responder a outros eventos além de eventos `pull_request`, você precisará fornecer um fallback para evitar um erro de sintaxe. O grupo de simultaneidade a seguir cancela os trabalhos em andamento ou é executado somente em eventos `pull_request`. Se `github.head_ref` for indefinido, o grupo de simultaneidade fará fallback para a ID de execução, que tem a garantia de ser exclusiva e definida para a execução.\n\n```yaml\nconcurrency:\n  group: ${{ github.head_ref || github.run_id }}\n  cancel-in-progress: true\n```\n\n### Exemplo: Cancele somente trabalhos em andamento ou execuções no fluxo de trabalho atual\n\nSe 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.\n\nPara cancelar apenas as execuções em andamento do mesmo fluxo de trabalho, use a propriedade `github.workflow` para criar o grupo de simultaneidade:\n\n```yaml\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}\n  cancel-in-progress: true\n```\n\n### Exemplo: cancelar apenas trabalhos em andamento em ramificações específicas\n\nSe você quiser cancelar trabalhos em andamento em determinadas ramificações, mas não em outras, poderá usar expressões condicionais com `cancel-in-progress`. Por exemplo, é possível fazer isso se quiser cancelar trabalhos em andamento em branches de desenvolvimento, mas não em branches de lançamento.\n\nPara cancelar apenas execuções em andamento do mesmo fluxo de trabalho quando não estiverem em execução em um branch de lançamento, é possível definir `cancel-in-progress` para uma expressão semelhante à seguinte:\n\n```yaml\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}\n  cancel-in-progress: ${{ !contains(github.ref, 'release/')}}\n```\n\nNeste exemplo, vários envios por push para um branch `release/1.2.3` não cancelariam execuções em andamento. Envios por push para outro branch, como `main`, cancelariam execuções em andamento.\n\n## Monitorando os seus trabalhos atuais na sua organização ou empresa\n\nPara 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. Para saber mais, confira [Visualizando suas tarefas atuais](/pt/actions/using-github-hosted-runners/monitoring-your-current-jobs)."}