ContributeBlog

Fonte: Wikiversidade

Grupo: Karine e Murilo

Página de Referência: Gerência de Configuração de Software

Introdução[editar | editar código-fonte]

Esse documento descreve o plano de gerenciamento de configuração do Contribute Blog, desenvolvido na disciplina de Gerência de Configuração de Software (GCS) na UnB-FGa.

Visão Geral[editar | editar código-fonte]

Esse plano de Gerenciamento de configuração de Software possui como diretrizes um organização em responsabilidades do projeto, modelo de GCS e respectivamente as ferramentas utilizadas, e por fim resultados da implantação do gerenciamento.

Finalidade[editar | editar código-fonte]

A implantação desse plano de GCS tem por finalidade diminuir as ocorrências de problemas na configuração do Contribute Blog em outros ambientes, além de garantir maior qualidade no desenvolvimento de testes da aplicação, assegurando que as entregas de software aceitas estejam no nível aceitável definido pela equipe de gerencia e configuração.

Escopo[editar | editar código-fonte]

O estabelecimento do plano de configuração de software tem por escopo inserir ferramenta de controle da instalação do Contribute Blog, preparar ambiente de desenvolvimento de testes unitários,integrar ferramenta de controle de testes e por fim relatar os resultados da implantação da gerencia de configuração de software. Para isso, devem ser seguidas diretrizes apresentadas em tópicos pelo plano de gerencia.

Definições, Acrônimos e Abreviações[editar | editar código-fonte]

Termo Significado
CM Gerenciamento de Configuração
GCS Gerência de Configuração de Software
Build Versão do software composto por um ou mais itens de configuração
Issue Alguma funcionalidade/problema a ser entregue
Milestone Marco do Projeto

Repositório Git[editar | editar código-fonte]

https://github.com/GCS-2016-1-ContributeBlog/Desenho2.2015Grupo11

Gerenciamento da Configuração de Software[editar | editar código-fonte]

Organização, Responsabilidade e Interfaces[editar | editar código-fonte]

Para realizar as atividades de Gerência de Configuração, os seguintes papéis e responsabilidades foram definidos:

Nome Papel Responsabilidade
Karine Gerente de Configuração Estabelecer políticas de CM, Configurar ambiente de CM, Escrever plano de CM, Realizar auditoria de configuração, Relatar status de configuração, Criar unidade de implantação
Murilo Gerente de Configuração Estabelecer políticas de CM, Configurar ambiente de CM, Escrever plano de CM, Realizar auditoria de configuração, Relatar status de configuração, Criar unidade de implantação

Ferramentas, Ambiente e Infra-estrutura[editar | editar código-fonte]

Para executar a gerência de configuração, as seguintes ferramentas serão utilizadas:

Ferramentas de controle de versão[editar | editar código-fonte]

Ferramenta Descrição
Git Sistema de controle de versão distribuído e gerenciamento de código fonte
GitHub Serviço web hosting compartilhado que usa a ferramenta de versionamento git

Ferramentas para Gerência de Configuração[editar | editar código-fonte]

Ferramenta Descrição
Vagrant Ferramenta que auxilia na configuração, reprodução e portabilidade de um ambiente de trabalho, permitindo maior flexibilidade e produtividade
Chef Ferramenta para configuração de software, usado para escrever “receitas”  de configuração do sistema, simplificando a tarefa de configuração e manutenção de servidores
Travis Serviço de integração contínua distribuído usado para construir e desenvolver software

O Programa de Gerência de Configuração[editar | editar código-fonte]

Controle de Configuração e Mudança[editar | editar código-fonte]

Processamento e Aprovação da Solicitação de Mudança[editar | editar código-fonte]

As mudanças são propostas ao projeto pelo recurso issue oferecido pela ferramenta de forge GitHub, onde o solicitante descreve a mudança. Com isso, as propostas são analisadas em termos de viabilidade de implantação, e se viáveis são aprovadas seguindo para o comitê de controle de mudança

Comitê de Controle de Mudança[editar | editar código-fonte]

comitê de controle de mudanças é composto pelos membros Murilo Duarte e Karine Valença. As mudanças são propostas ao projeto por meio de issues, quando já analisadas e aprovadas para serem executadas seguem para a equipe de implantação de controle de mudanças que deve priorizar as mudanças e riscos e executar as alterações respectivas.

Estimativa do Status de Configuração[editar | editar código-fonte]

Processo de Armazenamento de Mídia e Liberação do Projeto[editar | editar código-fonte]

O projeto deverá ser armazenado no GitHub e deve estar disponível em código aberto. A cada milestone cumprido, deve ser lançado uma nova release.

Milestones[editar | editar código-fonte]

