Introdução editar

O presente documento visa descrever o Plano de Gerenciamento de Configuração de Software, a ser realizado no projeto Pesquini, sendo este desenvolvido por alguns integrantes da disciplina de Métodos de Desenvolvimento de Software da Universidade de Brasília. Este documento tem o intuito de descrever as atividades a serem executadas pelos integrantes Adailson Santos e Marcelo Martins de acordo com o cronograma proposto, além de informar as ferramentas utilizadas no decorrer do projeto.

Contexto editar

O projeto Pesquini visa construir um sistema que trata informações sobre empresas julgadas inidôneas, tornando-se não aptas a prestar serviços para o governo. O projeto visa disponibilizar as informações sobre empresas inidôneas de forma mais interativa e atrativa por meio de elementos visuais ,como gráficos, tabelas, rankings, mapas, entre outros, para a população em geral.

Visão Geral editar

O documento será descrito a partir dos seguintes tópicos:

  • Introdução (contexto do projeto)
  • Repositório (link para o repositório do projeto)
  • Gerenciamento de Configuração (cronograma e ferramentas utilizadas)

Abreviações editar

  • UnB - Universidade de Brasília
  • GCS - Gerência de Configuração de Software
  • MDS - Métodos de Desenvolvimento de Software

Repositório editar

O repositório da aplicação Pesquini está disponível no seguinte link do Github: https://github.com/joaaogui/pesquini

O repositório da aplicação que está sendo utilizada para a disciplina está disponível no seguinte link do Github: https://github.com/adailson2/pesquini/tree/management

Relatório do Projeto editar

Cronograma editar

O cronograma foi elabora conforme as demandas de projetos e atividades das outras disciplinas, buscou-se então, atividades mais trabalhosas em épocas que a dupla estiveram mais tranquilos com relação as outras atividades da universidade.

Utilizamos Sprints para facilitar a localização no desenvolvimento do projeto.

Milestone Sprint Período Atividade Status
Planejamento 1 20/09 ~ 26/09 Fazer Plano de GCS Feito
2 27/09 ~ 03/10 Definir ferramentas de configuração Feito
3 04/10 ~ 10/10 Desenvolver Política de Branch Feito
Máquina Virtual 4 11/10 ~ 17/10 Criar e configurar máquina virtual (Vagrant) Feito
Integração Contínua 5 17/10 ~ 25/10 Estudar ferramenta de integração contínua (Travis) Feito
6 26/10 ~ 01/11 Implementar ferramenta de integração contínua Feito
7 07/11 Ponto de Controle Feito
Deploy automatizado 6 08/11 ~ 14/11 Estudar ferramenta de deploy (Heroku) Feito
7 15/11 ~ 21/11 Implantação e teste do deploy Feito
21/11 Entrega Projeto Final
28/11 Entrega Projeto Final
05/12 Entrega Projeto Final

Ferramentas editar

As ferramentas que a equipe planeja desenvolver no projeto são as seguintes:

Ferramenta Descrição
Git
GitHub Sistema de hospedagem de repositório
Vagrant Virtualização de ambiente
Travis Ferramenta de Configuração Contínua
Heroku Ferramenta de Deploy Automatizado
PostGre SQL

Execução do Projeto editar

Planejamento editar

Executou-se o planejamento no tempo previsto no cronograma. A dupla desenvolveu um Plano de Gerenciamento de Configuração contendo as ferramentas que serão trabalhadas no projeto Pesquini. O projeto Pesquini foi desenvolvido pela disciplina Métodos e Desenvolvimento de Software da turma de 2014 e o mesmo não possuiu um gerenciamento de configuração de software bem definido e esse foi o principal motivo da escolha desse projeto para ser trabalhado na disciplina de Gerência e Configuração de Software.

Máquina virtual editar

Uma ambientação virtual se torna necessária em um projeto que necessita de praticidade quando a equipe de desenvolvimento deseja trabalhar em uma máquina com as mesmas configurações e ferramentas. Dentre as ferramentas para essa ambientação utilizou-se o Vagrant, pois possui uma ótima documentação e possui fácil instalação.

Instalação editar

Primeiramente, foi necessário a instalação do Vagrant e do Virtualbox:

Acessou-se a página de download do Vagrant e instalou o mesmo de acordo com as configurações de sistema da máquina. Além disso, foi necessário a instalação da ferramenta VirtualBox para emular o ambiente juntamente com o Vagrant.

Aplicação editar

Seguindo a documentação do Vagrant, foi realizado os seguintes comandos dentro da pasta GCS:

$ vagrant init ubuntu/trusty64

Utilizou-se a box "ubuntu/trusty64" pois foi a mais adequada ao projeto. Desse modo, o vagrant criou um arquivo chamado Vagrantfile. Custamizamos o VagrantFile da seguinte forma:

