Documento criado por Fillipe Feitosa e Luciano Almeida

Introdução editar

Propósito editar

Esse documento descreverá como será feita a Gerência da Configuração e Mudança do projeto Sistema de Atendimento a Usuários Externos (SAUE) do Interlegis. Atualmente no Interlegis existe um software de criação de tickets de suporte à informação, mas este não está sendo mantido e está ficando obsoleto, pois são pouco usados. O Sistema de Atendimento a Usuário Externo propõe substituir algumas funcionalidades mais simples e necessárias, mantendo uma interface amigável para usuários leigos e substituindo esse sistema antigo.

Escopo editar

O plano descrito neste documento será aplicado no SAUE e tem como objetivo elaborar uma proposta de implementação e utilização da integração contínua para a equipe técnica responsável, que atualmente praticamente não existe. A necessidade de criação de um ambiente de desenvolvimento também se faz necessária para minimizar problemas de dependências, testes e pequenos bugs de ambiente.

Atualmente o projeto utiliza o git como controle de versão e está hospedado no site github.com.

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

Termo Significado
SAUE Sistema de Atendimento a Usuários Externos
Build Versão Estável de Software
Commit Contribuição atômica num projeto de software

Links importantes editar

Link do projeto - https://github.com/interlegis/atendimento

Gerenciamento de Configuração de Software editar

Objetivos editar

Com o intuito de facilitar a vida e o trabalho da equipe técnica responsável pelo SAUE, a equipe deste projeto estabeleceu três atividades principais como escopo para a disciplina de Gerência de Configuração de Software:

Integração Contínua - TravisCI editar

A primeira abordagem do grupo será implementar uma rotina de integração contínua para a criação de builds automatizadas. O objetivo principal desta atividade é reduzir o risco de disponibilizar uma versão de software com problemas de integração para o usuário final. Em termos técnicos, cada commit será verificado quando à consistência de suas dependências, bibliotecas e possivelmente testes.

Gerência de Configuração do Ambiente de Desenvolvimento - Vagrant/Puppet editar

Para diminuir o impacto dos problemas de configuração nas máquinas para a equipe técnica, tanto de novos quanto de antigos membros, será criado um ambiente de gerência de configuração do ambiente de desenvolvimento e do sistema operacional, com o objetivo de consolidar as ferramentas de trabalho e estabelecer um processo de desenvolvimento mais estável.

Elaboração de bateria de testes - Pytest editar

Para a ultima abordagem, o grupo pretende elaborar uma pequena rotina de testes usando a ferramenta pytest, para incluir nos testes de integração realizados pela ferramenta TravisCI. A aplicação dessa proposta dependerá da viabilidade de sua aplicação.

Papeis e Responsabilidades editar

Responsáveis pelo Plano de Gerência e Configuração e sua aplicação:

  • Fillipe Feitosa - Configuração do ambiente de desenvolvimento.
  • Luciano Almeida - Configuração dos serviços de integração contínua.

Ferramentas e Ambiente editar

Ferramenta Descrição
Puppet Ferramenta para gerenciar a configuração de sistemas operacionais e dependências
Vagrant Ferramenta para configurar ambiente de trabalho virtual
Travis CI Ferramenta para integração contínua
pytest Ferramenta criação de testes em linguagem python

Configuração Travis CI editar

Para começar a configurar o Travis CI, o arquivo .travis.yml foi criado na raíz do aplicativo. Nele foram definidos inicialmente: Linguagem do software e sua versão; sudo obrigatório para instalação de dependências e demais operações que necessitam de super usuário; e o processo do banco de dados, juntamente com sua versão.

language: python 
sudo: required

python:
  - "3.4.3"

services:
  - postgresql

addons:
  postgresql: "9.3"

A instalação das dependências vem em seguida:

install:
  - sudo apt-get install git nginx python3-dev libpq-dev graphviz-dev graphviz pkg-config python-psycopg2 libz-dev libxft-dev libjpeg62 libjpeg-dev libfreetype6-dev python-dev python-psycopg2 nodejs npm
  - sudo ln -s /usr/bin/node
  - pip install -r requirements/dev-requirements.txt
  - pip install --upgrade setuptools

Para a execução do banco de dados, foi necessário utilizar o seguinte código que é executado antes da migração e dos scripts de teste e de checagem de qualidade de código:

before_script:
  - sudo /etc/init.d/postgresql stop
  - sudo cp /etc/postgresql/9.2/main/pg_hba.conf ./
  - sudo apt-get remove postgresql postgresql-9.2 -qq --purge
  - source /etc/lsb-release
  - echo "deb http://apt.postgresql.org/pub/repos/apt/ $DISTRIB_CODENAME-pgdg main" > pgdg.list
  - sudo mv pgdg.list /etc/apt/sources.list.d/
  - wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add -
  - sudo apt-get update
  - sudo apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confnew" install postgresql-9.3 postgresql-contrib-9.3 -qq
  - sudo /etc/init.d/postgresql stop
  - sudo cp ./pg_hba.conf /etc/postgresql/9.3/main
  - sudo /etc/init.d/postgresql start
  - npm install -g bower
  - cp .env_dev .env
  - sed -i -e 's/getpass.getuser()/"postgres"/g' atendimento/settings.py
  - psql -c 'create database atendimento;' -U postgres

O código acima foi retirado do site: https://dockyard.com/blog/ruby/2013/03/29/running-postgresql-9-2-on-travis-ci

Em seguida, os scripts de migração e de teste são executados.

script:
  - ./manage.py migrate
  - ./manage.py bower install
  - ./test_and_check_qa.sh

Configuração Vagrant/Puppet editar

Vagrant editar

Para instalar e configurar o Vagrant siga os passos a seguir.

  • Cria uma pasta puppet
  • Garanta que você possui o dpkg e o virtualbox:
sudo apt-get install dpkg-dev virtualbox-dkms
  • Faça o download da última versão do Vagrant no site oficial
sudo dpkg -i vagrant_<versão>.deb
  • Para criar snapshots com o vagrant:
    • vagrant plugin install vagrant-vbox-snapshot
  • Crie uma pasta chamada puppet
  • Crie um arquivo nessa pasta Vagrantfile
  • Adicione esse trecho de código no arquivo:
Vagrant::Config.run do |config|
    config.vm.box = "precise32"
    config.vm.box_url = "http://files.vagrantup.com/precise32.box"
    config.vm.forward_port 80, 8080
end
  • Para executar o Vagrant:
vagrant up

Puppet editar

  • Crie as seguintes pastas na pasta puppet do HOST
    • files
    • manifests
    • modules

Cronograma editar

Data Atividade
18/06 Início da Elaboração do Projeto - Plano de GCS
25/06 Definição da Abordagem, tencologias
08/06 Configuração das ferramentas
15/06 Finalização do Travis - CI - Vagrant/Puppet. Análise de Viabilidade de Testes
22/06 Finalização da proposta de testes, integração com TravisCI