Por que eu devo ler este artigo:Este artigo ajudará a entender, na prática, como funciona o processo de análise estática de código em projetos gerenciados sob o modelo da integração contínua. Ao longo do texto, seremos apresentados aos passos necessários para, a partir de ferramentas e plataformas como Jenkins, Git, Maven e SonarQube, medir continuamente a qualidade de um projeto de software e avaliá-lo sob perspectivas fundamentais, tais como a do débito técnico.

Em artigos publicados nas edições 147 e 148 da Java Magazine, abordamos alguns dos conceitos chave em DevOps, tanto sob a perspectiva do Desenvolvimento quanto de Operações.

Nestas ocasiões, estudamos plataformas e tecnologias bastante populares, como Apache Maven, Jenkins, Eclipse e Redmine, resultando na configuração de um ambiente tal qual o ilustrado na Figura 1.

Neste texto, revisaremos muitos dos tópicos descritos nos artigos citados a fim de adicionarmos a esta cadeia um importante passo: a análise contínua de qualidade. Para isso, usaremos uma ferramenta muito popular, chamada SonarQube, que nos permitirá realizar medições apuradas e constantes de aspectos essenciais de um projeto de software, com destaque para um conceito denominado Débito Técnico.

Ao longo de todo o tutorial que se segue, usaremos maciçamente serviços oferecidos sob a chancela da ‘cloud computing’. Todas as ferramentas serão provisionadas por meio de soluções de PaaS e SaaS, tais como OpenShift e GitHub. A principal motivação para isto é ilustrar, principalmente, os inúmeros benefícios dos quais se pode usufruir ao se substituir o modelo de infraestrutura in-house, tais como: redução significativa de custos e uma considerável melhoria em indicadores como produtividade, eficiência, disponibilidade, escalabilidade e segurança.

Nosso estudo ao longo deste texto será iniciado pela configuração de um ambiente de integração contínua, estabelecendo um canal fluido de comunicação entre um repositório de código-fonte do projeto – hospedado em uma conta no GitHub – e um servidor Jenkins – criado e hospedado na plataforma OpenShift. O objetivo será garantir que, a cada submissão de código realizada por um desenvolvedor, seja disparado um processo de build no servidor de integração contínua, sem a necessidade de intervenção manual.

Figura 1. Estado inicial do projeto para este artigo.

A Integração Contínua de Software

Um processo de integração contínua pode ser entendido como um conjunto de medidas que, quando adotadas, permitem que um software evolua de forma consistente e controlada. Tais medidas são:

· Gestão automatizada do ciclo de vida do software;

· Controle de versão do código-fonte;

· Automação de testes;

· Automação do processo de build.

O principal benefício desta prática é poder avaliar constantemente o impacto promovido por modificações na estrutura lógica de um projeto, seja por introdução de conteúdo novo ou adaptações em unidades de código-fonte pré-existentes. A partir deste modelo, uma equipe de desenvolvimento tende a aumentar significativamente o seu poder de reação a eventuais problemas que possam emergir ao longo do processo criativo, como conflitos de versão, falhas na execução de testes unitários, dentre outros. No trato popular, integração contínua é uma técnica que incorpora, na prática, a velha máxima de que ‘é preferível a prevenção ao remédio’.

Para seguir os passos desta primeira fase do tutorial, é necessário que o leitor crie a sua própria conta na OpenShift. O procedimento de cadastro é bem simples, e a página da plataforma pode ser encontrada na seção Links, ao final do artigo.

OpenShift e a linha de comando

A OpenShift é uma plataforma que oferece uma excelente ferramenta web de administração, com referências diretas para as aplicações hospedadas e informações essenciais sobre a natureza e o estado das mesmas. Entretanto, operar sistemas a partir de interfaces visuais pode ser um trabalho pouco eficiente, se comparado à flexibilidade e rapidez que um terminal oferece.

Neste sentido, a RedHat disponibiliza um poderoso utilitário chamado rhc, que utilizaremos em todas as fases do tutorial apresentado neste artigo. O processo de instalação está muito bem documentado na página oficial da OpenShift, e o link para este material está registrado na seção Links. Acompanharemos, nesta seção, o passo a passo da instalação e configuração do utilitário no computador utilizado para desenvolver toda a parte prática do artigo (um MacBook modelo 2009, rodando MacOS Yosemite, na versão 10.10.5).

