GitHub Actions é uma plataforma de integração contínua e entrega contínua (CI/CD) integrada diretamente nos repositórios GitHub. Ela permite automatizar fluxos de trabalho de build, teste e implantação sem depender de serviços CI externos. Se você é um administrador de sistemas gerenciando sites de infraestrutura, um desenvolvedor publicando pacotes ou uma equipe implantando aplicações web, GitHub Actions fornece a automação para fazer isso de forma confiável.
Este guia cobre tudo, desde a criação do seu primeiro workflow até exemplos práticos para diferentes cenários de implantação.
O Que É CI/CD?
Integração Contínua (CI) é a prática de automaticamente construir e testar mudanças de código cada vez que alguém faz push de commits em um repositório. Isso detecta bugs cedo, garante que os testes passem antes do merge e mantém o codebase em um estado implantável.
Entrega/Implantação Contínua (CD) estende o CI automatizando o processo de release. A Entrega Contínua garante que o código esteja sempre pronto para implantação, enquanto a Implantação Contínua automaticamente implanta cada mudança que passa por todos os estágios do pipeline.
Conceitos Fundamentais
Workflows
Um workflow é um processo automatizado definido em um arquivo YAML em .github/workflows/ no seu repositório. Cada workflow contém um ou mais jobs que são executados quando acionados por um evento.
Events (Eventos)
Eventos acionam workflows. Os eventos comuns incluem:
push: Código é enviado para uma branchpull_request: Um PR é aberto, atualizado ou mescladoschedule: Agendamento cron para execuções programadasworkflow_dispatch: Acionamento manual pelo GitHub UI
Jobs (Tarefas)
Jobs são unidades de trabalho dentro de um workflow. Jobs são executados em paralelo por padrão, mas podem ser configurados para executar sequencialmente usando needs.
Steps (Passos)
Steps são tarefas individuais dentro de um job. Cada step pode executar um comando shell ou usar uma Action (pré-construída ou personalizada).
Seu Primeiro Workflow
Crie .github/workflows/ci.yml no seu repositório:
name: CI Pipeline
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Run linter
run: npm run lint
- name: Run tests
run: npm test
- name: Build
run: npm run build
Este workflow:
- Aciona em pushes para
mainoudevelope em pull requests direcionados amain - Executa em um runner Ubuntu
- Faz checkout do código, configura Node.js, instala dependências, executa linting, testes e build
Secrets e Variáveis de Ambiente
Nunca codifique credenciais diretamente nos seus workflows. Use GitHub Secrets:
- Vá em Settings > Secrets and variables > Actions no seu repositório
- Clique em New repository secret
- Adicione seu secret (ex.:
SSH_PRIVATE_KEY,DEPLOY_TOKEN)
Use secrets no seu workflow:
steps:
- name: Deploy to server
env:
SSH_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
SERVER_HOST: ${{ secrets.SERVER_HOST }}
run: |
echo "$SSH_KEY" > deploy_key
chmod 600 deploy_key
ssh -i deploy_key -o StrictHostKeyChecking=no user@$SERVER_HOST "cd /app && git pull && docker compose up -d"
rm deploy_key
Exemplo Prático: Deploy de Site Astro via SSH
name: Deploy Astro Site
on:
push:
branches: [main]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Build site
run: npm run build
- name: Deploy to server
uses: easingthemes/ssh-deploy@main
with:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
REMOTE_HOST: ${{ secrets.SERVER_HOST }}
REMOTE_USER: ${{ secrets.SERVER_USER }}
SOURCE: "dist/"
TARGET: "/var/www/mysite/"
Cache para Builds Mais Rápidas
Faça cache das dependências para acelerar significativamente os workflows:
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
Para pipelines Docker, faça cache das camadas:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build and push
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: myapp:latest
cache-from: type=gha
cache-to: type=gha,mode=max
Melhores Práticas
- Mantenha os workflows simples e focados — um workflow por preocupação
- Use cache para acelerar os builds
- Fixe versões das Actions para reprodutibilidade (ex.:
actions/checkout@v4) - Nunca codifique secrets nos arquivos de workflow
- Use ambientes para controlar implantações em produção
- Adicione status badges ao seu README
- Use build matrix para testar múltiplas versões
Conclusão
GitHub Actions traz CI/CD diretamente para o seu repositório GitHub, eliminando a necessidade de serviços CI externos para a maioria dos fluxos de trabalho. Os exemplos de workflow neste guia cobrem os cenários mais comuns: build e teste de código, implantação em servidores e publicação de imagens Docker.
Comece com um workflow simples de build e teste, depois adicione gradualmente implantação e automação à medida que sua confiança cresce. A experiência integrada com GitHub significa menos configuração, feedback mais rápido e uma única plataforma para seu código e pipeline CI/CD.