EnTurma
Alunos
[editar | editar código-fonte]- Daniel Teles
- Jônnatas Lennon
Introdução
[editar | editar código-fonte]Visão Geral
[editar | editar código-fonte]Propósito
[editar | editar código-fonte]Este documento tem por finalidade apresentar o plano e execução do gerenciamento de configuração e mudanças do projeto EnTurma, desenvolvido por alunos da UnB - Faculdade do Gama durante a disciplina de MDS(Métodos de Desenvolvimento de Software). Sendo que o mesmo não possui um processo de GCS definido, porém utiliza algumas práticas do mesmo.
Escopo
[editar | editar código-fonte]Inicialmente o escopo do projeto deve alcançar as seguintes atividades.
- Integração contínua
- Deploy automatizado
- Implantação de ambiente virtual de desenvolvimento
Definições, Acrônimos e Abreviações
[editar | editar código-fonte]Papéis e Responsabilidades
[editar | editar código-fonte]Termo | Significado |
---|---|
EnTurma | É o software abordado nesta página, serve para apontar a qualidade do ensino fundamental no Brasil utilizando dados do IDEB. |
IDEB | Índice de desenvolvimento da educação básica. |
Baseline | É um conceito de GCS que nos ajuda a controlar as mudanças, sem impedir seriamente as mudanças justificáveis. |
GCS | Gerência de Configuração de Software |
Build | Versão compilada do software, geralmente uma versão estável. |
Integração Contínua | É a automatização de builds, testes e outras atividades mais que possam ser automatizadas a fim de garantir a qualidade do software. |
MDS | Métodos de Desenvolvimento de Software, matéria do 5º semestre do curso de Engenharia de Software da Faculdade do Gama - UnB. |
GPP | Gerência de Portifólio e Projeto, matéria do 7º semestre do curso de Engenharia de Software da Faculdade do Gama - UnB. |
Papel | Responsabilidade | Responsável |
---|---|---|
Gestor de configuração do projeto | Monitorar os itens de configuração | Jônnatas Lennon |
Gestor de configuração de software | Aprova e gerencia as atividades de GCS | Daniel |
Ferramentas, Ambiente e Infra-estrutura
[editar | editar código-fonte]Ferramenta | Descrição | Disponível em |
---|---|---|
Github | Forge free de aplicações que utilizam do sistema de versionamento git. | https://github.com |
Vagrant | Ferramenta para a criação de ambientes virtuais. | https://www.vagrantup.com |
VirtualBox | Ferramenta para emulação de sistemas operacionais. | |
Puppet | Ferramenta utilizada para a criação de "receitas" que servem para automatizar as mais diversas atividades do sistema. | https://puppet.com/ |
Travis CI | Ferramenta de integração contínua, pode ser utilizada somente junto ao Github. | https://travis-ci.org |
Heroku | Hospedagem | https://obscure-plains-90452.herokuapp.com/ |
Travis e Heroku | Deploy Automatizado | https://dashboard.heroku.com/ |
Cronograma
[editar | editar código-fonte]Período | Atividade | Status | |
---|---|---|---|
20 - 27 de Abril de 2016 | Desenvolvimento do plano de Gerência de Configuração | Feito | |
28 de Abril a 11 de Maio de 2016 | Estudo sobre as ferramentas utilizadas | Feito | |
11 - 22 de Maio de 2016 | Implantação do Vagrant | Feito | |
23 de Maio a 01 de Junho de 2016 | Melhora da integração contínua com o Travis | Feito | |
01 - 10 de Junho de 2016 | Deploy automatizado | Feito | |
11 - 21 de Junho de 2016 | Implantação do Puppet | Feito | |
22 de Junho de 2016 | Entrega do projeto e apresentação final | A fazer |
Desenvolvimento do Projeto
[editar | editar código-fonte]O projeto já continha um sistema de Integração contínua com o Travis Básico, o qual é bem simples e pode ser facilmente encontrado na internet. Para criá-lo são necessários somente três passos. Toda a documentação do Travis CI pode ser obtida neste link https://docs.travis-ci.com/
Travis
[editar | editar código-fonte]O travis atualizado pode ser encontrado neste aqui. https://travis-ci.org/jonnatas/GCS
1 - Realizar o cadastro no site do Travis e sincronizar os projetos, o Travis automaticamente localiza todos os projetos com ascesso de administrador e possibilita a opção sincronização com o mesmo;
2 - Adicionar o arquivo .travis.yml no diretório rais do projeto;
https://github.com/jonnatas/GCS/blob/dev/.travis.yml
language: ruby
rvm:
- 2.2.0
before_script: gem install rspec rspec-rails simplecov
script:
- rake db:migrate RAILS_ENV=test
- bundle exec rspec spec
after_success:
- GITHUB_SECRET_TOKEN="eCYMjHocnmgJhIpy2epD54MvzgKQRXrNnlBwgmo7mEljIvZyykNX7Van0V50LlEElK9HillzCJo9YNa/5dgSdoHJPrLFZqxXFVMrRX978HSUJHqOmKBd464uUQVIvsoDwyR9Aq6KahJeWJESlI+ymhXinrb1tmxb/juf5rUQkf0f6edC+YeymnI9tHdzA0eEWqiHMVp03aoNPT1dGOQ7AqRo1WSWRTd1ZGzjYC0EGWidmKaKdWK7dkKBvMv3IW7bUlAgA+RH/vV9YJG94pftRE24ffEfLpU7JaWgE63uev8Y7iBcU8b7srId1KLV/KqpGCTFM9SY7rs3oMZZ7fwU+eoQ/5odIB7IxpcI1O4Wt2IXvNNCg0q/6DqrCW5k91yWbf+M9JY74yTaftdqKEGAsSM1X8dTn1orL75Xfpms93nBRbLTX3ydAo6tfRCP9FbcSIsHeDRXxX+WaUY3l2KHI03Ii2k5oIr7Rm+dmZF8Qxo3FIU+jg6p28YWrfRODMg+Qsq4HkU6MiqK7bC1Jz9VPvuIkLPcXpxS+imYRg//1Dl01CCmaha4KipXMsD9cE7iVtARM3gKi55bfMbDL/jj9yTNDbt6flkpGnuxckM+YpMITAp00yqT7wFwdpWPn/1uGkoOaz+iQ/6HVVLg6zv8yZ4MmOwl4tMwxc8pRbVBLfs=" BRANCHES_TO_MERGE_REGEX='' BRANCH_TO_MERGE_INTO=dev GITHUB_REPO=jonnatas/GCS script/travis-automerge.sh
notifications:
email:
recipients:
- jonatas_lenon@hotmail.com.br
- danieelteles@gamil.com
deploy:
provider: heroku
app: obscure-plains-90452
api_key:
secure: nhpkyGyANKUYae0ncd/k37pjyGaz3eYDcGcFymQe6KVPSL04GTrzB6FsdbTi4rKxK6Q30JdbvM6Avf9nBl24SfSPhPgaX0+Isd7g2nMTPaZkbTldML8wLIBSj1xDz4eq841C4/I7CnZHlsvdGqgLSQyql5O6Jb/ZzCxrfIGS2gBSPayBMJ06x7FGeyp6hG1DpCk0Pu7TAJPZv/DM2C8PmaSHy6a8+Tsu8M3FdJymxMgFN2LUgi1ysr9IUiFoWejMYhOaoRaCBDXlnTtZ38Ic5IkfPYINpbNpvqcqkXkte7FB6LJ3ojeA8eakk6CY9/P3GtSf1hCqE+TNFqK1kCCibgBzm7pwIsUprUHPKv89nJrnb+XKS6neMk58UXyW37/hjwMwvfqeMTBgMfPkvbYnURpnj7Y3lEKkXiaElJQySviopmMqJQxLRyI7XKjYWaOkgij1n4gNJweS9kFroKcemXPs6vQ5me7EKZtUFBW5fNfvcBOuqP6Xm67W6Zo6XpbWRnqbRsMq7/rkAriT0IDAWjK4azN5RuLntGQgn5EnJH5DtDeBcRWTB1yT7dCGipKProiibDg6/lp3nkzECNQVkghIDRoFctIEj6UlqJBmEUX0Zq5ThAdz5JB7q6gpB6jy+ls3cOiZjXX+W0WneOETVcB7dudKiOnGovCpvsv3/+w=
on:
branch: dev
Status API Training Shop Blog About
Para ter certeza que o arquivo .travis.yml esta correto é indicado testar primeiramente neste site http://lint.travis-ci.org.
3 - Após adicionar o arquivo .travis.yml deve-se dar push na master e caso o arquivo esteja correto o Build é iniciado automaticamente.
Heroku
[editar | editar código-fonte]Para realizar a implantação do software optou-se pela utilização do heroku, pelo fato de ser gratuito.
- Primeiramente criou-se uma conta free https://signup.heroku.com/dc
- Localmente execultou-se o login
heroku login
- Clonou-se o projeto
git clone https://github.com/MDS-GPP-EDUCACAO/EnTurma.git cd MDS-GPP-EDUCACAO/EnTurma
- Realizou-se o push
git push heroku master
- Apos é so abrir o app.
- heroku open
Deploy automatizado com o Travis e o Heroku
[editar | editar código-fonte]O travis já conta com um suporte ao heroku para execução de deploy automatizado. A documentação referente ao deploy automatizado pelo heroku pode ser encontrada no site https://docs.travis-ci.com/user/deployment/heroku/.
A secção de deploy do travis ficou com a seguinte configuração.
deploy:
provider: heroku
app: obscure-plains-90452
api_key:
secure: nhpkyGyANKUYae0ncd/k37pjyGaz3eYDcGcFymQe6KVPSL04GTrzB6FsdbTi4rKxK6Q30JdbvM6Avf9nBl24SfSPhPgaX0+Isd7g2nMTPaZkbTldML8wLIBSj1xDz4eq841C4/I7CnZHlsvdGqgLSQyql5O6Jb/ZzCxrfIGS2gBSPayBMJ06x7FGeyp6hG1DpCk0Pu7TAJPZv/DM2C8PmaSHy6a8+Tsu8M3FdJymxMgFN2LUgi1ysr9IUiFoWejMYhOaoRaCBDXlnTtZ38Ic5IkfPYINpbNpvqcqkXkte7FB6LJ3ojeA8eakk6CY9/P3GtSf1hCqE+TNFqK1kCCibgBzm7pwIsUprUHPKv89nJrnb+XKS6neMk58UXyW37/hjwMwvfqeMTBgMfPkvbYnURpnj7Y3lEKkXiaElJQySviopmMqJQxLRyI7XKjYWaOkgij1n4gNJweS9kFroKcemXPs6vQ5me7EKZtUFBW5fNfvcBOuqP6Xm67W6Zo6XpbWRnqbRsMq7/rkAriT0IDAWjK4azN5RuLntGQgn5EnJH5DtDeBcRWTB1yT7dCGipKProiibDg6/lp3nkzECNQVkghIDRoFctIEj6UlqJBmEUX0Zq5ThAdz5JB7q6gpB6jy+ls3cOiZjXX+W0WneOETVcB7dudKiOnGovCpvsv3/+w=
on:
branch: dev
- Na primeira linha tem-se o provider, configurado como heroku.
- Na linha dois tem-se o nome do app, no caso deixou-se o nome padrão, porém é possível mula-lo através do heroku.
- as linhas 4 e 5 são dedicadas a chave de segurança do Git, para gerá-la é necessário rodar o seguinte comando.
travis encrypt $(heroku auth:token) --add deploy.api_key
- As linhas 6 e 7 definem qual a branch, que acontecerá o deploy, caso esteja em branco a branch padrão é a master.
- Para a realização do deploy na branch correta executou-se um script parra realizar o merge automático, após um buil bem sucedido. Assim na condição de sucesso tem-se os seguintes passos.
after_success: -GITHUB_SECRET_TOKEN=" " BRANCHES_TO_MERGE_REGEX='' BRANCH_TO_MERGE_INTO=dev GITHUB_REPO=jonnatas/GCS script/travis-automerge.sh
- Para gerar o GITHUB_SECRET_TOKEN, executa-se os seguintes passos:
- Ascessar a página de usuário no GitHub e criar um token do tipo "public_repo". https://github.com/settings/tokens/new
- pronto o token já esta criado, agora é so copiar e colar no travis.
- Depois é so configurar a branch desejada e nome do repositório.
- O arquivo script/travis-automerge.sh pode ser encontrado neste link. https://github.com/jonnatas/GCS/blob/dev/script/travis-automerge.sh e o .travis.yml neste https://github.com/jonnatas/GCS/blob/dev/.travis.yml.
#!/bin/bash -e : "${BRANCHES_TO_MERGE_REGEX?}" "${BRANCH_TO_MERGE_INTO?}" : "${GITHUB_SECRET_TOKEN?}" "${GITHUB_REPO?}" export GIT_COMMITTER_EMAIL='travis@travis' export GIT_COMMITTER_NAME='Travis CI' if ! grep -q "$BRANCHES_TO_MERGE_REGEX" <<< "$TRAVIS_BRANCH"; then printf "Current branch %s doesn't match regex %s, exiting\\n" \ "$TRAVIS_BRANCH" "$BRANCHES_TO_MERGE_REGEX" >&2 exit 0 fi # Since Travis does a partial checkout, we need to get the whole thing repo_temp=$(mktemp -d) git clone "https://github.com/$GITHUB_REPO" "$repo_temp" # shellcheck disable=SC2164 cd "$repo_temp" printf 'Checking out %s\n' "$BRANCH_TO_MERGE_INTO" >&2 git checkout "$BRANCH_TO_MERGE_INTO" printf 'git branch ' >&2 git branch printf 'Merging %s\n' "$TRAVIS_COMMIT" >&2 git merge "$TRAVIS_COMMIT" printf 'Pushing to %s\n' "$GITHUB_REPO" >&2 push_uri="https://$GITHUB_SECRET_TOKEN@github.com/$GITHUB_REPO" # Redirect to /dev/null to avoid secret leakage git push "$push_uri" "$BRANCH_TO_MERGE_INTO" >/dev/null 2>&1 git push "$push_uri" :"$TRAVIS_BRANCH" >/dev/null 2>&1
Puppet
[editar | editar código-fonte]Crie os seguintes diretórios na pasta puppet
- files
- manifests
- modules
Criação do puppet manifest : gcs_manifests.pp.
group { 'puppet': ensure => present }
Exec { path => [ '/bin/', '/sbin/', '/usr/bin/', '/usr/sbin/'] }
File { owner => 0, group => 0, mode => 0644 }
class {'apt':
always_apt_update => true,
}
package { [
'build-essential',
'vim',
'curl',
'git-core'
]:
ensure => 'installed',
}
Instalação
[editar | editar código-fonte]Vagrant
[editar | editar código-fonte]O Vagrant atualizado pode ser encontrado aqui: https://github.com/danielteles/GCS2016.1
Foi criada uma box para a melhor distribuição do ambiente, podendo ela ser encontrada nos seguintes links:
1. Github
2. EnTurmaBox
A box foi criada em cima de uma outra box que pode ser encontrada no seguinte link: trusty64
Para ter acesso ao ambiente desenvolvimento você deve executar os seguintes comandos:
- vagrant init danielteles/EnTurma_GCS
- vagrant up --provider virtualbox
Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.box_url = "https://atlas.hashicorp.com/ubuntu/boxes/trusty64"
config.vm.network :private_network, ip: "192.168.54.10"
#Setting up puppet
config.vm.provision :puppet do |puppet|
# Manifests folder
puppet.manifests_path = "manifests"
# Manifest file that will be called in the beginning
puppet.manifest_file = "gcs_manifests.pp"
# Modules folder
puppet.module_path = "./modules"
# Better logging for puppet
puppet.options = "--verbose"
end
end
Milestones
[editar | editar código-fonte]Marcos definidos:
- 27/04: Entrega do Plano de GCS
- 01/06 a 08/04: Apresentação do andamento dos Projetos
- 22/06 e 29/06: Apresentação Final do Projeto
Referências
[editar | editar código-fonte]https://en.wikipedia.org/wiki/Software_configuration_management