Projeto

Geral

Perfil

31 - Pipeline de Entrega » Histórico » Versão 1

Redmine Admin, 11/05/2019 22:36

1 1 Redmine Admin
{{>toc}}
2
3
h1. 3.1 - Pipeline de Entrega
4
5
A *Integração Contínua* deste Ministério tem por padrão as seguintes fases:
6
* I. Checkout do código-fonte
7
* II. Compilação e Build
8
* III. Análise de qualidade
9
* VI. Build da Infraestrutura (Imagens Docker)
10
* V. Ambiente do Usuário
11
12
h2. 3.1.1. Fases do Pipeline
13
14
h2. *Fase I: Checkout do repositório*
15
16
Neste passo é feito o checkout do código-fonte da aplicação a partir da escolha de uma branch ou tag gerada contendo uma versão da aplicação.
17
* Para cada entrega de Sprint deve-se adicionar uma tag no repositório Git conforme orientações na página [[2.5.1.2 - Commits, pushes, tags e branches temporárias]] .
18
19
h3. *Fase II: Compilação e Build*
20
21
Essa fase é dividida em dois passos: Empacotamento e Geração da Imagem Docker.  
22
23
h4. II-a) Empacotamento e Publicação
24
25
Neste passo executamos a parte de 'build' da aplicação no qual são chamados os comandos necessários para a geração do pacote binário (executável da aplicação), como por exemplo, um pacote jar, ou war quando falamos de aplicações Java.
26
27
Espera-se também que o processo automatizado seja capaz de publicar os itens gerados pelo build no repositório padrão de Gerenciamento de Componente de Software deste Ministério, que é o *Nexus* para os casos em que o artefato gerado, seja reutilizável por outros componentes e/ou aplicações.
28
29
30
Saiba mais em [[2.4.3 - Scripts de Build]], Exemplo:
31
32
* Maven (Aplicações Java)
33
<pre>
34
mvn clean package
35
</pre>
36
* Npm (Aplicações NodeJs, Angular, etc...)
37
<pre>
38
npm install
39
40
bower install
41
</pre>
42
43
44
h2. *Fase III: Análise de qualidade*
45
46
Essa fase é dividida em três passos: Teste de unidade; Análise estática de código e Teste de Integração.  
47
48
h4. III-a) Teste de unidade/unitário
49
50
Para este passo, espera-se que o processo de entrega automatizada seja capaz de executar os testes unitários sem acionar liquibase, teste de integração ou testes de interface. Os testes de unidade não devem acessar recursos fora da sua fronteira. 
51
Saiba mais em [[2.4.2 - Testes]].
52
53
54
h4. III-b) Teste de Integração
55
56
Para este passo, espera-se que o processo de entrega automatizada seja capaz de executar os testes de integração sem acionar os testes de interface. Os testes de integração devem acessar recursos fora da sua fronteira, e utilizar alguma ferramenta que gere o relatório de cobertura dos testes para que possa ser publicado no *Sonarqube* ou que gere relatório html navegável. Saiba mais em [[2.4.2 - Testes]]. 
57
58
h4. III-c) Análise estática de código
59
60
Para este passo, espera-se que o processo de entrega automatizada faça a chamada ao *SonarQube* para realizar a análise da qualidade do código, gerando uma página de projeto contendo as métricas de qualidade assim como o resultado da cobertura de testes unitários e de integração executados nos passos anteriores.
61
62
É recomendado que neste passo, o processo de entrega automatizado seja interrompido caso a aplicação não esteja atendendo os critérios esperados de qualidade.
63
64
A depender da arquitetura da aplicação, passos como o *III-b) Teste de Integração* podem ter seu tempo de execução muito longos, neste caso é possível paralelizar sua execução, separando este passo em outra tarefa (Job) para que a entrega não fique demasiadamente onerosa, sendo o resultado analisado em outro momento.
65
66
67
h2. *Fase IV: Build da Infraestrutura (Imagens Docker)*
68
69
70
Para este passo, é esperado que o repositório git possua as receitas de todos os containers necessários (frontend, backend, banco, etc...) organizados em pastas dentro da pasta docker que fica na raiz do repositório git, exemplo:
71
72
<pre>
73
 codigo-fonte/
74
75
 docker/
76
77
    frontend/
78
79
       Dockerfile
80
81
    backend/
82
83
       Dockerfile
84
85
86
    banco/
87
88
       Dockerfile
89
90
    .
91
92
    docker-compose.yml //Docker-compose de referência que demonstra como os vários containers conversam entre si
93
</pre>
94
95
Nesta fase são executados os comandos de *docker build* para a criação das imagens necessárias para o funcionamento da aplicação, esta imagens devem ser enviadas *obrigatoriamente* para o Registry privado do MP.
96
97
É recomendada a criação de vários Job's para a aplicação, quando a mesma possuir diversos containers que não precisam ser atualizados sempre no mesmo momento, Exemplo de hierarquia de Job's:
98
99
<pre>
100
   sistema-abc
101
102
      sistema-abc-frontend
103
104
      sistema-abc-backend
105
106
      sistema-abc-banco
107
        
108
</pre>
109
110
Saiba mais em [[3.3 - Conteinerização das aplicações]]
111
112
113
114
h3. *Fase V: Ambiente do Usuário*
115
116
Essa fase é dividida em dois passos: Deploy no Playground do Usuário e Teste de Fumaça.
117
118
h4. V-a) Deploy no Playground do Usuário
119
120
Nesta fase o processo de entrega deve atualizar um *ambiente de DTH (Desenvolvimento, Teste, Homologação)* com a nova versão gerada, de modo que o usuário já possa utilizar a aplicação em seguida.
121
É recomendado que esta atualização seja parametrizada, permitindo escolher o ambiente a ser atualizado ou ainda, não atualizar o ambiente.
122
123
h4. V-b) Teste de Fumaça
124
125
Para este passo, espera-se que o processo de entrega automatizada seja capaz de executar os testes de interface, fazendo assim uma validação básica de integridade da nova versão implantada. 
126
Saiba mais em [[2.4.2 - Testes]]. 
127
128
129
h2. 3.1.2. Ferramentas Necessárias/Sugeridas
130
131
Para que a Integração Contínua possa funcionar da forma esperada no MP, as ferramentas abaixo são utilizadas atualmente:
132
* *Jenkins*
133
* *GitLab*
134
* *Registry Docker Privado*
135
* *SonarQube*
136
* *Nexus*
137
* *Rancher*
138
139
!site_em_construcao.jpg!