Mezuro
Plano de Gerência de Configuração
[editar | editar código-fonte]Integrantes | Matrícula |
---|---|
Maria Luciene Felix | 12/0037742 |
Paulo Henrique Tada | 11/0135431 |
Introdução
[editar | editar código-fonte]Finalidade
[editar | editar código-fonte]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
[editar | editar código-fonte]Este plano é destinado aos integrantes da equipe responsável pelo o desenvolvimento do sistema.
Definições, Acrônimos e Abreviações
[editar | editar código-fonte]- 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
[editar | editar código-fonte]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
[editar | editar código-fonte]Organização, Responsabilidades e Interfaces
[editar | editar código-fonte]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
[editar | editar código-fonte]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
[editar | editar código-fonte]Identificação da Configuração
[editar | editar código-fonte]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
[editar | editar código-fonte]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
[editar | editar código-fonte]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
[editar | editar código-fonte]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
[editar | editar código-fonte]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
[editar | editar código-fonte]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
[editar | editar código-fonte]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
[editar | editar código-fonte]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:
$ 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
[editar | editar código-fonte]Para 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
[editar | editar código-fonte]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:
# 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 | editar código-fonte]- 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
[editar | editar código-fonte]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
[editar | editar código-fonte]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
$ 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