O rhc é desenvolvido em Ruby. Por isso, o primeiro requisito para conseguirmos executá-lo é garantir que o Ruby esteja instalado. De acordo com a documentação oficial, a versão mínima a ser respeitada é a 1.8.7. No MacBook, tanto o Ruby quanto outras linguagens já são suportadas nativamente, não havendo a necessidade de realizarmos este procedimento. Para verificar a versão atualmente instalada no computador, usamos o primeiro comando destacado na Listagem 1. Observe que, neste caso, já tínhamos à disposição o Ruby configurado na versão 2.0.0p481, absolutamente aderente ao requisito que apresentamos a pouco.

Listagem 1. Terminal – instalação da ferramenta rhc na máquina de desenvolvimento.


  Pedro-Brigattos-MacBook:devmedia_devops_series pedrobrigatto$ ruby -v
  ruby 2.0.0p481 (2014-05-08 revision 45883) [universal.x86_64-darwin14]
  Pedro-Brigattos-MacBook:devmedia_devops_series pedrobrigatto$ sudo gem install rhc
  Password:
  Fetching: net-ssh-2.9.2.gem (100%)
  Successfully installed net-ssh-2.9.2
  Fetching: net-scp-1.2.1.gem (100%)
  Successfully installed net-scp-1.2.1
  Fetching: net-ssh-gateway-1.2.0.gem (100%)
  Successfully installed net-ssh-gateway-1.2.0
  Fetching: net-ssh-multi-1.2.1.gem (100%)
  Successfully installed net-ssh-multi-1.2.1
  Fetching: archive-tar-minitar-0.5.2.gem (100%)
  Successfully installed archive-tar-minitar-0.5.2
  Fetching: highline-1.6.21.gem (100%)
  Successfully installed highline-1.6.21
  Fetching: commander-4.2.1.gem (100%)
  Successfully installed commander-4.2.1
  Fetching: httpclient-2.7.0.1.gem (100%)
  Successfully installed httpclient-2.7.0.1
  Fetching: open4-1.3.4.gem (100%)
  Successfully installed open4-1.3.4
  Fetching: rhc-1.38.4.gem (100%)
  ===========================================================================
   
  If this is your first time installing the RHC tools, please run 'rhc setup'
   
  ===========================================================================
  Successfully installed rhc-1.38.4
  Parsing documentation for net-ssh-2.9.2
  Installing ri documentation for net-ssh-2.9.2
  Parsing documentation for net-scp-1.2.1
  Installing ri documentation for net-scp-1.2.1
  Parsing documentation for net-ssh-gateway-1.2.0
  Installing ri documentation for net-ssh-gateway-1.2.0
  Parsing documentation for net-ssh-multi-1.2.1
  Installing ri documentation for net-ssh-multi-1.2.1
  Parsing documentation for archive-tar-minitar-0.5.2
  Installing ri documentation for archive-tar-minitar-0.5.2
  Parsing documentation for highline-1.6.21
  Installing ri documentation for highline-1.6.21
  Parsing documentation for commander-4.2.1
  Installing ri documentation for commander-4.2.1
  Parsing documentation for httpclient-2.7.0.1
  Installing ri documentation for httpclient-2.7.0.1
  Parsing documentation for open4-1.3.4
  Installing ri documentation for open4-1.3.4
  Parsing documentation for rhc-1.38.4
  Installing ri documentation for rhc-1.38.4
  10 gems installed
  Pedro-Brigattos-MacBook:devmedia_devops_series pedrobrigatto$   

O próximo passo é instalar o rhc propriamente dito. Para isto, diretamente em um terminal/prompt, executamos o comando sudo gem install rhc, também ilustrado a partir da Listagem 1. Ao rodar este comando, com privilégios de administrador, o rhc e suas dependências serão baixadas e instaladas, automaticamente e em um tempo relativamente curto. A seguir, basta que executemos outro comando, rhc setup, para nos conectarmos à nossa conta OpenShift e, então, passarmos a administrá-la via linha de comando. Assim que fizermos isso, o resultado será algo como o exibido na Listagem 2.

Esta listagem nos traz algumas informações importantes, cujos detalhes serão analisados a partir de agora. O primeiro ponto se refere às credenciais de acesso à conta OpenShift. Em um primeiro momento, o utilitário nos questionará sobre esses dados para poder estabelecer uma conexão. Trata-se, portanto, de uma operação típica de login. Esses dados serão registrados e, a partir do primeiro acesso, estas serão as credenciais consideradas em todo novo comando executado via rhc, até que realizemos o logout a partir do comando rhc logout. Neste último c ...

Quer ler esse conteúdo completo? Tenha acesso completo