Configurar o comportamento de enfileiramento das execuções - Amazon CodeCatalyst

Configurar o comportamento de enfileiramento das execuções

Por padrão, no Amazon CodeCatalyst, quando várias execuções do fluxo de trabalho ocorrem simultaneamente, o CodeCatalyst as coloca em fila e as processa uma a uma, na ordem em que foram iniciadas. Esse comportamento padrão pode ser alterado especificando um modo de execução. Existem alguns modos de execução:

  • (Padrão) Modo de execução em fila: os processos do CodeCatalyst são executados um por um.

  • Modo de execução substituída: os processos do CodeCatalyst são executados um por um, com execuções mais recentes substituindo as mais antigas.

  • Modo de execução paralela: os processos do CodeCatalyst são executados paralelamente.

Para ter mais informações sobre execuções de fluxos de trabalho, consulte Execução de um fluxo de trabalho.

Sobre o modo de execução em fila

No modo de execução em fila, as execuções ocorrem em série, com as execuções em espera formando uma fila.

As filas se formam nos pontos de entrada para ações e grupos de ações, para que você possa ter várias filas no mesmo fluxo de trabalho (consulte Figure 1). Quando uma execução em fila aciona uma ação, ela é bloqueada e nenhuma outra execução pode ser realizada. Quando a execução termina e sai da ação, ela fica desbloqueada e pronta para a próxima execução.

Figure 1 ilustra um fluxo de trabalho configurado no modo de execução em fila. Mostra:

  • Sete execuções percorrendo o fluxo de trabalho.

  • Duas filas: uma fora da entrada da fonte de entrada (Repo:main) e outra fora da entrada da ação BuildTestActionGroup.

  • Dois blocos bloqueados: a origem da entrada (Repo:main) e BuildTestActionGroup.

Veja o que ocorrerá quando o processamento das execuções do fluxo de trabalho for concluído:

  • Quando o Run-4d444 terminar de clonar o repositório de origem, ele sairá da origem da entrada e entrará na fila atrás de Run-3c333. Depois, Run-5e555 entrará na origem da entrada.

  • Quando Run-1a111 terminar de compilar e testar, ele sairá da ação BuildTestActionGroup e acionará a ação DeployAction. Depois, o Run-2b222 acionará a ação BuildTestActionGroup.

Figura 1: um fluxo de trabalho configurado em “modo de execução em fila”

Um fluxo de trabalho configurado em “modo de execução em fila”

Use o modo de execução em fila se:

  • Você deseja manter um relacionamento um para um entre recursos e execuções: esses recursos podem ser agrupados quando o modo de substituição é utilizado. Por exemplo, quando você mescla o recurso 1 na confirmação 1, a execução 1 é iniciada, e quando você mescla o recurso 2 na confirmação 2, a execução 2 é iniciada e assim por diante. Se você usar o modo de substituição em vez do modo em fila, os recursos (e as confirmações) serão agrupados na execução que substituirá as outras.

  • Você deseja evitar condições de corrida e problemas inesperados que possam ocorrer no uso do modo paralelo. Por exemplo, se dois desenvolvedores de software, Wang e Saanvi, iniciarem a execução do fluxo de trabalho aproximadamente ao mesmo tempo para implantação em um cluster do Amazon ECS, a execução de Wang poderá iniciar os testes de integração no cluster, enquanto a execução de Saanvi implantará um novo código de aplicação no cluster, fazendo com que os testes de Wang falhem ou testem o código errado. Como outro exemplo, é possível ter um destino sem um mecanismo de bloqueio. Nesse caso, as duas execuções podem substituir as alterações uma da outra de maneiras inesperadas.

  • Você deseja limitar a carga nos recursos computacionais que o CodeCatalyst usa para processar as execuções. Por exemplo, se você tiver três ações no fluxo de trabalho, poderá ter no máximo três execuções ao mesmo tempo. A imposição de um limite no número de execuções que podem ocorrer simultaneamente torna o throughput de execução mais previsível.

  • Você deseja restringir o número de solicitações feitas a serviços de terceiros pelo fluxo de trabalho. Por exemplo, o fluxo de trabalho pode ter uma ação de criação que inclua instruções para extrair uma imagem do Docker Hub. O Docker Hub limita o número de solicitações pull que você pode fazer a determinado número por hora por conta, e você será bloqueado se ultrapassar o limite. Usar o modo de execução em fila para diminuir o throughput de execução terá o efeito de gerar menos solicitações para o Docker Hub por hora, limitando assim o potencial de bloqueios e gerando falhas de criação e de execução.

Tamanho máximo da fila: 50

Notas sobre o tamanho máximo da fila:

  • O tamanho máximo da fila refere-se ao número máximo de execuções permitidas em todas as filas no fluxo de trabalho.

  • Se uma fila tiver mais de 50 execuções, o CodeCatalyst descartará a 51ª execução e as subsequentes.

Comportamento com falha:

