Saltar para o conteúdo

AvaliaMais

Fonte: Wikiversidade

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.

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

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:

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]

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.

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

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