Configuração no projeto
Antes de configurarmos os jobs no jenkins, precisamos configurar o projeto para rodar os testes que precisamos.
Rspec
No gemfile:
group :development, :test do
gem 'rspec-rails'
gem 'rspec-collection_matchers'
gem 'rspec'
gem 'ci_reporter_rspec'
bundle install
rails generate rspec:install
Isso irá gerar uma pasta chamada spec
, com os arquivos rails_helper.rb
e spec_helper
.
Para que os testes funcionem, em muitos projetos eles devem passar pelas soluções de autenticação, como o devise. Para isso é necessário editar o arquivo rails_helper.rb
como descrito em: https://github.com/plataformatec/devise#test-helpers.
RSpec.configure do |config|
# commentários...
# -----------------final do bloco ------------------
config.include Devise::TestHelpers, type: :controller
config.include Devise::TestHelpers, type: :view
end
E para a utilização dos matchers disponíveis em: https://github.com/rspec/rspec-collection_matchers. Precisamos adicionar um require no arquivo spec_helper.rb
:\
require 'rspec/collection_matchers'
Para a geração de relatórios, vamos adicionar uma task no Rakefile
:
require 'ci/reporter/rake/rspec'
task :rspec => 'ci:setup:rspec'
E executa o comando:
rake ci:setup:rspec spec
Brakeman
No Gemfile:
group :development, :test do
gem 'brakeman'
Execute o comando:
brakeman -o brakeman-output.tabs --no-progress --separate-models
Este comando irá gerar um relatório com avisos de quebra de regras de segurança na sua aplicação.
Rubocop
O Rubocop é responsável por criar relatórios de estilo de código.
Gemfile:
group :development, :test do
gem 'rubocop', require: false
gem 'rubocop-checkstyle_formatter', require: false
Para gerar os relatórios execute:
bundle exec rubocop \
--require rubocop/formatter/checkstyle_formatter \
--format RuboCop::Formatter::CheckstyleFormatter -o reports/xml/checkstyle-result.xml \
--format html -o reports/html/index.html || true
Este comando irá gerar os relatórios na pasta reports, com formato que o plugin checkstyle pode ler posteriormente.
Rubycritic
O rubycritic será responsável por classificar seu código. Ele encontra code smells, duplicações e ajuda a resolver tais situações.
Gemfile:
group :development, :test do
gem 'rubycritic', :require => false
Para a geração de relatórios execute:
rubycritic
Por padrão os relatórios serão salvos em tmp/rubycritic/
o html principal é o overview.html.
Gemfile final
Se vc quiser todas essas soluções disponíveis no seu projeto, o gemfile final conterá as seguintes gems:
group :development, :test do
gem 'rspec-rails'
gem 'rspec-collection_matchers'
gem 'rspec'
gem 'brakeman'
gem 'ci_reporter_rspec'
gem 'rubycritic', :require => false
gem 'rubocop', require: false
gem 'rubocop-checkstyle_formatter', require: false
Configuração no Jenkins
Neste capítulo será demonstrado como configurar os jobs para que o jenkins execute os comandos de geração de relatório e utilize plugins para leitura e apresentação dos relatórios para o usuário.
Para a criação do pipeline ruby on rails, primeiramente precisamos de alguns plugins para o jenkins.
Plugins
- Shared Workspace - para compartilhar um workspace entre varios jobs diferentes.
- Brakeman plugin - para a leitura de relatório da ferramenta brakeman.
- Checkstyle-plugin - para a leitura de relatório de estilo de código.
- HTML plublisher - para a leitura de relatórios do tipo html, para este projetos ele é utilizado para mostrar code smells e duplicações.
- Junit plugin - para leitura de relatórios de testes unitários do tipo Junit (neste caso gerados pelo rspec).
- RVM - ajuda a gerenciar as versões do ruby pelo Jenkins.
Jobs
O pipeline será dividido em vários jobs. O projeto seguirá sequêncialmente por cada um desses jobs, na seguinte sequência:
- Build - Esse projeto será responsável por:
- Baixar o projeto do repositório;
- Baixa as dependências;
- Cria o banco de dados;
- Executa as migrações.
- Testes - Executa os testes unitários;
- Gera o relatório com Rspec;
- Lê o relatório com JUnit plugin.
- QA (quality assurance) - é o job responsável por executar estatísticas sobre a qualidade do código desenvolvido.
- Gera relatório com o Rubocop e publica com checkstyle;
- Gera relatório com Brakeman e publica com brakeman plugin;
- Gera relatório com rubycritic e publica com HTML plublisher.
- Deploy - publica o projeto em um ambiente de homologação para que o usuário possa testar suas funcionalidades.
- Para a execução de um build anterior;
- Sobe o novo build.
Build
- Inicie um novo job do tipo freestyle, de um nome à ele;
- Em
geral
escolha o shared workspace; - Em
gerenciamento de código
, escolha as configurações adequadas para seu projeto. - Em
ambiente de Build
, marque a caixaRun the build in a RVM-managed environment
, e escreva a versão do ruby que será utilizada no seu projeto. - Em
Build
iremos executar os comandos necessários para baixar as dependências e as tasks de criação e construção das migrações.
Execute o projeto e perceba que ele irá baixar o projeto do seu repositório e salvar o build embundle install rake db:create rake db:migrate
/var/lib/jenkins/sharedspace/
. LEMBRE-SE DE CONFIGURAR O ACESSO AO REPOSITÓRIO E O SHARED WORKSPACE PRIMEIRO, COMO EXPLICADO NO CAPITULO SOBRE INSTALAÇÃO DO JENKINS.
Testes
- Inicie um novo job do tipo freestyle, de um nome à ele;
- Em
geral
escolha o shared workspace; - Em
ambiente de Build
, marque a caixaRun the build in a RVM-managed environment
, e escreva a versão do ruby que será utilizada no seu projeto. - Em
Build
iremos executar os comandos necessários para executar os testes unitários.rake ci:setup:rspec spec
- Adicione um passo pós-build para ler os relatórios gerados.
test/reports/*.xml,spec/reports/*.xml
Quality Assurance
- Inicie um novo job do tipo freestyle, de um nome à ele;
- Em
geral
escolha o shared workspace; - Em
ambiente de Build
, marque a caixaRun the build in a RVM-managed environment
, e escreva a versão do ruby que será utilizada no seu projeto. - Em
Build
iremos executar os comandos necessários para gerar os relatórios de qualidade de software.bundle exec rubocop \ --require rubocop/formatter/checkstyle_formatter \ --format RuboCop::Formatter::CheckstyleFormatter -o reports/xml/checkstyle-result.xml \ --format html -o reports/html/index.html || true rubycritic brakeman -o brakeman-output.tabs --no-progress --separate-models
- Precisamos então adicionar 3 passos pós-building para utilizar os plugins que irão reconhecer relatórios gerados.
- CheckStyle.
- Brakeman.
- RubyCritic.
- CheckStyle.
Deploy
- Inicie um novo job do tipo freestyle, de um nome à ele;
- Em
geral
escolha o shared workspace; - Em
ambiente de Build
, marque a caixaRun the build in a RVM-managed environment
, e escreva a versão do ruby que será utilizada no seu projeto. - Em
build
execute 2 comandos em shell:
TROQUE PROJETO E PORTA, PELA PASTA DO SEU PROJETO E O NUMERO DE PORTA QUE VOCÊ ESTÁ RODANDO SUA APLICAÇÃO.rm /var/lib/jenkins/sharedspace/PROJETO/tmp/pids/server.pid & BUILD_ID=dontKillMe bundle exec rails s -p PORTA -d