AvaliaMais
Introdução
[editar | editar código-fonte]Finalidade
[editar | editar código-fonte]Este 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
[editar | editar código-fonte]A 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
[editar | editar código-fonte]O 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
[editar | editar código-fonte]Sigla | 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
[editar | editar código-fonte]Organização, Responsabilidades e Interfaces
[editar | editar código-fonte]Visando 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
[editar | editar código-fonte]Algumas ferramentas serão utilizadas para aplicar a GCS no ambiente, mostradas a seguir:
Git e Github
[editar | editar código-fonte]Aqui 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
[editar | editar código-fonte]Sobre o Travis-CI
[editar | editar código-fonte]Travis é 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
[editar | editar código-fonte]O 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
[editar | editar código-fonte]Vagrant
[editar | editar código-fonte]Ferramenta 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
[editar | editar código-fonte]Software 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
[editar | editar código-fonte]O 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
[editar | editar código-fonte]Travis e Heroku
[editar | editar código-fonte]Heroku é 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
[editar | editar código-fonte]Cronograma
[editar | editar código-fonte]Cronograma 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
[editar | editar código-fonte]Integração Contínua
[editar | editar código-fonte]Como 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
[editar | editar código-fonte]Como 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 | editar código-fonte]#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
[editar | editar código-fonte]O 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
[editar | editar código-fonte]Como saber se as atividades de virtualização deram certo?
[editar | editar código-fonte]Com 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?
[editar | editar código-fonte]Ao 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
[editar | editar código-fonte]http://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