O GitHub Actions é uma poderosa ferramenta de automação que permite integrar, testar e implantar código diretamente no GitHub. Com ele, é possível criar pipelines eficientes e automatizar fluxos de trabalho de CI/CD, otimizando o desenvolvimento e a entrega de software. Neste artigo, exploraremos as melhores práticas para estruturar pipelines eficientes usando o GitHub Actions.
Se você deseja ver exemplos práticos e aprender mais sobre DevOps, SRE e Cloud Computing, confira o repositório Toolbox Tech Playground, onde compartilhamos códigos, boas práticas e experiências reais da rotina de um profissional da área.
1. Entenda seu fluxo de trabalho
Antes de começar, identifique:
- As etapas do ciclo de vida do seu projeto (build, test, deploy).
- Os gatilhos que disparam a execução do pipeline, como
push
,pull_request
ou eventos customizados.
2. Estruture seu workflow
Crie workflows organizados com base na funcionalidade. Por exemplo:
build.yml
: Para compilação.test.yml
: Para execução de testes.deploy.yml
: Para implantação.
Exemplo de um workflow:
name: CI Workflow
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '16'
- name: Install dependencies
run: npm install
- name: Build the project
run: npm run build
3. Use jobs para paralelismo
Separe jobs que podem ser executados em paralelo. Por exemplo:
- Um job para rodar testes unitários.
- Outro job para verificar segurança do código.
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Run tests
run: npm test
security:
runs-on: ubuntu-latest
steps:
- name: Scan code with Snyk
uses: snyk/actions/cli@v3
4. Reutilize workflows
Para evitar duplicação de código, use reusable workflows. Isso é útil para tarefas comuns, como testes ou deployment.
Exemplo de um workflow reutilizável:
name: Reusable Test Workflow
on:
workflow_call:
inputs:
node-version:
required: true
type: string
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: ${{ inputs.node-version }}
- name: Install dependencies
run: npm install
- name: Run tests
run: npm teston:
workflow_call:
inputs:
node-version:
required: true
type: string
Para chamar este workflow:
jobs:
test:
uses: org/repository/.github/workflows/test.yml@main
with:
node-version: '16'
5. Cache e otimização
Evite reprocessamentos desnecessários:
- Use caches para dependências de builds.
- name: Cache Node.js dependencies
uses: actions/cache@v3
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
6. Use actions prontas
Aproveite o marketplace de ações para tarefas repetitivas (ex.: lint, scan de segurança). Algumas ações úteis:
actions/checkout
: Para obter o código.actions/cache
: Para cachear dependências.snyk/actions/cli
: Para análise de vulnerabilidades.
7. Inclua validações de segurança
Use ferramentas como Trivy, Gitleaks ou Checkov para detectar vulnerabilidades.
- name: Scan with Trivy
uses: aquasecurity/trivy-action@master
with:
image-ref: my-docker-image:latest
8. Monitore e otimize
- Habilite logs detalhados para identificar gargalos.
- Monitore a duração das execuções.
- Use matrizes para rodar múltiplos testes simultaneamente.
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [14, 16, 18]
steps:
- name: Set up Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
9. Automatize o deploy
Configure o deploy automático para ambientes de staging ou produção.
- name: Deploy to Production
uses: actions/aws-cli-action@v2
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-1
command: s3 sync ./build s3://my-bucket
10. Documente e compartilhe
- Documente os workflows no repositório.
- Centralize boas práticas para equipes que compartilhem os pipelines.
Conclusão
O GitHub Actions proporciona um ambiente robusto para automação de fluxos de trabalho, ajudando no desenvolvimento e implantação contínuos de software. Ao seguir as melhores práticas descritas neste artigo, você poderá criar pipelines mais eficientes, otimizando o tempo de execução e garantindo maior qualidade no seu código.