Diário de Bordo – Daniel Rocha Oliveira
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 2 – [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. Além de exemplificar o entendimento do arquivo .gitlab-ci.yml, detalhando cada estágio e sua função dentro do processo de integração e entrega contínua.
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/10 | Criação de um arquivo exemplo .yml | Código | Arquivo | 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, sendo útil não só para a disciplina, como também para trabalhos profissionais. 2- Criação de um arquivo exemplo .yml para praticar e fixar o conhecimento adquirido. 3- Compreensão melhor do funcionamento do CI/CD e sua para o projeto da EJ.
Conteúdo Estudado
Abaixo está o detalhamento do arquivo .gitlab-ci.yml do projeto EJ-Application, explicando cada estágio e sua função dentro do processo de integração e entrega contínua, esse passo foi feito em conjunto com o colega Breno Lucena Cordeiro.
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.
Maiores Dificuldades
Inicialmente, a maior dificuldade foi configurar o ambiente local para simular o pipeline do GitLab CI/CD, especialmente ao lidar com dependências e variáveis de ambiente específicas do projeto. Além disso, interpretar os logs de execução e entender o propósito de cada estágio no contexto do projeto EJ-Application exigiu uma análise cuidadosa da documentação e do código, e claro, desenvolver o arquivo exemplo .yml para fixar o conhecimento.
Aprendizados
Aquisição de um entendimento inicial sobre as estruturas internas do ej-application.