ContributeBlog
Grupo: Karine e Murilo
Página de Referência: Gerência de Configuração de Software
Introdução
editarEsse 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
editarEsse 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
editarA 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
editarO 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
editarTermo | 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
editarhttps://github.com/GCS-2016-1-ContributeBlog/Desenho2.2015Grupo11
Gerenciamento da Configuração de Software
editarOrganização, Responsabilidade e Interfaces
editarPara 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
editarPara executar a gerência de configuração, as seguintes ferramentas serão utilizadas:
Ferramentas de controle de versão
editarFerramenta | 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
editarFerramenta | 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
editarControle de Configuração e Mudança
editarProcessamento e Aprovação da Solicitação de Mudança
editarAs 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
editarcomitê 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
editarProcesso de Armazenamento de Mídia e Liberação do Projeto
editarO 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
editarAs 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
editarPara 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
editarIntegração Contínua
editarComo 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
editarPrincipais Comandos
editar#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
editarA 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
editarO 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
editarComo 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:
Referências
editarhttps://en.wikipedia.org/wiki/Travis_CI
https://pt.wikipedia.org/wiki/Git
https://pt.wikipedia.org/wiki/GitHub
https://www.vagrantup.com/docs/
http://junit.org/junit4/