Mezuro
Plano de Gerência de Configuração
editarIntegrantes | Matrícula |
---|---|
Maria Luciene Felix | 12/0037742 |
Paulo Henrique Tada | 11/0135431 |
Introdução
editarFinalidade
editarEsse 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
editarEste plano é destinado aos integrantes da equipe responsável pelo o desenvolvimento do sistema.
Definições, Acrônimos e Abreviações
editar- 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
editarEsse 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
editarOrganização, Responsabilidades e Interfaces
editarPapel | 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
editarFerramenta | 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
editarIdentificação da Configuração
editarO 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
editarO 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
editarO 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
editarO 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
editarO 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
editarO 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
editarO 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
editarO 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:
$ vagrant install plugin vagrant-omnibus
$ vagrant install plugin vagrant-vbguest
Clone o repositório do Github:
$ git clone https://github.com/experimental-project/mezuro_devops.git
Entre na pasta referente ao desenvolvimento:
$ cd mezuro_devops/dev_env
Após isso apenas execute o comando:
$ vagrant up
Comandos úteis
editarPara desligar a VM utilize o comando:
$ vagrant halt
Caso tenha algum problema e queira destruir a VM e todo o seu conteúdo:
$ vagrant destroy
Provisions
editarA 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:
# Configuration for cooking with chef config.vm.provision :chef_solo do |chef| # Cooking :) chef.cookbooks_path = ["cookbooks", "site-cookbooks"] chef.add_recipe "nodejs" chef.add_recipe "vim" chef.add_recipe "rvm::system" chef.add_recipe "rvm::vagrant" chef.add_recipe "postgresql::server" chef.add_recipe "build-essential" chef.add_recipe "nodejs" chef.add_recipe "git" # Installing Ruby 2.2.2 and Bundle # Setting up PostgreSQL chef.json = { postgresql: { password: { postgres: "" }, config: { "listen_addresses" => '*' }, pg_hba: [ { type: "local", db: "all", user: "postgres", addr: "", method: "trust" }, { type: "local", db: "all", user: "kalibro_processor", addr: "", method: "trust" }, { type: "local", db: "all", user: "kalibro_configurations", addr: "", method: "trust" } ] }, :rvm => { 'rubies' => ["2.2.2"], 'default_ruby' => "2.2.2", :vagrant => { :system_chef_solo => "/opt/chef/bin/chef-solo" } } } end
- 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.
#!/bin/bash # Script to install Kalibro Service and dependencies on Ubuntu 12.04. # It may work on Debian 6 but this is untested. # # This script assumes a sane enviroment with at least the following # depedencies already installed and configured: # -sudo # -wget # -coreutils # -RVM with Kalibro's Ruby version already installed (See rvm.io) # -Postgresql # Bash unofficial strict mode: http://www.redsymbol.net/articles/unofficial-bash-strict-mode/ set -eu set -o pipefail IFS=$'\n\t' # Set script configuration ANALIZO_VERSION='1.18.1' # Version >1.17.0 needs Ubuntu 13.10/Debian 7 # Kalibro dependencies (including Analizo) sudo bash -c "echo \"deb http://analizo.org/download/ ./\" > /etc/apt/sources.list.d/analizo.list" sudo bash -c "echo \"deb-src http://analizo.org/download/ ./\" >> /etc/apt/sources.list.d/analizo.list" wget -O - http://analizo.org/download/signing-key.asc | sudo apt-key add - sudo apt-get update -qq sudo DEBIAN_FRONTEND=noninteractive apt-get install -y analizo=${ANALIZO_VERSION} subversion git # Kalibro Processor # Cloning git clone https://github.com/mezuro/kalibro_processor.git -b v0.5.0 kalibro_processor # Given right permission for dir kalibro_processor sudo chown -R $(whoami):$(whoami) kalibro_processor pushd kalibro_processor # Equals 'cd' command # Creating user role kalibro_processor sudo psql -c "create role kalibro_processor with createdb login password 'kalibro_processor'" -U postgres # Config the database files sudo cp config/database.yml.postgresql_sample config/database.yml sudo cp config/repositories.yml.sample config/repositories.yml # RVM rvm use 2.2.2 bundle install --retry=3 RAILS_ENV=local bundle exec rake db:setup db:migrate # Uncomment if you wants to starts the server # RAILS_ENV=local bundle exec rails s -p 8082 -d RAILS_ENV=local bundle exec bin/delayed_job start popd # Equals 'cd ..' command # Kalibro Configurations # Cloning git clone https://github.com/mezuro/kalibro_configurations.git -b v0.1.0 kalibro_configurations # Given right permission for dir kalibro_configurations sudo chown -R $(whoami):$(whoami) kalibro_configurations pushd kalibro_configurations # Creating user role kalibro_configurations sudo psql -c "create role kalibro_configurations with createdb login password 'kalibro_configurations'" -U postgres # Config the database files sudo cp config/database.yml.postgresql_sample config/database.yml # RVM rvm use 2.2.2 bundle install --retry=3 bundle exec rake db:setup db:migrate # Uncomment if you wants to starts the server # bundle exec rails s -p 8083 -d popd # Prezento git clone https://github.com/mezuro/prezento.git -b v0.5.0 prezento # Give right permission for dir prezento sudo chown -R $(whoami):$(whoami) prezento pushd prezento # Config the database files sudo cp config/database.yml.sample config/database.yml # RVM rvm use 2.2.2 bundle install bundle exec rake db:create bundle exec rake db:setup bundle exec rails s -b 0.0.0.0 -d popd
BUG REPORT
editar- 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
editarO 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
editarO 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
$ apt-get install ruby-dev gcc
$ yum install ruby-devel
$ gem install 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:
$ bundle package
- Converter todas as gems com:
$ find vendor/cache -name '*.gem' | xargs -n1 fpm -s gem -t deb
- Instalação das gems
$ sudo dpkg -i *.deb
Observações: Caso ocorra algum erro no processo de instação das gems, instale:
$ sudo apt-get install libpq-dev sqlite3 $ sudo apt-get install libsqlite3-dev
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.
$ fpm -s gem -t deb -v x.x.x nome_gem