AvaliaMais
Introdução
editarFinalidade
editarEste documento tem como objetivo mostrar a aplicação de alguns dos pontos abordados na Gerência de Configuração em um ambiente de desenvolvimento real, com o objetivo de ampliar a maturidade do projeto AvaliaMais e controlar as mudanças de uma maneira mais organizada e automatizada.
Escopo
editarA ideia do projeto é melhorar a Gerência de Configuração do projeto AvaliaMais e como foi feito as pressas devido as deadlines da disciplina de MDS, essa GCS não foi aplicada corretamente e tem trazido problemas para o avanço do mesmo. Assim, os objetivos são categorizados abaixo.
- Integração Contínua
- Deploy Automatizado
- Ambiente de desenvolvimento
Visão Geral
editarO projeto AvaliaMais foi desenvolvido na disciplina de Métodos de Desenvolvimento de Software e utiliza dados abertos do Consumidor.gov e tem como objetivo possibilitar a avaliação sobre os serviços das empresas cadastradas no sistema.
Link do repositório AvaliaMais/GCS
Link do repositório oficial do Projeto GitHub
Acrônomos e Abreviações do Projeto
editarSigla | Significado |
---|---|
GCS | Gerência de Configuração de Sofware |
IC | Integração Contínua |
MDS | Métodos de Desenvolvimento de Software |
Gerenciamento e Configuração do Projeto
editarOrganização, Responsabilidades e Interfaces
editarVisando realizar a gerência de configuração no projeto, foram adicionadas alguns papéis dentro do escopo da disciplina, realizados pela presente dupla.
Papel | Nome | Responsabilidade |
---|---|---|
Gerente de Configuração | Gesiel Freitas | Realizar o acompanhamento e configuração do ambiente de desenvolvimento aplicando características de GCS para aumentar a produtividade e confiabilidade do projeto. |
Gerente de Configuração | Vitor Borges | Realizar o acompanhamento e configuração do ambiente de desenvolvimento aplicando características de GCS para aumentar a produtividade e confiabilidade do projeto. |
Auditor de Gerenciamento e configuração de Software | Renato Sampaio | Verifica e valida as configurações propostas para o projeto. |
Ferramentas, Ambiente e Infra-estrutura
editarAlgumas ferramentas serão utilizadas para aplicar a GCS no ambiente, mostradas a seguir:
Git e Github
editarAqui será apresentadas as ferramentas e plataformas que serão utilizadas para realizar o controle de versões do projeto.
Nome | O que é? |
---|---|
Git | Ferramenta para versionamento de projetos que tem como objetivo facilitar o desenvolvimento de softwares. |
GitHub | Plataforma que permite o armazenamento e disponibilização de projetos online que faz o uso da ferramenta Git. |
Ferramentas de Integração Contínua: Travis-CI
editarSobre o Travis-CI
editarTravis é uma ferramenta de IC em ambientes de desenvolvimento de software, é grátis e possui é um software livre - open source - que facilita o trabalho de equipes de desenvolvimento por meio de builds automatizadas.
Como funciona
editarO Travis-CI é instalado no projeto adicionando o arquivo .travis.yml que possui uma série de scripts - criada pelo desenvolvedor do projeto - que são executados assim que o desenvolvedor sobe suas alterações para a branch que está configurada a receber a execução do Travis. O mesmo executa os scripts e a build pode ter sucesso ou não. Caso não tenha, o desenvolvedor deve ficar atento pois existe algo de errado no código e o mesmo não pode ser continuado antes de arrumar as dependências.
Ambiente de desenvolvimento
editarVagrant
editarFerramenta que possibilita a criação de um ambiente de desenvolvimento em uma maquina virtual, contendo todas as ferramentas e dependências necessarias para o desenvolvendor codificar o projeto.
VirtualBox
editarSoftware de virtualização que pertence atualmente à Oracle que visa criar ambientes para a instalação de sistemas distintos. O software VirtualBox será o software utilizado para a virtualização do ambiente de desenvolvimento, utilizado no Vagrant.
Como funciona
editarO ambiente de desenvolvimento funciona da seguinte maneira: instalando o Vagrant no projeto, é possível configurar o ambiente por meio de um arquivo, o Vagrantfile. Nele, coloca-se as dependências que precisam ser instaladas no ambiente virtualizado, definindo também qual a ferramenta de virtualização, sua memória RAM, porta de acesso e algumas outras configurações.
Ferramenta de Deploy
editarTravis e Heroku
editarHeroku é uma plataforma de serviços em nuvem a qual suporta várias linguagens de programação. A primeira linguagem suportada pela plataforma foi Ruby, mais tarde adicionou suporte a várias outras como: Java, Nodejs, Python, PHP entre outras.
Este trabalho usa a linguagem de programação Ruby para realização do deploy no Heroku.
O travis trás uma integração com Heroku no qual pode realizar deploy automático após uma build bem-sucedida.
Relatório de Acompanhamento
editarCronograma
editarCronograma para controle de deadlines e andamento do projeto.
Atividade | Período | Descrição | Responsáveis | Status |
---|---|---|---|---|
Divulgar plano de GCS | 26/09 à 03/10 | Montagem e publicação do plano GCS na Wikiversidade | Gesiel e Vitor | Feito |
Configuração da Ferramenta de IC | 04/10 à 17/10 | Configuração correta e eficiente da ferramenta de integração contínua | Gesiel e Vitor | Feito |
Ambiente de Desenvolvimento | 20/10 à 05/11 | Configuração do ambiente de desenvolvimento | Gesiel e Vitor | Em andamento |
Deploy no Heroku | 06/11 à 13/11 | Configuração do deploy do projeto no servidor do Heroku | Gesiel e Vitor | Feito |
Deploy Automatizado | 14/11 à 20/11 | Configuração do deploy automático do projeto | Gesiel e Vitor | A fazer |
Apresentação do Projeto | 21/11 à 05/12 | Apresentação do projeto final com a implementação do planejamento realizado | Gesiel e Vitor | A fazer |
Implantação e Aplicação do Plano de Gerência de Configuração
editarIntegração Contínua
editarComo já citado anteriormente, a ferramenta IC selecionada foi a Travis-CI. O principal motivo para a equipe selecionar esta ferramenta foi que sua integração com o Github - onde o projeto encontra-se - é muito fácil e rápida.
A configuração do Travis-CI no projeto Avalia Mais foi executado seguindo os seguintes passos:
1° Passo: Realizar login no Travis com a conta do GitHub que possui o repositório a ser utilizado
2° Passo: Autorizar o Travis a realizar a integração contínua nos repositórios desejados, no caso, o Avalia Mais.
3° Passo: Inserir o arquivo .travis.yml na pasta do projeto.
$ cd PROJECT_PATH
$ touch .travis.yml
4° Passo: Configurar o arquivo database.yml com as especificações da Base de Dados, que será utilizado no Travis.
default: &default
adapter: mysql2
username: root
encoding: utf8
pool: 5
timeout: 5000
development:
<<: *default
database: avalia_mais_development
password: root
test: &test
<<: *default
database: avalia_mais_test
production:
<<: *default
database: avalia_mais_production
cucumber:
<<: *test
5° Passo: Configurar o arquivo database.yml.travis para definir a base de dados de teste, a ser utilizada para os testes unitários.
test:
adapter: mysql2
database: avalia_mais_test
username: root
6° Passo: Configurar o arquivo .travis.yml de acordo com o projeto e suas dependências.
language: ruby
services:
- mysql
before_script:
- cp config/database.yml.travis config/database.yml
- mysql -e 'create database myapp_test;' -uroot
script:
- bundle exec spring binstub --all
- bundle install
- bundle exec rake db:load_config
- bundle exec rake db:create
- bundle exec rake db:migrate
- bundle exec rspec
rvm:
- 2.3.1
notifications:
email:
recipients:
- gesiel.was.f@gmail.com
- vitorbertulucci@hotmail.com
branches:
only:
- master
Com isso, foi definido a branch a ser utilizada a integração contínua, as dependências necessárias para realizar a build de testes e os integrantes do projetos à serem avisados sobre a execução da build de testes.
Ambiente de Desenvolvimento
editarComo dito anteriormente, foi utilizado o Vagrant juntamente com a VirtualBox da Oracle para construir o ambiente virtualizado de desenvolvimento. Para isso, foi utilizado o Vagrantfile dentro do projeto. Para a instalação do Vagrantfile no projeto basta executar o comando:
$ vagrant init
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
Com isso, o Vagrantfile é criado. Com o Vagrantfile instalado no projeto, realizou-se a configuração do arquivo da seguinte maneira:
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# Use Ubuntu 16.04 Xenial Xerus 64-bit as our operating system
config.vm.box = "ubuntu/xenial64"
# Configurate the virtual machine to use 2GB of RAM
config.vm.provider :virtualbox do |vb|
vb.customize ["modifyvm", :id, "--memory", "2048"]
end
# Forward the Rails server default port to the host
config.vm.network :forwarded_port, guest: 3000, host: 3000
# Configurate the virtual environment with shell script - Installing all dependences
config.vm.provision "shell", privileged: false, path: "script/script.sh"
end
Após a configuração do arquivo Vagranfile, executa-se o seguinte comando para a criação da máquina virtual:
$ vagrant up --provision
A execução desse comando faz com que o vagrant crie uma máquina virtual e a configure de acordo com as configurações pré definidas no Vagrantfile. Para ter acesso à máquina virtual por meio do terminal, deve-se executar o comando:
$ vagrant ssh
Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0-101-generic x86_64)
* Documentation: https://help.ubuntu.com/
System information as of Sun Nov 27 20:09:24 UTC 2016
System load: 0.0 Processes: 81
Usage of /: 5.5% of 39.34GB Users logged in: 0
Memory usage: 14% IP address for eth0: 10.0.2.15
Swap usage: 0%
Graph this data and manage this system at:
https://landscape.canonical.com/
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
New release '16.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
Last login: Sun Nov 27 20:09:24 2016 from 10.0.2.2
vagrant@vagrant-ubuntu-trusty-64:~$
Já dentro da máquina virtual, acesse a página /vagrant dentro do ambiente.
$ cd /vagrant
Como o ambiente configurado, basta executar o seguinte comando para acessar pela porta configurada o projeto:
$ rails s -b 0.0.0.0
Script de configuração do ambiente
editar#script.sh
#!/bin/bash
echo "Update: starting"
sudo apt-get update
sudo apt-get upgrade
echo "Update: DONE"
echo "Install git: starting"
sudo apt-get -y install git
echo "Install git: DONE"
echo "Installing additional dependences: starting"
sudo apt-get install -y build-essential autoconf bison libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm-dev
sudo apt-get -y install nodejs
echo "Installing additional dependences: DONE"
echo "Installing rvm: starting"
sudo apt-get -y install curl
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
echo "chave instalada"
echo "Instalando RVM"
\curl -sSL https://get.rvm.io | bash
echo "RVM instalada"
echo "diretorio para uso do rvm"
source /home/vagrant/.rvm/scripts/rvm
echo "Installing rvm: Done"
echo "Installing ruby: starting"
rvm install 2.3.1
rvm use 2.3.1 --default
echo "Ruby instaled: DONE"
echo "Installing rails: starting"
gem install bundler
gem install rails -v 4.2.4
echo "Installing rails: DONE"
echo "install mysql cliente"
sudo apt-get -y install mysql-client
echo "mysql instaled: DONE"
echo "instalation mysql server starting"
sudo debconf-set-selections <<< "mysql-server mysql-server/root_password password root"
sudo debconf-set-selections <<< "mysql-server mysql-server/root_password_again password root"
sudo apt-get -y install mysql-server
sudo apt-get install -y libmysqlclient-dev
echo "mysql server instaled: DONE"
echo "instalation postgree: starting"
sudo apt-get install -y postgresql
sudo apt-get install -y libpq-dev
echo "postgree instaled: DONE"
echo "instalation sucess"
echo "instalation gems and create db: starting"
cd /vagrant
bundle install
rake db:create db:migrate
echo "success"
echo "Instalation Complete!"
Deploy Automatizado
editarO deploy automatizado foi feito com as configurações já existentes entre o Travis e o Heroku. Com isso, foi necessário apenas inserir no final do arquivo .travis.yml algumas configurações que permitem o deploy no servidor do Heroku.
Para isso deve-se criar uma conta no Heroku e após isso seguir os seguintes passos.
- Instalar heroku toolbelt
$ wget -O- https://toolbelt.heroku.com/install-ubuntu.sh | sh
2. Realizar login no heroku
$ heroku login Enter your Heroku credentials. Email: example@example.com Password:
3. criar um aplicativo no Heroku.
$ heroku create avalia-mais-gcs
4. Realizar o deploy
$ git push heroku master
5. Instalar TravisCI
$ gem install travis
6. Criptografar a chave de segurança do git
$ travis encrypt $(heroku auth:token) --add deploy.api_key
7. No arquivo do .travis.yml será gerado automaticamente as linhas no final do arquivo.
deploy:
provider: heroku
app: avalia-mais-gcs
api_key:
secure: JFd0mo1jV/nOmSNpJqkmg8hkSmgL
hw6fY4qdhBVwTap1Vb4446piZqolv1/tVdYk/3u
a51O8Vk2gze4PZJbuTwmRszQQUIOWC8c9MWavBL
HhrVBYiBNrRHE0f62Hex+t5HnwuBzieoGDuaJ/7
1VYo2O5tDzX/kyZY5FhdyRV1/B8/hy8/SGs+ur3
Knf1503f9N4KWwSE7zSlB3uY9Ix+Oz2j8b1wUQI
M420Zz6nDg9uTbdjQLTeBFO/Oa9BHpByHHbz0x8
X3G0TEGOqrE5ZWVR6dDwefysgS0BDl/nAEnGkdI
+zllX6o3hwIlGjJVHWDIB54NtC6V6+3U5s/BQ9n
lNlHJrlJsH+ILIi91OD5rds4PuD95QUjoN7/Z3u
GCgBFNk9aOoyk5awfANrDm7ajsEy221MghMjFgm
Ia4136p3EPUiTkVRFeIaqnSQXsgynfmgBLS88ln
SbVl/uudyDWrq7OzevVkn3GAaqX2wYwTyqX2MOe
vUxOgxp7IOe99qb16L7Eamxy5tqAYWqixiwr/hN
Y5i7qnyn6kkJpJr/1THLFy1Ba5ZO/MPxQPUWUSx
fT5OjFnbFrG1te7UkWSNbLy0bzlvEuzu4/YT1yC
FTcPxA8y+UjPQv49f5rT4iK8rhx5OhBM73prpQK
Q1X6rrVw2L62d/WdwsOTbssfSrDSqDs=
on:
branch: master
Com isso, o Travis, ao obter sucesso nas atividades anteriores, executa os comandos de deploy, que podem ser acompanhados no log de atividades em tempo real que aparecem no site do travis, sobre o repositório desejado.
The command "bundle exec rspec" exited with 0.
Fetching: dpl-1.8.24.gem (100%)
Successfully installed dpl-1.8.24
1 gem installed
Installing deploy dependencies
Fetching: multi_json-1.12.1.gem (100%)
Successfully installed multi_json-1.12.1
Fetching: excon-0.54.0.gem (100%)
Successfully installed excon-0.54.0
Fetching: heroku-api-0.4.2.gem (100%)
Successfully installed heroku-api-0.4.2
3 gems installed
Fetching: rendezvous-0.1.2.gem (100%)
Successfully installed rendezvous-0.1.2
1 gem installed
Preparing deploy
authenticated as gesiel.was.f@gmail.com
checking for app 'avalia-mais-gcs'
found app 'avalia-mais-gcs'
Cleaning up git repository with `git stash --all`. If you need build artifacts for deployment, set `deploy.skip_cleanup: true`. See https://docs.travis-ci.com/user/deployment/#Uploading-Files.
Saved working directory and index state WIP on (no branch): 64e27dd Merge branch 'master' of https://github.com/GesielFreitas/AvaliaMais
HEAD is now at 64e27dd Merge branch 'master' of https://github.com/GesielFreitas/AvaliaMais
dpl.3
Deploying application
Resultados Esperados
editarComo saber se as atividades de virtualização deram certo?
editarCom a execução das atividades de virtualização do ambiente e o servidor do Rails em execução (rails s -b 0.0.0.0), será possível verificar e acessar localmente o site do AvaliaMais por meio do endereço http://0.0.0.0:3000, que é a porta de acesso definida no Vagranfile.
Como saber se as atividades de deploy deram certo?
editarAo executar todos os comandos, será possível ter acesso ao site do AvaliaMais por meio do link http://avalia-mais-gcs.herokuapp.com/.
Referências Bibliográficas
editarhttp://www.contagia.com.br/blog/git-pra-que-serve/
https://www.oficinadanet.com.br/post/14791-o-que-github
https://code.tutsplus.com/tutorials/travis-ci-what-why-how--net-34771