Vagrant.configure(2) do |config|

   config.vm.provision :shell, path: "install-rvm.sh", args: "stable", privileged: false
   config.vm.provision :shell, path: "install-ruby.sh", args: "2.3.1", privileged: false
   config.vm.provision :shell, path: "install-ruby.sh", args: "2.3.1 rails haml", privileged: false
   config.vm.provision :shell, path: "install-postgresql.sh", args: "9.5.4", privileged: false

   config.vm.provision "shell", inline: <<-SHELL
     sudo apt-get update
     sudo apt-get install -y nodejs nodejs-legacy postgresql-common postgresql-9.5
     sudo apt-get install -y git curl automake build-essential bison
     sudo apt-get install -y libpq-dev libssl-dev libtool libcurl4-openssl-dev
     sudo apt-get install -y libyaml-dev libreadline-dev libxml2-dev libxslt1-dev
     sudo apt-get install -y libffi-dev libffi-dev libgdbm-dev libncurses5-dev
     sudo apt-get install -y libsqlite3-dev sqlite3 zlib1g-dev
     sudo apt-get install -y python-software-properties
     rvm default ruby-2.3.1
     gem install bundler
     gem install nokogiri -v '1.6.8'
     gem install rails  
     sudo apt-get autoremove
     sudo apt-get autoclean
     sudo apt-get update
     cd /vagrant/
     bundle install
    SHELL
end

Observa-se a instalação dos seguintes paths: "install-rvm.sh", "install-ruby.sh", "install-postgresql.sh".

Para que sejam instaladas com sucesso, fori necessário a criação desses 3 arquivos:

install-rvm.sh

#!/usr/bin/env bash
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
curl -sSL https://get.rvm.io | bash -s $1

install-ruby.sh

#!/usr/bin/env bash

source $HOME/.rvm/scripts/rvm

rvm use --default --install $1

shift

if (( $# ))
then gem install $@
fi

rvm cleanup all

install-postgresql.sh

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'

wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -

Portanto, na pasta criada, ficou o seguinte:

$ ls -a
.   install-postgresql.sh  install-rvm.sh  install-ruby.sh
..  Vagrantfile

Agora é só executar o comando abaixo para que seja criado a máquina virtual e instalado as dependências necessárias para a execução e desenvolvimento do projeto Pesquini:

$ vagrant up --provider virtualbox

Após a instalação completa da ambientação, é necessário executar o seguinte comando para entrar na máquina:

$ vagrant ssh

É possível observar que se está dentro da máquina quando o comando de acesso do terminal esteja no seguinte formato:

vagrant@vagrant-ubuntu-trusty-64:~$

Para criar uma pasta compartilhada com a pasta local do projeto é necessário entrar na pasta oculta do vagrant:

vagrant@vagrant-ubuntu-trusty-64:~$ cd /vagrant
vagrant@vagrant-ubuntu-trusty-64:/vagrant$

Agora é só fazer o clone do repositório disponível no github e trabalhar normalmente:

vagrant@vagrant-ubuntu-trusty-64:/vagrant$ git clone https://github.com/adailson2/pesquini/

Integração Contínua editar

Configuração editar

Para a implementação de um projeto com a geração de testes funcionais, unitários e de sistema a cada contribuição de projeto, configurou-se o Travis CI.

Primeiramente, foi necessário entrar no repositório no GitHub do projeto e adicionar o serviço Travis CI na área de "Settings".

Instalação editar

Após isso, ao entrar no site do Travis CI e vinculá-lo a conta do GitHub, foi possível ativar o repositório para a execução do Travis.

O mesmo orientou de criar uma aplicação chamada .travis.yml e inserir na raiz do projeto.

.travis.yml

language: ruby
rvm:
  - "2.3.1"

addons:
  postgresql: "9.5.4"

before_script:
  - sudo service postgresql start
  - cd pesquini/
  - gem install rspec rspec-rails simplecov
  - bundle install
  - psql -c 'create database pesquini_test;' -U postgres;
  - psql -c 'create user pesquini;' -U postgres;
  - rake db:migrate
  - rake db:setup

script:
  - bundle exec rspec spec
  - bundle exec cucumber

bundler_args: --binstubs=./bundler_stubs

sudo: required

notifications:
  email:
    recipients:
      - adailson2@gmail.com

Foi desenvolvido, então, esse script contendo a versão da linguagem da aplicação, a criação de database e user no banco e o comando execução dos testes.

Ao realizar o push na aplicação, foi observado no GitHub que ao lado do commit, apareceu um ícone verde positivo, sinal de que a build foi executada e testada naquele commit.

Deploy editar

O deploy da aplicação foi realizado utilizando o Heroku. Para que o deploy fosse realizado, foi necessário pré-compilar todos os assets e a realização do teste local para a verificação de algum possível bug na hora de dar o deploy. Após essa verificação foi utilizados os seguintes comandos:

É necessário logar com a senha e usuário do heroku através desse comando:

heroku login

Após estar logado, foi utilizado este comando, que serve para transformar o código implantado em slug , que poderão ser então executado em uma dyno. Esse comando irá recuperar todas as dependências, gerar ativos gerados ou código compilado.

heroku create --buildpack https://github.com/heroku/heroku-buildpack-ruby.git

Logo em seguida demos o seguinte comando para a verificação da aplicação:

git config --list | grep heroku

Após isso inicializamos o banco, porém não o populamos:

heroku run rake db:migrate

Com o seguinte comando, subimos a aplicação para o servidor do heroku:

git push heroku master

Após isso, abrimos a aplicação:

heroku open