1. Gerência de Configuração de Software
  2. EnTurma

Alunos

editar
  1. Daniel Teles
  2. Jônnatas Lennon

Introdução

editar

Visão Geral

editar

Propósito

editar

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

Inicialmente o escopo do projeto deve alcançar as seguintes atividades.

  1. Integração contínua
  2. Deploy automatizado
  3. Implantação de ambiente virtual de desenvolvimento

Definições, Acrônimos e Abreviações

editar

Papéis e Responsabilidades

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

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

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

Para realizar a implantação do software optou-se pela utilização do heroku, pelo fato de ser gratuito.

  1. Primeiramente criou-se uma conta free https://signup.heroku.com/dc
  2. Localmente execultou-se o login
    heroku login
    
  3. Clonou-se o projeto
    git clone https://github.com/MDS-GPP-EDUCACAO/EnTurma.git
    cd MDS-GPP-EDUCACAO/EnTurma
    
  4. Realizou-se o push
     git push heroku master
  5. Apos é so abrir o app.
  6. heroku open

Deploy automatizado com o Travis e o Heroku

editar

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
  1. Na primeira linha tem-se o provider, configurado como heroku.
  2. 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.
  3. 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
  4. As linhas 6 e 7 definem qual a branch, que acontecerá o deploy, caso esteja em branco a branch padrão é a master.
  5. 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
  6. Para gerar o GITHUB_SECRET_TOKEN, executa-se os seguintes passos:
    1. Ascessar a página de usuário no GitHub e criar um token do tipo  "public_repo". https://github.com/settings/tokens/new
    2. pronto o token já esta criado, agora é so copiar e colar no travis.
  7. Depois é so configurar a branch desejada e nome do repositório.
  8. 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.
  9. #!/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

Crie os seguintes diretórios na pasta puppet

  1. files
  2. manifests
  3. 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

Vagrant

editar

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:

  1. vagrant init danielteles/EnTurma_GCS
  2. 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

Marcos definidos:

  1. 27/04: Entrega do Plano de GCS
  2. 01/06 a 08/04: Apresentação do andamento dos Projetos
  3. 22/06 e 29/06: Apresentação Final do Projeto

Referências

editar

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