Mapas Observatório LGBT
Introdução
[editar | editar código-fonte]Visão Geral
[editar | editar código-fonte]O Observatório da Política Nacional de Saúde Integral LGBT (Observatório da Saúde LGBT) tem por finalidade gerar informações e conhecimento sobre as principais características que constituem a realidade da Política Nacional de Saúde Integral da População LGBT no âmbito do SUS, constituindo um banco de dados que é ampliado e qualificado gradativamente.[1]
O mapa das redes foi desenvolvido pela equipe do Observatório da Saúde LGBT no intuito de mapear as redes de ativismo, ação, pesquisa, publicação, acesso e acolhimento da população LGBT no serviço de saúde. A metodologia proposta é de que a rede seja auto referenciada, e que as pessoas e instituições apoiem a sua construção com questões referentes aos diversos temas pertinentes a garantia e a expansão de direitos. [2]
Propósito
[editar | editar código-fonte]O Plano de Gerenciamento de Configuração de Software tem como finalidade descrever as atividades que serão executadas durante o projeto no que tange o controle de configuração e mudanças do Mapa das Redes do Observatório da Saúde LGBT. O plano apresenta o cronograma de atividades, as responsabilidades dos membros do projeto e os recursos necessários para a execução do mesmo.
Escopo
[editar | editar código-fonte]O projeto foi desenvolvido em Ruby on Rails e, atualmente, está disponível em um repositório no GitHub com licença GPL3. As melhorias propostas para serem desenvolvidas no projeto são:
- Integração Contínua com GitLab CI
- Ambiente de Desenvolvimento com Vagrant
- Empacotamento .deb
Repositório Git
[editar | editar código-fonte]Gerência de Configuração de Software
[editar | editar código-fonte]Organização e Responsabilidades
[editar | editar código-fonte]Papel | Responsabilidade | Responsável |
---|---|---|
Gestor de configuração do projeto | Acompanha as alterações dos itens de configuração. | Alex Alves, Vanessa Soares |
Gestor de ferramentas de gerência de configuração de software | Mantém a infraestrutura necessária para a gerência de configuração. | Alex Alves, Vanessa Soares |
Gestor de configuração de software | Aprova e gerencia as atividades. | Alex Alves, Vanessa Soares |
Auditor de configuração de software | Realiza as auditorias. | Alex Alves, Vanessa Soares |
Desenvolvedores | Desenvolvem os itens de configuração que serão gerenciados. | Alex Alves, Vanessa Soares |
Ferramentas, Ambiente e Infraestrutura
[editar | editar código-fonte]Ferramenta | Função |
---|---|
Vagrant | Criar e configurar ambientes de desenvolvimento leves, reprodutíveis e portateis |
VirtualBox | Criação de máquinas virtuais |
Gitlab CI | Serviço de integração contínua |
Cronograma
[editar | editar código-fonte]Data | Atividade |
---|---|
30/09 | Planejamento do Projeto |
04/10 | Pesquisa e Estudo Integração Contínua |
11/10 | Configurar Integração Contínua |
14/10 | Pesquisa e estudo Vangrant |
21/10 | Configurar Ambiente de Desenvolvimento (Vagrant) |
31/10 | Andamento do Projeto |
30/10 | Pesquisa e estudo Empacotamento .deb |
16/11 | Empacotamento .deb |
21/11 | Apresentação Final |
Relatório do Projeto
[editar | editar código-fonte]Integração Contínua
[editar | editar código-fonte]Para implementação da integração contínua optou-se pela adoção do Gitlab CI, serviço de integração contínua oferecido pelo próprio Gitlab, gerenciador de repositório onde o código do proejto está hospedado.
A configuração do serviço é simples e exige apenas a adição do arquivo .gitlab-ci.yml
no diretório raiz do repositório então cada solicitação de merge ou push dispara seu pipeline CI. O arquivo .gitlab-ci.yml
informa ao GitLab runner o que fazer. Por padrão, ele executa um pipeline com três etapas: create, test e deploy. Você não precisa usar todos os três estágios já que as etapas não implementadas são ignoradas [3].
Para o este projeto o arquivo foi configurao .gitlab-ci.yml
da seguinte forma:
image: "ruby:2.3"
services:
- postgres:latest
before_script:
- gem install bundler --no-ri --no-rdoc
- bundle install -j $(nproc) --path vendor
- cp config/database.gitlab-ci.yml config/database.yml
rspec:
script:
- bundle exec rake db:setup RAILS_ENV=test
- bundle exec rspec
Vagrant
[editar | editar código-fonte]Vagrant é uma ferramenta para construção de ambientes de desenvolvimento completos, com um fluxo de trabalho de fácil utilização e foco na automatização o Vagrant reduz o tempo de configuração do ambiente de desenvolvimento e resolve problemas de diferença de ambientes e máquinas para os desenvolvedores.
A instalação, configuração e o uso do Vagrant são simples.
Para instalação do Vagrant no Ubuntu, basta executar o comando:
$ sudo apt-get install vagrant
Após a instalação da ferramenta, deve-se navegar até o diretório do projeto e executar o comando:
$ vagrant init
Esse comando irá inicializar o Vagrant para o projeto, criando o arquivo de configuração Vagrantfile. É nesse arquivo onde se define detalhes da configuração da máquina virtual que será criada. O Vagrantfile criado para o projeto ficou com a seguinte estrutura:
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.network "forwarded_port", guest: 3000, host: 3000
config.vm.provider "virtualbox" do |vb|
vb.memory = "1024"
end
config.vm.provision :shell, path: "install-rvm.sh", args: "stable", privileged: false
config.vm.provision :shell, path: "install-ruby.sh", args: "2.3.1", privileged: false
config.vm.provision :shell, path: "install-ruby.sh", args: "2.3.1 rails haml", privileged: false
config.vm.provision :shell, path: "install-postgresql.sh", args: "9.5.4", privileged: false
config.vm.provision "shell", inline: <<-SHELL, privileged: false
sudo apt-get update
sudo apt-get install -y nodejs nodejs-legacy postgresql-common postgresql-9.5
sudo apt-get install -y git curl automake build-essential bison
sudo apt-get install -y libpq-dev libssl-dev libtool libcurl4-openssl-dev
sudo apt-get install -y libyaml-dev libreadline-dev libxml2-dev libxslt1-dev
sudo apt-get install -y libffi-dev libffi-dev libgdbm-dev libncurses5-dev
sudo apt-get install -y libsqlite3-dev sqlite3 zlib1g-dev
sudo apt-get install -y python-software-properties
rvm default ruby-2.3.1
gem install bundler
gem install nokogiri -v '1.6.8'
gem install rails
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get update
cd /vagrant/
bundle install
SHELL
end
Nesse arquivo estão sendo feitas as seguintes definições:
- Linha 3 define que o sistema a ser instalado na máquina virtual é o Ubuntu (Trusty) de 64 bits. O próprio Vagrant se encarrega de baixar a imagem e instalar o sistema definido.
- Linha 16 define o tipo de provisionamento. Neste caso o provisionamento irá utilizar o SHELL.
- Nas linhas 11 - 14 são os arquivos responsáveis pelos comando shell de instalação do ruby, rvm e do postgresql. Os scripts são apresentados em seguida
install-rvm.sh
#!/usr/bin/env bash
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
curl -sSL https://get.rvm.io | bash -s $1
install-ruby.sh
#!/usr/bin/env bash
source $HOME/.rvm/scripts/rvm
rvm use --default --install $1
shift
if (( $# ))
then gem install $@
fi
rvm cleanup all
install-postgresql.sh
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -
Após definias essas configurações, o Vagrant está pronto para ser executado. Ao rodar o comando:
$ vagrant up
Esse comando irá criar toda a máquina virtual. Caso seja sua primeira execução, ele irá, inclusive, baixar a imagem do sistema. E também irá rodar o provisionamento, deixando o sistema totalmente configurado. Após a finalização do Vagrant Up, a máquina virtual já está inicializada, então deve-se rodar o comando:
$ vagrant ssh
Esse comando irá iniciar o shell da máquina virtual, e todos os comandos executados a partir desse momento serão feitos diretamente na máquina virtual.
Para o projeto, a pasta /vagrant da máquina virtual é uma pasta compartilhada com o sistema original, no caso, é a pasta raiz do projeto.
Empacotamento .deb
[editar | editar código-fonte]O empacotamento .deb e a assinatura de pacote são atividades simples de serem executadas. Utilizando os pacotes rng-tools, dh-make, build-essential e devscripts.
Antes de começar o processo do empacotamento, foi criada uma chave para assinatura do pacote utilizando o rng-tools:
$ sudo apt-get install rng-tools
Após a instalação do programa, deve ser executado o comando:
$ sudo rngd -r /dev/urandom
E então, para gerar a chave:
$ gpg --gen-key
Nesse passo serão solicitadas ações para criação e configuração da chave.
Após a chave criada, deve-se começar o processo de empacotamento .deb.
O primeiro passo é criar um tarball da pasta do projeto, com o nome formatado no padrão <NOME DO PROJETO>_<VERSÃO>.orig.tar.gz. No momento da criação do pacote, o dh-make irá buscar por esse padrão de nomeclatura na pasta superior à pasta do projeto:
$ tar zcf mapa-observatorio-lgbt_1.0.orig.tar.gz mapa-observatorio-lgbt/
Então, deve-se entrar dentro da pasta do projeto e executar:
$ dh-make
Esse comando irá criar a pasta debian dentro do diretório do projeto. Neste passo, todos os arquivos dentro dessa pasta com a extensão .ex podem ser apagados pois são apenas de exemplo.
$ rm debian/*.{ex,EX}
O arquivo debian/control deve ser editado para preenchimento dos dados do projeto, lembrando de preencher as dependências do mesmo. E o arquivo debian/changelog deve ser preenchido com o nome e email exatamente iguais aos configurados no momento da criação da chave de assinatura:
mapa-observatorio-lgbt (1.0-1) unstable; urgency=medium
* Initial release
-- Alex Cortes Alves <alex.co.alves@gmail.com> Thu, 24 Nov 2016 10:49:34 -0200
Antes da criação do pacote .deb, deve certificar que os pacotes de dependência do projeto estão instalados:
$ sudo apt install -y libmagick++-dev libsqlite3-dev libcurl3 libcurl3-gnutls libcurl4-openssl-dev
E, para finalizar, basta executar o seguinte comando, que irá ler os arquivos de configuração e gerar o .deb:
$ debuild