Plano de Gerência de Configuração

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

Introdução

editar

Finalidade

editar

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

Este 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

editar

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

Organização, Responsabilidades e Interfaces

editar
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
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

Identificação da Configuração

editar

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

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

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

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

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

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:

  1. Chef Ambiente de Desenvolvimento
  2. 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

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

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

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

A configuração do ambiente é feita em dois momentos:

  1. 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
  1. 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

editar

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

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