Pipeline CI/CD
Histórico de Revisões
Data | Versão | Descrição | Autor |
---|---|---|---|
06/05/2018 | 0.0.1 | Versão inicial do documento do pipeline | João Pedro Sconetto e Mariana Mendes |
06/06/2018 | 1.0.0 | Entrega da primeira versão do documento e adição da imagem do processo | João Pedro Sconetto e Mariana Mendes |
11/06/2018 | 1.0.1 | Correção da imagem dos processos do pipeline | João Pedro Sconetto e Mariana Mendes |
Processos de DevOps
O presente documento visa esclarecer e registrar todos os processos, a cultura implementada e os padrões que foram utilizados no projeto Dr. Down no viés das práticas de DevOps, a fim de unificar o desenvolvimento e as operações inerentes do projeto supracitado.
O documento se divide em duas partes:
-
Integração Contínua (CI - Continuous Integration)
-
Deploy Contínuo (CD - Continuous Deploy)
No qual a primeira parte irá mostrar as técnicas e itens aplicados ao projeto no propósito de, como o nome da técnica diz, integrar continuamente o trabalho desenvolvido pela equipe. A segunda parte irá mostrar as técnicas e itens aplicados ao projeto com o objetivo de fazer a implantação contínua do projeto na infraestrutura utilizada pela equipe, de forma automatizada.
Integração Contínua:
Padrão de Commit
Por questões de padronização documentamos o seguinte estilo de commit:
-
Os commits devem ser todos em inglês;
-
Ele deve conter um título curto e objetivo do que foi feito naquele commit;
-
Após esse título, deve-se descrever, com um pouco mais de detalhes, todas as atividades executadas.
-
Caso esteja trabalhando com algum associado assine nos seus commits os seus parceiros
Exemplo:
Creating project community files (Título curto e objetivo)
Adds project license (Descrição de uma das atividades)
Adds project code of conduct file
Adds project contributing file
Adds project issue template file
Adds projects pull request file
Co-authored-by: John Doe <john@email.com> (Assinatura de parceria)
Política de Branchs
Tendo como meta manter a integralidade e confiabilidade do código do projeto, foi proposta a utilização de política de branches. Essa Política de Branches deverá guiar os desenvolvedores na forma de organização de suas contribuições ao projeto.
OBS: A política de branchs foi idealizada para trabalhar em conjunto com a ferramenta do git flow, sua documentação e mais informações podem ser acessadas aqui.
-
master - Branch principal do repositório, onde será permitida somente a integração de software consolidado e testado. Essa branch será exclusiva para a entrega de Releases, ou seja, um conjunto maior de funcionalidades que integram o software. Aqui estará a versão stable do software.
-
develop - Branch para integração de novas funcionalidades, onde será permitido a entrega das features desenvolvidas e que estão em um estágio avançado de completude. Será a branch base para o início do desenvolvimento das features e da correção de bugs. Aqui também serão mergeadas as releases.
-
feature/
- Branch utilizada para o desenvolvimento de novas features do backlog. Caso a feature tenha sida proposta por uma issue do repositório e aceita no backlog o nome deverá conter o número da issue. Ex: feature/1- (Considerando que a feature tenha sido solicitada na issue #1) -
bugfix/
- Branch utilizada para corrigir bugs de baixa/média urgência e que não estão presentes na branch master. Caso o bug tenha sido reportado por uma issue do repositório o nome deverá conter o número da issue. Ex: bugfix/1- (Considerando que o bug tenha sido reportado na issue #1) -
hotfix/
- Branch utilizada para corrigir bugs de alta urgência e que estão presentes na branch master. Caso o bug tenha sido reportado por uma issue do repositório o nome deverá conter o número da issue. Ex: bugfix/1- (Considerando que o bug tenha sido reportado na issue #1) -
release/
- Branch onde será feito os ajustes finais/build antes da entrega de uma versão do produto de software. Constará no nome da branch a versão da release a ser entregue. -
support/
- Branch onde serão executadas tarefas de suporte relacionadas ao software, como elaboração de documentações, correções de natureza de gerência de configuração e etc.
Testes e Estilo de Código
Com o objetivo de garantir a qualidade de código, assim como a sua manutenibilidade, a equipe definiu técnicas e padrões a serem seguidos, quanto ao estilo de código foi definido uma folha de estilo que é considerada a padrão por programadores Python, se trata da PEP8. Com isto é possível verificar, com o auxílio da ferramenta Code Climate o quão manutenível é o código que está sendo feito.
Em complemento ao estilo do código a equipe acordou em manter todo o código testado, pois com a união das duas técnicas é possível assegurar uma maior qualidade de código. Para isso foram usados técnicas padrões de teste do Python/Django, com o auxílio do Coverage.py e do pytest, estes que, também, servem de input para o Code Climate analisar a manutenibilidade do software.
Ficou acordado entre os membros da equipe que a cobertura de teste deveria ser igual ou superior a 90% em todos os momentos do projeto.
Pull Requests
Ao término da execução da codificação é necessário a abertura de um Pull Request no repositório oficial do software para que possa ser apreciado o código solução. Com isso as ferramentas de CI/CD automático irão executar a fase de build e teste para verificar se etapa de teste e estilo de código foram implementadas corretamente. Caso não tenha dívidas nessa fase, cabe a dois membros da equipe de EPS (com foco no P.O. na análise) analisar o produto para verificar se atende os critérios de aceitação e se está de acordo com o que foi definido para ser entregue. Com todas as técnicas e fases entregues em conformidade, cabe aos membros aprovarem o pull request para que o mesmo possa ser mergeado em branchs de entregue de feature.
Build e Testes
Com o auxílio de ferramentas de automatização essa fase é executada, via Travis-CI, a fim de garantir a fase de Teste e Estilo de Código. Com isso a ferramenta vai verificar o código, executar todos os testes para procurar erros na lógica do software e após tentar construir (build) os containers da aplicação. Caso qualquer passo dessa fase tenha algum problema a ferramenta irá informar (via e-mail e via repositório) que algo está errado e é preciso correções antes de avançar no pipeline.
Deploy Contínuo:
Com a execução de todos os passos da integração contínua a ferramenta de automatização irá executar os passos de deploy, caso não tenho encontrado nenhum erro, que seguem com o deploy/entrega da aplicação no ambiente de homologação e produção. Os passos executados são:
-
Publica a última versão integrada na branch no docker hub da aplicação;
-
Acessa as máquinas de deploy (Hosts no Digital Ocean);
-
Baixa a última versão do docker hub no host;
-
Executa atualizações necessárias com as novas funcionalidades (migrações, modificações no banco, traduções e etc);
-
Caso tenha algum problema a máquina envia um log para a ferramenta de logs (sentry.io). Caso contrário, o sistema mantém o funcionamento contínuamente.
Pipeline v0.0.1
Legenda
Primeiro Estágio: * No primeiro estágio estão as culturas de política de branches, padrão de commits, estilo de código e testes, onde durante o desenvolvimento a equipe segue as culturas propostas até a publicação do código com as novas adições.
Segundo Estágio: * Aqui o código publicado com as adições, chamada de versão, é alcançada pela ferramenta de CI, executado os testes (todos os implementados e os novos adicionados) e é feito a build, caso haja erro nesse estágio retorna-se ao primeiro fazendo as adições necessárias.
Terceiro Estágio: * Aqui a nova versão está em um estágio estável do seu ciclo de vida, se todas as adições esperadas para esta versão estiverem prontas a equipe espera uma abertura de um novo pull request solicitando a junção dessa versão com a versão atual do software. Nesta fase é feito a verificação manual da concordância das adições, tanto com os estágios anteriores quanto com as especificações de produto levantado pelo Product Owner, caso positivo o pipeline avança, do contrário retorna a estágios anteriores.
Quarto Estágio: * Aqui com a nova versão aprovada e consolidada ela é direcionada para o ambiente o qual deve integrar (homologação ou produção) e a ferramenta de CI/CD faz o deploy e entrega automática dessas novas adições.
OBS: Os principais artefatos que estão inclusos no, e participam do, pipeline são: .travis.yml
, codeclimate.yml
, mkdocs-build.sh
, production-deploy.sh
e staging-deploy.sh
, todos estão disponíveis no repositório da aplicação no GitHub.
Processo do Pipeline v0.0.1
A fim de tornar mais claro como ocorre o processo do CI/CD, assim como mostrar em detalhes como é feito o pipeline de integração, deploy e entrega contínua da ferramenta Dr. Down, foi desenhado, com auxílio da ferramenta Bizagi, o processo com cada tarefa e como é executado cada estágio que foi descrito acima: