BLOG

Como Criar Pipelines Eficientes Usando GitHub Actions

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.

Foto de Marcelo Buzzetti

Marcelo Buzzetti

Esta gostando do conteúdo ? Compartilhe!