As datas marco do projeto estão listadas na tabela abaixo:

Data Atividade
27/04 Divulgação do Plano de GCS
11/05-17/05 Configuração da Ferramenta Travis para build do código
18/05-24/05 Configuração da Ferramenta Travis e JUnit para build de testes automatizados
25/05-31/05 Configuração das Ferramentas Vagrant/Chef
22/06-29/06 Apresentação do Projeto

Treinamento e Recursos[editar | editar código-fonte]

Para cumprir as atividades de GCS, ocorrerão treinamentos e estudos. Os treinamentos serão as aulas ministradas na disciplina de Gerência de Configuração de Software na faculdade FGa. Os estudos serão realizados pelos membros do time ao longo do decorrer do projeto.

Implantação do Plano de Gerência de Configuração[editar | editar código-fonte]

Integração Contínua[editar | editar código-fonte]

Como mencionado na seção de ferramentas, foi escolhida a ferramenta Travis CI, para a realização da integração contínua. Um dos motivos para o qual o Travis CI foi escolhido foi devido à sua integração com o GitHub, repositório que contém a aplicação.

Assim, para configurar o Travis CI, os seguintes passos foram executados:

- 1º Realizar o login no Travis CI com o GitHub:

Assim, o Travis CI monitora todas as organizações e repositórios da sua conta, sendo possível adicionar algum repositório para a integração contínua.

- 2º Selecionar o repositório no qual deseja que a integração contínua seja realizada:

Após a realização desse passo, o Travis CI está monitorando o repositório selecionado.

- 3º Adicionar o arquivo .travis.yml:

O arquivo .travis.yml diz ao Travis o que ele deve construir e quais branchs deve monitorar.

O arquivo .travis.yml atual está da seguinte maneira:

language: java

script: mvn clean verify 
script: mvn package
script: mvn test

env:
  global:
    - JAVA_HOME=/usr/lib/jvm/java-8-oracle

jdk:
  - oraclejdk8
  - oraclejdk7

branches:
  only:
    - master

install: /bin/true

- 4º Verificar se a build está passando:

Toda vez que algum pull request for enviado à master, o travis rodar para verificar a build.

Para verificar a build, acesse: https://travis-ci.org/GCS-2016-1-ContributeBlog/Desenho2.2015Grupo11

Vagrant[editar | editar código-fonte]

Principais Comandos[editar | editar código-fonte]

#Inicia a configuração da VM com os provisions definidos
$ vagrant provision

#Encerrando a box no terminal
$ vagrant halt

#Acessando a box via ssh, digite no terminal
$ vagrant ssh

#Destruindo uma máquina virtual criada
$ vagrant destroy

Configurando o ContributeBlog em sua VM[editar | editar código-fonte]

A configuração do Vagrant garante que todas as dependências de projeto estejam configuradas na instalação do software. Com isso, identificamos duas principais possibilidades de uso da automatização proposta em nossa VagrantFile:

- 1º Cenário

Se você não possui em seu SO a Virtualbox ou outro software que opere máquinas virtuais instaladas, a máquina base Box precise32 (Ubuntu 32bit), o Vagrant e o CHEF instalados, execute em seu terminal o seguinte arquivo com script shell, para que essas dependências sejam instaladas.

Além disso, o script já vai subir a Box para a VM e iniciar a configuração de dependências do nosso software e também do banco de dados com o script.sh apartir de chamados do VagrantFile. Então, basta seguir os comandos seguintes!

#Clonar o projeto
git clone https://github.com/GCS-2016-1-ContributeBlog/Desenho2.2015Grupo11.git

#Entre no diretório clonado anteriormente "Desenho2.2015Grupo11"
#Execute o comando a seguir, para rodar o script de configuração de dependências
$ ./setup.sh

O que esse setup.sh faz?

#!/bin/bash
echo -e "\nUpdating the package list\n"
sudo apt-get update

echo -e "\nInstalling Virtual Box\n"
sudo apt-get install virtualbox
sudo apt-get install virtualbox-dkms

echo -e "\nInstalling Vagrant\n"
sudo apt-get install vagrant

echo -e "\nImage Box (Ubuntu 14.04 32-bit)\n"
sudo vagrant box add precise32 http://files.vagrantup.com/precise32.box

echo -e "\nInstalling CHEF\n"
sudo vagrant plugin install vagrant-omnibus

echo -e "\nUp box\n"
vagrant up

echo -e "\nConfigs up the box\n"
vagrant provision

- 2º Cenário

Se você deseja apenas realizar a configuração de dependências do nosso software e do banco de dados da aplicação, execute os seguintes passos no terminal:

