🛠️ Atividades

🚀 Atividade 16: Pipelines de CI/CD com GitHub Actions

Bem-vindo a mais uma etapa da sua jornada na Engenharia de Software! Nas atividades anteriores, aprendemos sobre GitFlow e arquitetura. Hoje, daremos um passo fundamental na automação de processos industriais de software: a Integração Contínua (CI). Aprenderemos como automatizar a compilação e execução de testes JUnit a cada Push que seu time faz para o repositório, garantindo blindagem contra códigos bugados! 🛡️🧩

🎯 Objetivo da Aula

Ao final desta atividade, você será capaz de:

  • Compreender os conceitos fundamentais de CI/CD (Integração Contínua e Entrega Contínua).
  • Projetar e mapear pipelines lógicos e suas sequências de execução.
  • Configurar um arquivo YAML de automação corporativa real com GitHub Actions.
  • Integrar testes unitários JUnit em aplicações Spring Boot 3.5.x e Java 17 no fluxo de CI.

🏢 O Cenário Prático (Seu Desafio)

Na TecProExpress, a gerência estava cansada: toda vez que um desenvolvedor subia uma nova alteração de código, ele jurava de pés juntos que o sistema estava "funcionando perfeitamente". Porém, ao publicar na nuvem, o aplicativo do motorista quebrava porque alguém esqueceu de testar a alteração localmente!

Os testes manuais demoravam horas de digitação improdutiva e, frequentemente, bugs passavam para produção.

"Seu desafio como Analista de DevOps é criar o primeiro Pipeline de Integração Contínua (CI) para a TecProExpress. Você configurará um arquivo do GitHub Actions que, de forma 100% automática, baixa o código do repositório, instala o Java 17, compila a aplicação Spring Boot e executa todos os testes unitários do JUnit toda vez que um programador enviar um Push ou Pull Request."


🧠 Fundamentos: A Teoria Traduzida

CI (Continuous Integration): É a prática de integrar alterações de código com frequência e validá-las de forma automática. CD (Continuous Delivery): É a publicação automatizada do código validado no servidor web (produção).

Anatomia de um Workflow do GitHub Actions:

  • Workflow: O arquivo YAML que define a automação (salvo na pasta .github/workflows/).
  • Trigger (on): O evento que aciona o pipeline (Ex: push ou pull_request na branch develop/main).
  • Jobs (Trabalhos): As seções do pipeline (Ex: build-and-test).
  • Steps (Passos): A sequência de comandos que roda dentro de uma máquina virtual dedicada na nuvem (Runner).

📊 Visualizando a Sequência de Automação


📖 Exemplo Guiado: Roteiro e Configuração do Pipeline

Para configurar a automação, precisaremos de duas coisas no nosso repositório Java Spring Boot: o teste unitário de negócio (JUnit) e o arquivo do pipeline (Actions).

1. 🛠️ O Teste Unitário JUnit em Java 17 (Cálculo de Frete):

Dentro da pasta src/test/java/com/tecproexpress/ do seu projeto Spring Boot, nós escrevemos o teste de validade da regra de negócio:

package com.tecproexpress.service;

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

public class DeliveryServiceTest {

    @Test
    public void deveCalcularFreteComSucesso() {
        double pesoCarga = 10.0; // 10kg
        double valorBase = 50.0;
        
        // Regra da TecProExpress: R$ 2.00 por Kg excedente
        double freteFinal = valorBase + (pesoCarga * 2.0);

        // Asserção JUnit de Sucesso
        assertEquals(70.0, freteFinal, "O cálculo de frete da TecProExpress falhou!");
    }
}

2. 📄 O Arquivo do Pipeline .github/workflows/ci.yml:

Este é o arquivo YAML que o GitHub interpreta para automatizar a verificação:

name: Java CI com Maven e Spring Boot

on:
  push:
    branches: [ "main", "develop" ]
  pull_request:
    branches: [ "main", "develop" ]

jobs:
  build-and-test:
    runs-on: ubuntu-latest

    steps:
    # 1. Faz o download do código do repositório
    - name: Checkout do Código
      uses: actions/checkout@v4

    # 2. Configura a versão do Java no ambiente de execução
    - name: Instalar JDK 17
      uses: actions/setup-java@v4
      with:
        java-version: '17'
        distribution: 'temurin'
        cache: maven

    # 3. Compila a aplicação Spring Boot e roda os testes do JUnit
    - name: Executar Build e Testes JUnit com Maven
      run: mvn -B clean test

🛠️ Prática Obrigatória 1: Desenho do Pipeline

Cenário: Mapeamento visual das etapas de automação do seu projeto.

  1. Desenhe um diagrama flowchart no Mermaid representando a sequência de passos lógicos que o seu pipeline do GitHub Actions deve executar.
  2. Adicione cores ou estilos para indicar a diferença visual entre o sucesso e a falha de um passo de teste.

🏁 Resultado Esperado (Para sua Referência)

Um diagrama Mermaid detalhado demonstrando o ciclo de CI acionado por um Push de branch e o desfecho do build.


🛠️ Prática Obrigatória 2: O Roteiro de CI e Teste de Unidade

Cenário: Escrevendo sua primeira verificação automatizada.

  1. Crie a especificação em formato Markdown do seu arquivo de configuração .github/workflows/ci.yml customizado para o seu repositório do projeto.
  2. Escreva a classe de teste JUnit (Java) correspondente a uma validação de dados lógica do seu sistema (Ex: Validar se uma senha tem menos de 8 caracteres e falha, Validar se a idade do usuário é maior que 18 para aprovação).

📤 Instruções de Entrega (Microsoft Teams)

Após validar a sua arquitetura de automação de testes:

  1. Salve o arquivo de especificações e códigos com o nome Atividade_16.md na pasta es-atv-16-pipelines-cicd/ do seu repositório GitHub.
  2. Certifique-se de fazer o commit e push para o repositório público.
  3. Submeta o link do seu repositório no Microsoft Teams para avaliação do professor.

💡 Checkpoint de Lógica

Importante:Reflexão Profissional: Se durante a execução do pipeline de CI no GitHub Actions um único teste unitário do JUnit falhar (ex: acusando AssertionError), o que o GitHub fará com o Pull Request de mesclagem de código daquele desenvolvedor? (Resposta: O GitHub marcará o build como "Falho" (Status Vermelho) e bloqueará a mesclagem automática do Pull Request, impedindo que o código defeituoso contamine a branch estável de desenvolvimento develop ou main). 🧠🛡️

📊 Rubrica Formativa de Avaliação

Critério de Avaliação Insuficiente (0% - 40%) Regular (41% - 70%) Excelente (71% - 100%)
Pipeline CI/CD (GitHub Actions YAML & Mermaid) Erros na sintaxe YAML do GitHub Actions ou fluxo do pipeline sem passos de build/test. Escreve o workflow `.yml` mas sem personalizar para a linguagem do projeto. Pipeline CI em YAML perfeitamente funcional com gatilhos (`push`/`pull_request`), setup de JDK/ambiente e execução automatizada de testes.
Automação de Testes de Unidade (JUnit) Sem asserções de teste automatizadas ou sintaxe inválida. Escreve a classe JUnit mas com asserções genéricas. Classe de teste JUnit impecável com asserções de sucesso e tratamento de falhas lógicas do sistema.
Entrega no GitHub Entrega fora da pasta `es-atv-16-pipelines-cicd/`. Arquivo entregue mas sem validação visual da execução do pipeline. Submete `Atividade_16.md` com YAML e JUnit formatados e validados no repositório.
Copyright © 2026