Se uma execução deixar de responder enquanto estiver sendo processada por uma ação, as execuções atrás dela serão mantidas na fila até que a ação expire. As ações expiram após uma hora.

Se uma execução falhar dentro de uma ação, a primeira execução em fila após ela poderá continuar.

Sobre o modo de execução substituída

O modo de execução substituída é o mesmo que o modo de execução em fila, exceto que:

  • Se uma execução em fila alcançar outra, a execução posterior substituirá a execução anterior, e a execução anterior será cancelada e marcada como “substituída”.

  • Como resultado do comportamento descrito no primeiro item, uma fila só pode incluir uma execução quando o modo de execução substituída é usado.

Usando o fluxo de trabalho em Figure 1 como guia, a aplicação do modo de execução substituída a esse fluxo de trabalho ocasionaria o seguinte:

  • Run-7g777 substituiria as outras duas execuções na fila e seria a única execução restante na Fila 1. Run-6f666 e Run-5e555 seriam canceladas.

  • Run-3c333 substituiria Run-2b222 e seria a única execução restante na Fila 2. Run-2b222 seria cancelada.

Se desejar, use o modo de execução substituída:

  • melhor throughput do que no modo em fila

  • ainda menos solicitações em serviços de terceiros do que no modo em fila; isso será vantajoso se o serviço de terceiros tiver limites de taxa, como o Docker Hub.

Sobre o modo de execução paralela

No modo de execução paralela, as execuções são independentes umas das outras e não esperam que outras execuções sejam concluídas antes de começar. Não há filas e o throughput da execução é limitado apenas pela rapidez com que as ações dentro do fluxo de trabalho são concluídas.

Use o modo de execução paralela em ambientes de desenvolvimento em que cada usuário tem a própria ramificação de recursos e implanta em destinos que não são compartilhados por outros usuários.

Importante

Se você tiver um destino compartilhado em que vários usuários possam implantar, como uma função do Lambda em um ambiente de produção, não use o modo paralelo, pois podem ocorrer condições de corrida. Uma condição de corrida ocorre quando execuções paralelas do fluxo de trabalho tentam alterar um recurso compartilhado ao mesmo tempo, gerando resultados imprevisíveis.

Número máximo de execuções paralelas: mil por espaço do CodeCatalyst

Configurar o modo de execução

É possível definir o modo de execução como em fila, substituída ou paralela. O padrão é em fila.

Quando você altera o modo de execução de em fila ou substituída para paralela, o CodeCatalyst cancela as execuções que estão na fila e permite que as execuções processadas atualmente por uma ação terminem antes de cancelá-las.

Quando você altera o modo de execução de paralela para em fila ou substituída, o CodeCatalyst permite que todas as execuções paralelas em execução no momento sejam concluídas. Todas as execuções que você iniciar depois de alterar o modo de execução para em fila ou substituída usarão o novo modo.

Visual
Como alterar o modo de execução usando o editor visual
  1. Abra o console do CodeCatalyst em https://codecatalyst.aws/.

  2. Selecione o projeto.

  3. No painel de navegação, escolha CI/CD e Fluxos de trabalho.

  4. Selecione o nome do fluxo de trabalho. É possível filtrar pelo nome do repositório ou da ramificação de origem em que o fluxo de trabalho está definido, ou filtrar pelo nome ou o status do fluxo de trabalho.

  5. Selecione a opção Editar.

  6. No canto superior direito, selecione Propriedades do fluxo de trabalho.

  7. Expanda Avançado e, em Modo de execução, selecione uma das seguintes opções:

    1. Em fila: consulte Sobre o modo de execução em fila

    2. Substituída: consulte Sobre o modo de execução substituída

    3. Paralela: consulte Sobre o modo de execução paralela

  8. (Opcional) Selecione Validar para validar o código YAML do fluxo de trabalho antes de confirmar.

  9. Selecione Confirmar, insira uma mensagem de confirmação e escolha Confirmar novamente.

YAML
Como alterar o modo de execução usando o editor YAML
  1. Abra o console do CodeCatalyst em https://codecatalyst.aws/.

  2. Selecione o projeto.

  3. No painel de navegação, escolha CI/CD e Fluxos de trabalho.

  4. Selecione o nome do fluxo de trabalho. É possível filtrar pelo nome do repositório ou da ramificação de origem em que o fluxo de trabalho está definido, ou filtrar pelo nome ou o status do fluxo de trabalho.

  5. Selecione a opção Editar.

  6. Selecione YAML.

  7. Adicione a propriedade RunMode:

    Name: Workflow_6d39 SchemaVersion: "1.0" RunMode: QUEUED|SUPERSEDED|PARALLEL

    Para ter mais informações, consulte a descrição da propriedade RunMode na seção Propriedades de nível superior de Definição do YAML do fluxo de trabalho.

  8. (Opcional) Selecione Validar para validar o código YAML do fluxo de trabalho antes de confirmar.

  9. Selecione Confirmar, insira uma mensagem de confirmação e escolha Confirmar novamente.