# Mezuro
## Plano de Gerência de Configuração

| Integrantes | Matrícula |
| Maria Luciene Felix | 12/0037742 |
| Paulo Henrique Tada | 11/0135431 |

## Introdução
### Finalidade

Esse documento tem como finalidade apresentar como é realizado o controle de mudanças e o padrão da organização para o gerenciamento de configuração do projeto Mezuro.

### Escopo

Este plano é destinado aos integrantes da equipe responsável pelo o desenvolvimento do sistema.

### Definições, Acrônimos e Abreviações

* Integração Contínua: é uma prática de desenvolvimento de software na qual integra-se frequentemente o trabalho realizado por um time.
* Build: É uma versão executável de um software, ou seja, um build refere-se ao processo no qual um código fonte é convertido em um código executável.

## Visão Geral

Esse documento está organizado em quatro seções. A seção 1 apresenta basicamente a finalidade do documento, bem como os usuários do mesmo. Na seção 2 descreve os papéis e suas responsabilidades além de apresentar a ferramentas e o ambiente de desenvolvimento. Na seção 3 encontra-se o processo de gerência de mudanças e por ultimo na seção 4 é apresentado a organização dos marcos internos.

## Identificação da Configuração
### Organização, Responsabilidades e Interfaces

| Papel | Descrição |
| Gerente de Configuração | Responsável por realizar a configuração do ambiente de desenvolvimento além de estabelecer a infraestrutura geral do Gerenciamento de Configuração. |
| Gerente de Controle de Mudanças | Realiza o controle de mudanças e analisa o impacto dessas no cronograma e no custo do projeto. |
| Integrador | Responsável por planejar a integração entre os sistemas e subsistemas. |
| Qualquer Papel | Realiza a manutenção dos sistemas de controle. |

### Ferramenta e Ambiente

| Ferramenta | Descrição |
| Git | Serviço de controle de versão, com opções gratuitas e pagas |
| GitHub | É um serviço web para hospedagem e compartilhamento de projetos que utilizam o controle de versionamento git |
| dpkg | Gerenciador de pacotes debian |
| Chef | É uma ferramenta de gerenciamento de configuração. Tem como principal objetivo simplificar a tarefa de configuração e manutenção de servidores. |
| Travis | É um sistema de Integração Contínua usado para geração de builds |
| Ubuntu 14.04 | Sistema operacional |

## Gerência da Configuração de Software
### Identificação da Configuração

O documentos deverão seguir o padrão apresentado a seguir:
* <PROJETO>_<ID_ARTEFATO>
* <PROJETO> : refere-se ao nome do projeto, e.g, MEZURO
* <NOME_DO_DOCUMENTO> : refere-se a sigla de identificação do artefato, ver tabela 1
| Id | Artefato Gerados |
| PGCS | Plano de Gerência de Confituação de Sotware |
| RR | Relatório de Resultados |

### Configuração

O escopo do projeto se delimita em dois níveis de configuração: melhoria da atual configuração e pacote de instalação na extensão debian. O primeiro nível se resume na melhoria da gerência de configuração do projeto, ou seja, identificação dos itens implantados e utilizados no sistema e aplicar melhorias e contemplar eventuais requisitos. O segundo nível consiste na distribuição do sistema Mezuro em pacotes debian.

## Controle de Configuração e Mudanças

O controle será realizado através da ferramenta Github, onde será armazenado e mantido as atividades do desenvolvimento da gerência de configuração. Os recursos do sistema serão utilizados da seguinte forma:
* Issues: forma de representação das tarefas a serem cumpridas durante o desenvolvimento. Cada tarefa deve demonstrar completude e um valor significativo ao projeto. As issues devem ser levantadas inicialmente, mas ao longo do projeto pode ser criadas novas atividades.
* Branch: ramificações das versões do sistema. A denominação da branch será feita de acordo com a issue relacionada a ela. A branch deve representar uma ou mais issue.
Três branchs principais serão feitas: devel, test e master.
* A branch devel conterá os item de desenvolvimento do projeto. Essa ramificação será a base para a criação das branchs posteriores, sendo elas branchs descartáveis;
* A branch test conterá um conjunto de atualizações do projeto que passará por um período de teste a fim de verificar a adição das mudanças do projeto;
* A branch master conterá o conjunto final de atualizações após os devidos testes realizados.
As outras ramificações do projeto, criadas a parti da branch devel, serão consideradas branchs descartáveis, ou seja, após a conclusão das atividades que representam aquela branch e a devida transferência dela para a branch devel, poderão ser excluídas.

### Fluxo de Aprovação

O fluxo de aprovação será feito através do sistema de pull request onde o conjunto de atualizações do sistema será acoplado nas branchs posterióres, seguindo o fluxo representado na figura a seguir.

## Marcos

