Skip to content

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.

Plano Pessoal para a Próxima Sprint

Na próxima sprint a equipe blue team continuará o trabalho em duas frentes: a primeira é a implementação de novas funcionalidades no projeto EJ-Application, focando em melhorias de segurança e usabilidade. A segunda frente envolve continuar o estudo e aprimoramento do pipeline CI/CD, explorando práticas avançadas de DevOps para otimizar o processo de integração e entrega contínua.