Diário de Bordo – [Breno Lucena Cordeiro]
Disciplina: Gerência de Configuração e Evolução de Software - T01
Equipe: OWASP/Blue Team
Comunidade/Projeto de Software Livre: OWASP/ej-application
Sprint 0 – [27/09/2025 – 07/10/2025]
Resumo da Sprint
Foi realizado o estudo do CI/CD e o foco principal foi analisar e testar o pipeline de CI/CD do projeto EJ-Application em ambiente local.
Atividades Realizadas
| Data | Atividade | Tipo (Código/Doc/Discussão/Outro) | Link/Referência | Status |
|---|---|---|---|---|
| 29/09 | Estudo da documentação | Estudo | CI/CD | Concluído |
| 06/09 | Rodar o Pipline do EJ | Código | Concluído | |
| 07/09 | Elaboração do diário de bordo | Documento | Concluído |
Maiores Avanços
1- O avanço mais significativo foi conseguir compreender toda a lógica do ".gitlab-ci.yml", entendendo os papéis de cada estágio. 2- Consegui rodar jobs localmente com Docker, simulando o comportamento da pipeline real. 3- Compreendi melhor a interpretar os logs de execução do GitLab Runner, incluindo erros e mensagens de status.
Explicando .gitlab-ci.yml da EJ
stages:
- style
- linter
- unit tests
- build
- deploy
- e2e tests
O que faz
Define a ordem da pipeline. Cada estágio representa uma etapa do ciclo CI/CD. Os jobs dentro de um mesmo estágio podem rodar em paralelo, mas um estágio só inicia quando o anterior termina com sucesso.
variables:
GITLAB_EJ_TOKEN: "gitlab+deploy-token-533883:51xTbvyHGmEfeZZUxUct"
O que faz
Define uma variável de ambiente usada nos jobs (neste caso, um token de autenticação GitLab).
Estágio style — Verificação de Formatação
black:
stage: style
image:
name: python:3.9.19-slim-bookworm
pull_policy: if-not-present
before_script:
- /bin/bash -c "pip install black==22.12.0"
script:
- /bin/bash -c "black --check ."
tags:
- k8s
O job black verifica se o código Python segue o padrão PEP8.
O comando --check apenas inspeciona sem modificar arquivos.
PEP8 - É o guia oficial de estilo para a linguagem de programação Python, focado em tornar o código mais legível, claro e consistente, facilitando a colaboração e manutenção entre desenvolvedores
Estágio linter — Análise Estática de Código
ruff:
stage: linter
image:
name: python:3.9.19-slim-bookworm
pull_policy: if-not-present
before_script:
- /bin/bash -c "pip install ruff==0.3.7"
script:
- /bin/bash -c "ruff check"
tags:
- k8s
Explicação
O ruff faz uma análise estática, verificando boas práticas, importações e variáveis não utilizadas.
Estágio unit tests — Testes Automatizados
pytest:
stage: unit tests
image:
name: python:3.9.19-slim-bookworm
pull_policy: if-not-present
before_script:
- apt-get update && apt-get install curl libpq-dev gcc g++ libjpeg-dev zlib1g-dev git -y
script:
- cd /builds/pencillabs/ej/ej-application
- curl -sSL https://install.python-poetry.org | python3 -
- export PATH="/root/.local/bin:$PATH"
- poetry install --with main,dev --no-root
- poetry run inv docs
- poetry run inv test
tags:
- k8s
Explicação
Instala dependências de sistema (como libpq-dev, gcc, etc.).
Instala o Poetry, responsável por gerenciar pacotes.
Instala dependências com poetry install --with main,dev.
Executa o comando inv docs (geração ou validação da documentação).
Executa os testes via inv test (wrapper do pytest).
Estágio build — Construção da Imagem Docker (Homologação)
build_dev_image:
stage: build
image:
name: docker
pull_policy: if-not-present
before_script:
- apk update && apk add bash py3-pip
- docker info
script:
- cd /builds/pencillabs/ej/ej-application
- python3 -m venv /tmp/venv && . /tmp/venv/bin/activate && pip install invoke django-environ
- . /tmp/venv/bin/activate && inv docker-build --tag ${CI_COMMIT_SHA} --registry registry.pencillabs.tec.br --no-cache
- . /tmp/venv/bin/activate && inv docker-push --tag ${CI_COMMIT_SHA} --registry registry.pencillabs.tec.br
only:
refs:
- develop
tags:
- k8s
Explicação
Este estágio constrói e envia a imagem Docker para o registry interno. A automação usa comandos inv docker-build e inv docker-push, scripts internos com configurações específicas do projeto.
Estágio deploy — Implantação no Ambiente de Homologação
deploy_dev_image:
stage: deploy
image:
name: python:3.9.19-slim-bookworm
pull_policy: if-not-present
before_script:
- apt-get update && apt-get install git curl -y
- curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
script:
- helm version
- git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/pencillabs/infraestructure/helm-charts.git
- cd helm-charts
- helm upgrade ej-homolog ej -f ej/values-homolog.yaml --set server.image.tag="${CI_COMMIT_SHA}" --install --kubeconfig $K8S_CONFIG
only:
refs:
- develop
tags:
- k8s
Explicação
Realiza o deploy automatizado no ambiente de homologação utilizando Helm:
Instala o Helm.
Clona o repositório de charts.
Executa o comando helm upgrade para atualizar a aplicação ej-homolog.
Estágio e2e tests — Testes de Ponta a Ponta
e2e:
stage: e2e tests
when: manual
image: cypress/base:18.16.0
before_script:
- apt-get update && apt-get install curl -y
script:
- cd /builds/pencillabs/ej/ej-application/src/ej/tests/e2e
- ./run.sh https://ejplatform.pencillabs.tec.br
tags:
- k8s
only:
refs:
- develop
Explicação
Executa testes automáticos com Cypress no ambiente de homologação. O parâmetro when: manual faz com que o job só rode após aprovação manual no GitLab.
Estágio build — Construção de Imagem para Produção
build_prod_image:
stage: build
image:
name: docker
pull_policy: if-not-present
before_script:
- apk update && apk add git
script:
- git clone -b stable --depth=1 https://$GITLAB_INFRA_TOKEN@gitlab.com/pencillabs/infraestructure/core.git
- cd core
- bin/pencilctl build ej -e prod -b prod -c prod --no-cache --push
only:
refs:
- prod
tags:
- k8s
Explicação
Este job é responsável por gerar e publicar a imagem Docker de produção, utilizando o CLI interno pencilctl do time da Pencil Labs.
.YML rodando
Maiores Dificuldades
A principal dificuldade foi lidar com a extensão e complexidade da documentação, que exige bastante tempo e atenção para ser totalmente compreendida. Apesar disso, o arquivo .yml em si mostrou-se relativamente fácil de entender, especialmente com o auxílio de uma IA, que facilitou a interpretação dos trechos e o entendimento completo do seu funcionamento.
Aprendizados
Meu maior aprendizado nesta sprint foi compreender a real importância do CI/CD no processo de desenvolvimento de software. Percebi que a automação desempenha um papel essencial para garantir mais segurança, agilidade e padronização nas entregas, tornando o fluxo de desenvolvimento muito mais eficiente e confiável.
Plano Pessoal para a Próxima Sprint
Na próxima sprint, o foco será dividido em duas principais frentes: aprofundar o entendimento do arquivo .yml e contribuir diretamente com a execução ou criação de testes na pipeline, consolidando o aprendizado obtido até aqui.