O projeto ele segue alguns princípios do ciclo de vida proposto no Scrum. Sendo assim os marcos foram definidos como release. Duas releases foram definidas para o projeto:
* Release 1 [ 19-05 ] - Pesquisa e Configuração do Ambiente: ambiente configurado para realização das atividades do projeto. Inclui o projeto Mezuro e as dependências para realizar o pacote debian;
* Release 2 [ 09-06 ] - Melhoria de Gerência de Configuração: contempla o ambiente para o desenvolvimento estabelecido e a entrega de uma melhoria da gerência de configuração já estabelecida;
* Release 3 [ 26-06 ] - Distribuição em pacotes: contempla a distribuição do sistema Mezuro em pacote debian (.deb).

## Acompanhamento

O projeto pode ser acompanhado pelo sistema de controle de versão GitHub pelo link Mezuro Devops.
As milestones do projeto foram divididas em duas:
* Chef Ambiente de Desenvolvimento
* Empacotamento Debian
A situação referente ao dia 10 de Junho está disposta na tabela abaixo (pode ser vista no repositório pelo sistema de milestones)
| Milestone | Data Final | % concluida | Atraso |
| Chef Ambiente de Desenvolvimento | 09/06 | 100 | 0 |
| Empacotamento Debian | 26/06 | 14 | - |

### Chef Ambiente de Desenvolvimento

O ambiente de desenvolvimento do projeto Mezuro foi feito utilizando as ferramentas:
* Vagrant
* Chef-Solo
* Ubuntu 14.04
Além disso também há as dependências:
* PostgreSQL (>=9.3)
* Build-essencial
* Curl
* RVM
* Kalibro Configurations
* Kalibro Processor
* Kalibro Client (gem)

#### Configuração do Ambiente

O ambiente de configuração é criado dentro do sistema Vagrant, onde é criado uma virtual machine. Nela são configuradas todas as dependências necessárias para o desenvolvimento. É necessário ter instalado na maquina de desenvolvimento duas ferramentas: vagrant (>=1.7.2) e virtualbox (>=4.3.28). Elas podem ser encontradas nos sites oficiais do Vagrant e VirtualBox.
Também é necessário a instalação de plugins para o vagrant (vagrant-omnibus e vagrant-vbguest), pelos comandos:
Clone o repositório do Github:
Entre na pasta referente ao desenvolvimento:
Após isso apenas execute o comando:

##### Comandos úteis

Para desligar a VM utilize o comando:
Caso tenha algum problema e queira destruir a VM e todo o seu conteúdo:

##### Provisions

A configuração do ambiente é feita em dois momentos:
* Provision Chef: instalação e configuração das dependências: PostgreSQL, Build-essencial, Curl e RVM.
** A configuração das receitas a serem utilizadas para instalar no ambiente de desenvolvimento são postas no arquivo Vagrantfile. Não é recomendado realizar esse procedimento nesse arquivo. O ideal seria criar um cookbook que realize essas atividades. Nos status atual está sendo realizado da seguinte forma:
* Provision Shell: instalação e configuração das dependências: Kalibro configurations, kalibro processor e kalibro client.
** O shell realiza as operações manuais de clone de repositório, bundle install, banco de dados, etc. Seguem as etapas de configuração: analizo, kalibro processor, kalibro configurations e prezento.

##### BUG REPORT

* O script de configuração das dependência dos kalibros não podem ser executados mais de uma vez. Se houver algum problema durante a configuração da VM é necessário destruir a VM. Não é possível utilizar o comando $ vagrant provision, apenas no caso de executar o provision do chef-solo.
* Em alguns casos, quando a VM é desligada um ERRO de permission ocorre.

### Empacotamento Debian

O sistema Mezuro é uma plataforma web livre e colaborativa para análise de código, sua arquitetura e baseada em micro-serviços dividindo-se em: Kalibro Configuration e Kalibro Processor, web-services para gerenciamento de configurações de análises de código, e o Prezento que encarrega-se de mostrar os dados.
O Empacotamento do Mezuro divide-se em 4 fases:
* Empacotamento dependências(gems)
* Empacotamento Kalibro Configuration
* Empacotamento Kalibro Processor
* Empacotamento Prezento

#### Empacotamento Dependências

O empacotamento das gems consiste em realizar uma conversão para o formato .deb. Utilizamos a ferramenta FPM que se tornou conhecida por realizar a conversão de vários pacotes de formatos diferentes, sem que fosse necessário muito conhecimento técnico de cada pacote em específico.
Todas as dependências totalizam ~= 200 gems
Para a conversão das gems seguiu se os seguintes passos:
Instalar a ferramenta FPM
Convertendo gem para .deb
* Criar um arquivo Gemfile contendo todas as gems
* Baixar as gems e salvar em /vendor/cache com o seguinte comando:
* Converter todas as gems com:
* Instalação das gems
Observações: Caso ocorra algum erro no processo de instação das gems, instale:
Algumas gems podem apresentar dependências, quando isso acontecer entre no site do ruby-gems faça o download da gem e realize a conversão.