A human and robot hand drawing each other

Configurações avançadas de fluxo de trabalho no GitHub Actions

Bekah Whittle
Bekah Whittle // Director, Field Services // GitHub

Neste guia, discutiremos técnicas avançadas para otimizar fluxos de trabalho do GitHub Actions, inclusive gerenciamento de simultaneidade de fluxo de trabalho, implementação de instruções condicionais e aumento de fluxos de trabalho com scripts internos, tudo com o objetivo de simplificar e acelerar seu pipeline de desenvolvimento. Neste guia, teremos a presença da Cariad (empresa de software automotivo e subsidiária do grupo Volkswagen) para saber como eles obtiveram sucesso com o Actions.


Neste guia, você aprenderá:

  • Como gerenciar a simultaneidade de fluxo de trabalho

  • Como aproveitar instruções condicionais para melhorar a extensibilidade

  • Como acelerar estratégias de recursos internos aumentando fluxos de trabalho com scripts


Gerenciar priorização e cancelamento de fluxo de trabalho

À medida que seu ambiente de desenvolvimento se expande, a necessidade de gerenciar vários fluxos de trabalho com eficiência torna-se crucial. O Actions oferece um recurso para controlar isso: concurrency. Essa configuração permite priorizar execuções de fluxo de trabalho específicas em detrimento de outras, oferecendo controle sobre a alocação de recursos e, em última análise, acelerando o processo de desenvolvimento.

Prioritização

No Actions, é possível priorizar um fluxo de trabalho em detrimento de outro, definindo um grupo concurrency específico. Ao fazer isso, é possível definir qual fluxo de trabalho designado será automaticamente movido para o topo da fila de execução, recebendo assim tratamento prioritário.

Veja como configurar um grupo de simultaneidade:

concurrency: 
  group: 'my-concurrency-group'

Em nossa configuração, não necessariamente priorizamos um fluxo de trabalho em detrimento de outro. Em vez disso, nosso foco é evitar execuções simultâneas ou paralelas de fluxos de trabalho, o que pode levar a conflitos e inconsistências em nossas operações. Usamos grupos de simultaneidade para nos proteger contra isso. Eles atuam como um mecanismo para regular a execução dos nossos fluxos de trabalho, garantindo que eles não sejam executados em paralelo. Essa estratégia não apenas nos ajuda a evitar conflitos, mas também mantém a uniformidade e a integridade de nossas implantações. Isso é particularmente crucial para nós, pois deixar de regulamentar execuções simultâneas pode levar a cenários complexos e indesejáveis.

Andre Hacke
Andre Hacke // Senior Product Owner // CARIAD

Cancelar execuções em andamento

Ao usar concurrency, configurar cancel-in-progress como true cancela todas as outras execuções em andamento no mesmo grupo de simultaneidade, garantindo que apenas a execução do fluxo de trabalho mais recente seja executada.

concurrency: 
  group: 'my-concurrency-group'
  cancel-in-progress: true

Isto é particularmente útil quando você tem várias execuções na fila. Isso garante que o commit mais recente seja o testado e evita que execuções redundantes e antigas consumam recursos preciosos.

Adicionar precisão à execução do fluxo de trabalho

O GitHub Actions também permitem lógica condicional, que pode ser usada para gerenciar a execução do fluxo de trabalho à medida que sua organização se torna mais complexa. Por exemplo, você pode obter maior controle e adaptabilidade definindo as condições precisas sob as quais uma tarefa ou etapa é executada.

Como funcionam as instruções condicionais

No Actions, as instruções condicionais são definidas usando a palavra-chave if. Essas condições determinam se um trabalho deve ser executado ou ignorado.

Veja aqui um trecho de exemplo:

jobs:
  build:
    if: github.repository == 'docs-internal' || github.repository == 'GitHub-docs'

Neste exemplo, o trabalho só será executado se o repositório GitHub for docs-internal ou GitHub-docs.

Emparelhamento de instruções condicionais com segredos

Instruções condicionais também podem ser combinadas com segredos para um controle ainda mais refinado. Por exemplo, é possível definir uma condição que só execute um trabalho se um valor secreto corresponder a uma string específica.

jobs:
  deploy:
    if: secrets.ENVIRONMENT == 'production'

Nesse caso, o trabalho só é executado quando o segredo ENVIRONMENT está definido como production, o que adiciona uma camada adicional de segurança e controle aos seus fluxos de trabalho.

Com instruções condicionais, você não apenas obtém mais controle sobre seus fluxos de trabalho, mas também pode adaptar suas ações para atender às necessidades específicas do projeto ou de segurança. Isso é especialmente valioso para gerenciar recursos de forma eficaz e manter a integridade dos processos de desenvolvimento.

Aumento de fluxos de trabalho com scripts

Os scripts são uma maneira direta de gerenciar a complexidade no Actions. Ao incorporar scripts em seus fluxos de trabalho, é possível descarregar determinadas operações do arquivo de fluxo de trabalho principal, melhorando assim a capacidade de reutilização e a manutenção, aumentando a modularidade e facilitando a leitura dos arquivos de fluxo de trabalho. 

Os scripts não servem apenas para compartimentar o código; trata-se de criar componentes reutilizáveis ​​e de fácil manutenção que podem ser facilmente incorporados em vários fluxos de trabalho, levando a um modelo de innersourcing mais eficiente.

Como incorporar scripts em fluxos de trabalho

Para chamar um script em um fluxo de trabalho do Actions, especifique o caminho para o script na seção de execução do seu arquivo YAML. Veja aqui um trecho para ilustrar:

jobs:
  build:
    steps:
      - name: Execute custom script
        run: ./path/to/your/script.sh

À medida que sua organização continua a crescer, essas táticas avançadas (simultaneidade, instruções condicionais e scripts) serão indispensáveis.

A seguir: Criar sua primeira ação personalizada do GitHub

No nosso próximo guia, nos concentraremos em ações personalizadas e orientaremos você sobre como construir uma usando action.yml para configuração e JavaScript para a lógica. Isso irá preparar você para automatizar os fluxos de trabalho de forma eficaz no GitHub.