Sobes.tech
Middle+

Na tua opinião, como deveria ser um pipeline CI/CD ideal e que etapas deveria incluir?

sobes.tech IA

Resposta da IA

Um pipeline CI/CD ideal deve estar completamente automatizado, ser fiável e garantir uma entrega rápida de software de qualidade. Deve fornecer feedback rápido aos desenvolvedores e minimizar operações manuais.

Etapas do pipeline ideal:

  1. Gestão do Código Fonte (SCM):

    • Uso de Git com uma estratégia de ramificação clara (por exemplo, Gitflow, Desenvolvimento baseado em trunk).
    • Disparadores de build/test em cada commit nas branches principais e pull requests.
    • Verificação automática do estilo de código (linting) e análise estática básica.
  2. Build:

    • Construção automática de artefactos (por exemplo, imagens Docker, JARs, ficheiros binários).
    • Gestão de dependências.
    • Criação de uma etiqueta única para cada artefacto (por exemplo, por hash de commit, número de build).
  3. Testes:

    • Execução automática de testes unitários.
    • Execução automática de testes de integração.
    • Execução automática de testes end-to-end (E2E) num ambiente isolado.
    • Verificação da cobertura do código com testes.
    • Execução de scans de segurança do código (SAST).
    • Scan de vulnerabilidades de dependências (SCA).
  4. Staging/Deploy para Staging:

    • Deploy automático do artefacto num ambiente de Staging, o mais próximo possível da Produção.
    • Execução de testes de funcionalidade automatizados em Staging.
    • Execução de testes de desempenho (Performance Testing).
    • Análise dinâmica de segurança (DAST).
  5. Aprovação:

    • Confirmação manual ou automática para passar para Produção.
    • Notificação automática às pessoas responsáveis.
  6. Deploy em Produção:

    • Deploy automático em Produção usando estratégias que minimizem o tempo de inatividade e riscos (Canary Releases, Blue/Green Deployment, Rolling Updates).
    • Infraestrutura como código (IaC) para gerir ambientes.
    • Gestão de configurações.
  7. Monitorização e Feedback:

    • Recolha automática de métricas de desempenho, erros e funcionamento (registo, monitorização).
    • Visualização de dados de monitorização.
    • Notificação automática sobre problemas.
    • Mecanismo de feedback de utilizadores.
  8. Rollback:

    • Mecanismo automatizado para reverter à versão anterior em caso de problemas.

Exemplo de etapas na ferramenta CI/CD:

stages:
  - build
  - test
  - scan
  - deploy_staging
  - approve_production
  - deploy_production
  - monitor

build_job:
  stage: build
  script:
    - mvn clean package # ou docker build, npm build, etc.
  artifacts:
    paths:
      - target/*.jar # ou imagem docker

unit_test_job:
  stage: test
  script:
    - mvn test

integration_test_job:
  stage: test
  script:
    - run_integration_tests.sh # Execução de testes em ambiente de teste

security_scan_job:
  stage: scan
  script:
    - run_sast_scan.sh
    - run_dependency_scan.sh

deploy_staging_job:
  stage: deploy_staging
  script:
    - deploy_to_staging.sh via ansible # ou helm, terraform, etc.
  environment:
    name: staging

production_approval_job:
  stage: approve_production
  when: manual # exemplo de aprovação manual
  allow_failure: false

deploy_production_job:
  stage: deploy_production
  script:
    - deploy_to_production.sh # usando a estratégia de deploy escolhida
  environment:
    name: production
    url: https://myapp.com
  when: manual # ou delayed, on_success dependendo da estratégia de aprovação

monitor_prod_job:
  stage: monitor
  script:
    - check_production_health.sh # verificações básicas após deploy
  when: on_success # executa após deploy bem-sucedido em produção

Tabela de funções por etapas:

Etapa Funções principais Ferramentas (exemplos)
SCM Gestão de versões, ramificação, pull requests, disparadores Git, GitHub, GitLab, Bitbucket
Build Construção de artefactos, gestão de dependências Maven, Gradle, npm, Docker, Bazel
Testes Testes unitários, de integração, E2E, cobertura, análise estática, segurança JUnit, TestNG, Postman, SonarQube, Fortify, OWASP Dependency-Check
Staging/Deploy Deploy automático, testes de funcionalidade, desempenho Ansible, Terraform, Helm, Kubernetes, Docker Swarm
Aprovação Gestão de aprovações Jenkins, GitLab CI, GitHub Actions, passos manuais no pipeline
Deploy em Produção Deploy automático (Canary, Blue/Green), IaC, gestão de configuração Ansible, Terraform, Helm, Kubernetes
Monitorização & Feedback Recolha de métricas, logging, alertas, feedback Prometheus, Grafana, ELK Stack, Datadog, Sentry
Rollback Reversão automática Scripts, funções de orquestração (Kubernetes)

É fundamental que cada etapa seja o mais rápida possível e forneça feedback claro. Em caso de falha em qualquer etapa, o pipeline deve parar e notificar os responsáveis. O objetivo é construir confiança no processo de deploy.