Explorar o fluxo de ações

Concluído

Entender como os fluxos de trabalho do GitHub Actions são executados do início ao fim ajuda você a criar pipelines de automação eficientes e solucionar problemas com eficiência.

Diagrama de fluxo do GitHub Actions mostrando eventos que disparam fluxos de trabalho que contêm trabalhos usando ações.

O fluxo de execução do GitHub Actions

Detecção e acionamento de eventos

O GitHub monitora continuamente seu repositório para eventos específicos que podem iniciar fluxos de trabalho:

Eventos de repositório:

  • Envios de código para ramificações
  • Criação, atualizações ou mesclagem de pull request
  • Criação ou modificação de questão
  • Publicação de versão

Eventos agendados:

  • Agendamentos de tempo baseados em cron
  • Tarefas de manutenção recorrentes

Eventos externos:

  • Gatilhos manuais de fluxo de trabalho via UI ou API do GitHub
  • Chamadas de webhook de sistemas externos
  • Eventos de despacho de repositório provenientes de integrações de terceiros

Orquestração de fluxo de trabalho

Depois de disparado, o GitHub Actions processa seu fluxo de trabalho:

Análise de fluxo de trabalho:

  • Lê o arquivo de fluxo de trabalho YAML de .github/workflows/
  • Valida a sintaxe e a configuração
  • Determina as dependências do trabalho e a ordem de execução

Alocação do executor:

  • Atribui executores apropriados (hospedados pelo GitHub ou auto-hospedados)
  • Provisiona ambientes virtuais limpos para cada trabalho
  • Configura os sistemas operacionais e software necessários

Execução e coordenação do trabalho

Execução paralela (padrão):

jobs:
  lint: # Runs simultaneously
  test: # Runs simultaneously
  security-scan: # Runs simultaneously

Execução sequencial (com dependências):

jobs:
  build:
    runs-on: ubuntu-latest

  test:
    needs: build # Waits for build to complete
    runs-on: ubuntu-latest

  deploy:
    needs: [build, test] # Waits for both jobs
    runs-on: ubuntu-latest

Execução de ações em tarefas

Cada trabalho executa suas etapas sequencialmente:

  1. Preparação do ambiente: configuração e verificação do Runner
  2. Resolução de ação: Baixar e armazenar em cache as ações necessárias
  3. Execução da etapa: executar comandos e ações em ordem
  4. Manipulação de artefatos: salvar e compartilhar arquivos entre trabalhos
  5. Limpeza: desativar o ambiente e liberar recursos

Resultados e comentários

Após a conclusão, o GitHub Actions fornece comentários abrangentes:

Relatório de status:

  • Indicadores de êxito/falha de etapa individual
  • Métricas de status e duração em nível de trabalho
  • Resumo e status geral do fluxo de trabalho

Integração de notificação:

  • Notificações por email para falhas de fluxo de trabalho
  • Slack, Teams ou integração de webhook personalizada
  • Verificações de status em solicitações de pull

Estratégias de otimização de fluxo

Design de trabalho eficiente

jobs:
  # Fast feedback loop - run linting first
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Lint code
        run: npm run lint

  # Resource-intensive jobs run in parallel
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [18, 20, 22]

  # Deploy only after all checks pass
  deploy:
    needs: [lint, test]
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest

Execução condicional

Controlar o comportamento do fluxo de trabalho com base no contexto:

jobs:
  build:
    runs-on: ubuntu-latest

  deploy-staging:
    needs: build
    if: github.ref == 'refs/heads/develop'
    runs-on: ubuntu-latest

  deploy-production:
    needs: build
    if: github.ref == 'refs/heads/main' && github.event_name == 'push'
    runs-on: ubuntu-latest

Esse design de fluxo garante que os fluxos de trabalho sejam eficientes, previsíveis e forneçam comentários claros em todo o processo de automação.