#Execute os seguintes comandos no terminal
#Clone o projeto com o passo a seguir
$ git clone https://github.com/GCS-2016-1-ContributeBlog/Desenho2.2015Grupo11.git

#Entre no diretório clonado no passo anterior

#Imagem de Box (ubuntu 32Bit)
$ sudo vagrant box add precise32 http://files.vagrantup.com/precise32.box

#Instalando o omnibus
$ sudo vagrant plugin install vagrant-omnibus

#Subindo box
$ vagrant up

#subindo configs da box
# Instala: java / Tomcat / mysql / script.sh (configura banco de dados) 
$ vagrant provision

A configuração do VagrantFile está da seguinte maneira:

Vagrant.configure(2) do |config|
	# Every Vagrant development environment requires a box. You can search for
	config.vm.box = "precise32"
	config.vm.box_url = "http://files.vagrantup.com/precise32.box"

    	# Create a private network, which allows host-only access to the machine
  	# using a specific IP.
	config.vm.network "private_network", ip:"192.168.33.10"

	config.vm.provision "shell", :inline => "sudo apt-get update -y"
	config.vm.provision "shell", :inline => "sudo apt-get install curl -y"
	config.vm.provision "shell", :inline => "sudo apt-get install -y tomcat7"
	config.vm.provision "shell", :inline => "sudo apt-get install tomcat7-examples"

    config.omnibus.chef_version = "12.10.24"

 	config.vm.provision :chef_solo do |chef|

		chef.cookbooks_path = ["cookbooks", "site-cookbooks"]

		chef.add_recipe "apache2"
		chef.add_recipe "java"
		chef.add_recipe "mysql::server"

		chef.json = {
			"java" => {
                		"install_flavor" => "oracle",
				"jdk_version" => "7",
               			"oracle" => {
                   			 "accept_oracle_download_terms" => true
                		}
        		}, :mysql=> {
		        	:client => { :version => "5.5.28" },
		        	:server_root_password => "root",
		        	:server_repl_password => "no_replication",
		       		:server_debian_password => "root"
	       		}
		}
	end
	#Configuring the database and tables, and rising local server
  	config.vm.provision "shell", path: "script.sh"
end

O que o script.sh faz?

#!/bin/bash
echo -e "\nconfiguration database and its tables\n"
cd /vagrant 
mysql -u root -proot -e "source contribute.sql;"

echo -e "\nRun the project on IP: 192.168.33.10\n"
cd /
sudo cp /vagrant/target/Desenho2.2015Grupo11.war /var/lib/tomcat7/webapps/
cd etc/default
sudo cp /vagrant/target/tomcat7 /etc/default/tomcat7
sudo service tomcat7 restart

Chef[editar | editar código-fonte]

O chef instala todas as dependências necessárias para a configuração do software. Assim, para a execução do nosso projeto, foi necessário instalar o java, o tomcat7 e o mysql. Para instalar o chef, foram executados o seguintes passos:

- 1º Setar a versão do Chef desejada no Vagranfile:

config.omnibus.chef_version = "12.10.24"

- 2º Criar um diretório com o nome "cookbooks"

- 3º Baixar os cookbooks necessários para a execução do projeto

Muitos cookbooks estão no site: https://supermarket.chef.io/cookbooks

- 4º Adicionar as informações do provision do Chef no VagrantFile

No nosso caso, a configuração do chef ficou da seguinte maneira:

config.vm.provision :chef_solo do |chef|

		chef.cookbooks_path = ["cookbooks", "site-cookbooks"]
		chef.add_recipe "apache2"
		chef.add_recipe "java"
		chef.add_recipe "mysql::server"

		chef.json = {
			"java" => {
                "install_flavor" => "oracle",
				"jdk_version" => "7",
                "oracle" => {
                    "accept_oracle_download_terms" => true
                }
        	},
			:mysql=> {
		        :client => { :version => "5.5.28" },
		        :server_root_password => "root",
		        :server_repl_password => "no_replication",
		        :server_debian_password => "root"
	       	}

		}

	end

- 5º Rodar o comando "vagrant provision" para adicionar as novas dependências.

Resultados[editar | editar código-fonte]

Como posso saber se todo o procedimento deu certo?

Se tudo estiver certo, você conseguirá acessar o servidor(VM) localmente em sua máquina, pelo link:

http://192.168.33.10:8080/Desenho2.2015Grupo11/

Referências[editar | editar código-fonte]

https://en.wikipedia.org/wiki/Travis_CI

https://pt.wikipedia.org/wiki/Git

https://pt.wikipedia.org/wiki/GitHub

https://www.vagrantup.com/docs/

https://www.chef.io/chef/

http://junit.org/junit4/