Impacto da nova API Calendário nos sitemas da CODE
OBJETIVO
Definir a configuração mais adequada para que seja possível executar na esteira de automação do Openshift os projetos Node.js que seguem o padrão monorepo.
JUSTIFICATIVA
Automatizar a atualização das aplicações Node.js que seguem o padrão monorepo, evitando possíveis erros humanos. Além de diminuir, significativamente, o tempo para atualizar as aplicações que seguem esse padrão.
RESULTADOS ESPERADOS
É esperado que os projetos Node.js, ****no padrão monorepo, possam ser atualizados utilizando a esteira de automação do Openshift.
ENVOLVIDOS
- Assessor:
- Diego Gonçalves de Almeida.
- Equipe Técnica:
- Diego Barros de Oliveira;
- Alef Carvalho da Silva;
- Anderson Soares Cardoso; e,
- Igor Ramos de Oliveira.
- Gerente de Desenvolvimento:
- Janderson de Castro Thomaz.
- Product Owner:
- Jônatas Justiniano Lima.
- Scrum Master:
- Wagner Moreira Melo.
GLOSSÁRIO
- Monorepo - É uma estrutura de projeto onde é possível ter várias aplicações no mesmo repositório.
- Openshift - Ferramenta para gerenciamento containers.
- Container - Ambiente pré-configurado para atender a execução de um sistema específico.
- Dockerfile - Arquivo que define como o container será construído.
- Node.js - Ambiente para execução de aplicações desenvolvidas com JavaScript.
- Javascript - Linguagem de programação para desenvolvimento de sistemas.
- GitLab - Gerenciador de repositórios.
- Job - Configuração do que será feito durante a execução da esteira de automação.
- Branch - Ramificação dentro do repositório do código da aplicação.
DESENVOLVIMENTO
Para a execução dos projetos na esteira de automação, é necessário configurar um Dockerfile. Para atender a necessidade dos projetos, criaremos na raiz do projeto o arquivo Dockerfile, com o seguinte conteúdo:
Além do Dockerfile, também será necessário realizar as configurações relativas ao GitLab. Para isso iremos criar o arquivo .gitlab-ci.yml na raiz do projeto, e configurar conforme abaixo.
.job-common:
stage: deploy
only:
refs:
- development
- staging
- production
trigger:
include:
- project: ci-cd/templates
ref: production
file:
- "deploy.openshift.yml"
- "variables.yml"
strategy: depend
stages:
- deploy
variables:
PROJECT_DISPLAY_NAME: "${PROJECT_NAME}"
DOCKERFILE_PATH: "Dockerfile"
DOCKERFILE_CONTEXT: "/"
ROUTER_PORT: "3000"
ROUTER_TERMINATION: "edge"
DEPLOY_ENVIRONMENT: >
"TZ=America/Porto_Velho"
BUILD_ENVIRONMENT_FILE: "packages/${APP_PATH}/.env.${CI_COMMIT_REF_NAME}"
Para cada projeto do monorepo, um novo job deverá ser adicionado com configurações específicas de cada projeto. Os jobs terão a seguinte estrutura:
nome-job:
extends: .job-common
only:
changes:
- "packages/caminho/relativo/**/*"
- "packages/common/**/*"
- ".gitlab-ci.yml"
- "Dockerfile"
- "package.json"
- "yarn.lock"
variables:
APP_PATH: caminho/relativo
PROJECT_NAME: nome-projeto
Exemplo de um .gitlab-ci.yml com todas as configurações necessárias:
.job-common:
stage: deploy
only:
refs:
- development
- staging
- production
trigger:
include:
- project: ci-cd/templates
ref: production
file:
- "deploy.openshift.yml"
- "variables.yml"
strategy: depend
stages:
- deploy
variables:
PROJECT_DISPLAY_NAME: "${PROJECT_NAME}"
DOCKERFILE_PATH: "Dockerfile"
DOCKERFILE_CONTEXT: "/"
ROUTER_PORT: "3000"
ROUTER_TERMINATION: "edge"
DEPLOY_ENVIRONMENT: >
"TZ=America/Porto_Velho"
BUILD_ENVIRONMENT_FILE: "packages/${APP_PATH}/.env.${CI_COMMIT_REF_NAME}"
almoxarifado-estoque:
extends: .job-common
only:
changes:
- "packages/almoxarifado/estoque/**/*"
- "packages/common/**/*"
- ".gitlab-ci.yml"
- "Dockerfile"
- "package.json"
- "yarn.lock"
variables:
APP_PATH: almoxarifado/estoque
PROJECT_NAME: eestado-almoxarifado-estoque
Após isso, sempre que houver alterações nas branches development, staging e production, os projetos dentro do monorepo que sofreram alguma alteração que afete o funcionamento da aplicação serão atualizados.
CONCLUSÃO
A partir do estudo realizado foi possível identificar e implementar a melhor forma de se configurar projetos Node.js, que seguem o padrão monorepo, na esteira de automação do Openshift.
REFERÊNCIAS
[1] Product Direction - Monorepos. Disponível em: https://about.gitlab.com/direction/monorepos. Acesso em: 10 fev 2022.
[2] Parent-child pipelines. Disponível em: https://docs.gitlab.com/ee/ci/pipelines/parent_child_pipelines.html. Acesso em: 10 fev 2022.
[3] Keyword reference for the .gitlab-ci.yml file. Disponível em: https://docs.gitlab.com/ee/ci/yaml. Acesso em: 10 fev 2022.
[4] How to set up monorepo build in GitLab CI. Disponível em: https://how-to.dev/how-to-set-up-monorepo-build-in-gitlab-ci. Acesso em: 10 fev 2022.
[5] Dockerfile reference. Disponível em: https://docs.docker.com/engine/reference/builder. Acesso em: 10 fev 2022.