GitHub Actions é a plataforma nativa de CD do GitHub que executa workflows automáticos disparados por eventos no repositório.

Anatomia de um Workflow

Todo workflow é um arquivo YAML dentro de .github/workflows/. O GitHub detecta qualquer arquivo nessa pasta automaticamente.

name: CI
 
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]
 
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Instalar dependências
        run: npm install
      - name: Rodar testes
        run: npm test

Conceitos centrais:

  • on: o gatilho. Pode ser push, pull_request, schedule (cron), workflow_dispatch (manual via UI) ou um evento de outro workflow.
  • jobs: unidades de execução que rodam em paralelo por padrão. Use needs para encadear.
  • steps: sequência de comandos dentro de um job. Um step que falha interrompe o job inteiro.
  • runs-on: o sistema operacional do runner. ubuntu-latest cobre a maioria dos casos; self-hosted usa sua própria máquina.

Montando a Esteira

Jobs encadeados com needs formam a esteira sequencial:

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: pip install ruff && ruff check .
 
  test:
    needs: lint
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: pip install pytest && pytest
 
  build:
    needs: test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: docker build -t myapp:${{ github.sha }} .
        env:
          REGISTRY: ${{ vars.REGISTRY_URL }}
 
  deploy:
    needs: build
    runs-on: ubuntu-latest
    environment: production
    steps:
      - run: ./scripts/deploy.sh
        env:
          DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}

Se lint falha, o pipeline para. test, build e deploy não chegam a rodar.

Segredos e Variáveis

Credenciais nunca ficam no código. O GitHub separa em dois escopos:

  • Secrets (secrets.NOME): valores criptografados, nunca expostos nos logs. Use para tokens de API, senhas e chaves.
  • Variables (vars.NOME): valores visíveis, sem criptografia. Use para flags de ambiente, nomes de cluster, URLs não-sensíveis.

Ambos são configurados em Settings > Secrets and variables > Actions no repositório. Secrets de organização podem ser compartilhados entre vários repositórios.

Reutilizando Lógica

Para não duplicar YAML entre repositórios, o GitHub Actions oferece dois formatos:

Composite Actions: agrupam steps repetidos em um action.yml dentro do próprio repositório. Qualquer workflow chama com uses: ./.github/actions/nome-da-action.

Reusable Workflows: um workflow inteiro que outros workflows invocam com uses: org/repo/.github/workflows/ci.yml@main. Útil quando times diferentes precisam do mesmo pipeline sem copiar o arquivo.

Conexões

  • CD é o conceito que o GitHub Actions implementa
  • DevOps é a cultura que motiva o uso da ferramenta
  • Docker é o formato de empacotamento mais comum nos jobs de build
  • ArgoCD complementa o CD: o GitHub Actions publica a imagem; o ArgoCD faz o deploy no Kubernetes
  • Container Registry armazena as imagens construídas no job de build
  • terraform pode ser aplicado como step no pipeline para provisionar infraestrutura

Referências