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:

  1. Build - Esse projeto será responsável por:
    1. Baixar o projeto do repositório;
    2. Baixa as dependências;
    3. Cria o banco de dados;
    4. Executa as migrações.
  2. Testes - Executa os testes unitários;
    1. Gera o relatório com Rspec;
    2. Lê o relatório com JUnit plugin.
  3. QA (quality assurance) - é o job responsável por executar estatísticas sobre a qualidade do código desenvolvido.
    1. Gera relatório com o Rubocop e publica com checkstyle;
    2. Gera relatório com Brakeman e publica com brakeman plugin;
    3. Gera relatório com rubycritic e publica com HTML plublisher.
  4. Deploy - publica o projeto em um ambiente de homologação para que o usuário possa testar suas funcionalidades.
    1. Para a execução de um build anterior;
    2. Sobe o novo build.

Build

  1. Inicie um novo job do tipo freestyle, de um nome à ele;
  2. Em geral escolha o shared workspace;
  3. Em gerenciamento de código, escolha as configurações adequadas para seu projeto.
  4. Em ambiente de Build, marque a caixa Run the build in a RVM-managed environment, e escreva a versão do ruby que será utilizada no seu projeto.
  5. 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.
    bundle install
    rake db:create
    rake db:migrate
    
    Execute o projeto e perceba que ele irá baixar o projeto do seu repositório e salvar o build em /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

  1. Inicie um novo job do tipo freestyle, de um nome à ele;
  2. Em geral escolha o shared workspace;
  3. Em ambiente de Build, marque a caixa Run the build in a RVM-managed environment, e escreva a versão do ruby que será utilizada no seu projeto.
  4. Em Build iremos executar os comandos necessários para executar os testes unitários.
    rake ci:setup:rspec spec
    
  5. Adicione um passo pós-build para ler os relatórios gerados.
    test/reports/*.xml,spec/reports/*.xml
    

Quality Assurance

  1. Inicie um novo job do tipo freestyle, de um nome à ele;
  2. Em geral escolha o shared workspace;
  3. Em ambiente de Build, marque a caixa Run the build in a RVM-managed environment, e escreva a versão do ruby que será utilizada no seu projeto.
  4. 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
    
  5. Precisamos então adicionar 3 passos pós-building para utilizar os plugins que irão reconhecer relatórios gerados.
    1. CheckStyle.
    2. Brakeman.
    3. RubyCritic.

Deploy

  1. Inicie um novo job do tipo freestyle, de um nome à ele;
  2. Em geral escolha o shared workspace;
  3. Em ambiente de Build, marque a caixa Run the build in a RVM-managed environment, e escreva a versão do ruby que será utilizada no seu projeto.
  4. Em build execute 2 comandos em shell:
    rm /var/lib/jenkins/sharedspace/PROJETO/tmp/pids/server.pid &
    BUILD_ID=dontKillMe bundle exec rails s -p PORTA -d
    
    TROQUE PROJETO E PORTA, PELA PASTA DO SEU PROJETO E O NUMERO DE PORTA QUE VOCÊ ESTÁ RODANDO SUA APLICAÇÃO.

results matching ""

    No results matching ""