quinta-feira, 18 de abril de 2013

Ferramentas de DevOps em Openshift

Introdução

Além de todos os benefícios que eu sempre venho dizendo e escrevendo neste blog do Cloud Computing, quero aqui mostrar um cenário do qual o desenvolvimento de aplicações pode se tornar cada vez mais prático utilizando  ferramentas que podem auxiliar o que chamados de DevOps (Development Operations). DevOps trata de unir o desenvolvimento, Quality Assurance (QA) e Infraestrutura (Technology Operations) de forma a estressar a comunicação, colaboração e integração entre esses times e com isso padronizando os ambientes de desenvolvimento e facilitando o gerenciamento de releases da aplicação.

Um gráfico que exemplifica o papel de DevOps em um processo de software  (Fonte: wikipedia)
Cloud Computing, além de provisionar um ambiente operacional para suas aplicações em questão de segundos, aproxima o desenvolvedor de um ambiente de produção (ou muito próximo dele) e assim o desenvolvedor consegue ter uma visibilidade muito maior de como sua aplicação irá se comportar em um ambiente desses. Entretanto, não podemos simplesmente botar todo o foco nisso sem esquecer em métricas de qualidade do código nem em integração contínua.
Nesse post eu irei mostrar que em Openshift você pode fazer tudo isso e ainda por cima disponibilizar publicamente e de uma forma bem simples.

Gerenciamento de projetos com Redmine

Redmine é uma ferramenta escrita em Ruby que permite a criação e gerenciamento de issues de projetos, além de servir como um repositório de documentos e arquivos relevantes ao projeto e também pode ser criada uma base de conhecimento em formato wiki. O que eu achei a maior sacada do Redmine é que ele traz uma visualização das issues em um gráfico Gantt(o gráfico preferido dos gerentes de projetos), podendo assim ver a situação do projeto de forma online.
Gráfico Gantt gerado pelo Redmine
Atualmente, eu venho utilizando o Redmine em um projeto pessoal meu e por isso eu venho estudando essa ferramenta para pode me organizar nas tarefas. Com ele, eu consigo ver exatamente o que eu quero que minha aplicação tenha e assim poder eu mesmo organizar as tarefas e ir registrando meu progresso.
Aliando a facilidade de provisionar um sistema como o Redmine com a infraestrutura de nuvem pública, é possível criar um ambiente para os gestores de projetos de uma startup a gerenciarem e monitorarem os projetos e seus detalhes de forma que não precisem manter essa infraestrutura (nem pagarem por isso).

Integração Contínua com Jenkins

Quem já ouviu falar de Integração contínua, com certeza já ouviu falar do Hudson/Jenkins. Essa ferramenta pode ser uma mão na roda para projetos com muitos desenvolvedores, onde ele auxilia a equipe a testar todo o projeto a partir do código que já se encontra em um repositório de código, desde compilando o código até executando testes unitários e de integração. Tarefas mais completas (e por consequëncia, complexas) chegam até a publicar os artefatos em repositórios como o Nexus.
Tela do jenkins e os detalhes de uma tarefa automatizada
Dentre todas as ferramentas que irei mencionar neste post, esse com certeza é o mais integrado ao ambiente OpenShift pois já nasceu com essa integração com o Jenkins e portanto é o mais fácil de se utilizar dentro do OpenShift.

Qualidade de código com Sonar

Para aumentar a qualidade de código de seus projetos, há a ferramenta Sonar para análise de qualidade de código. Obviamente, isso é feito de forma estática e baseado em regras de desenvolvimento. Para cobrir a qualidade do código em execução deve-se utilizar ferramentas de teste unitários, de integração, funcionais, etc. Isso tudo pode ser combinado no Jenkins em uma tarefa de integração contínua, com mencinado na seção anterior.
O Sonar já vem com algumas regras (algumas delas criadas pela própria Sun, e que Deus a tenha), o que permite que você não comece a criar as regras do zero e poupando tempo na definição das mesmas.
Tela do sonar com um exemplo de análise de um projeto
Um detalhe importante para utilizar o sonar em seus projetos OpenShift: o projeto é todo estruturado no Maven e portanto você pode utilizar o plugin do Sonar para assim poder executar a tarefa:
$ mvn sonar:sonar
Porém o plugin exige que se utilize uma URL com uma porta específica para acesso ao repositório do Sonar e registrar todas as informações relevantes à ele. Como no OpenShift, as regras de segurança são muito restritar, é necessário que você habilite o port forward em sua aplicação sonar com o seguinte comando:
$ rhc port-forward -a <aplicacao_sonar>

Monitoramento de aplicações com Openshift Metrics

OpenShift fornece um cartridge específico para o monitoramento da saúde de sua aplicação. Ela é muito simples, mas já te dá informações cruciais da sua aplicação(como consumo de memória e CPU). Para adicionar em sua aplicação o cartridge para monitorar sua aplicação, basta executar:
$ rhc cartridge add metrics-0.1 -a <nome-aplicacao>
Após a conclusão do comando, você pode acessar o Metrics através da URL:
http://<aplicacao>-<dominio>.rhcloud.com/metrics/

OpenShift metrics
Por ser uma ferramenta ainda experimental, o código ainda não está disponível. Acredito que em breve teremos mais funcionalidade e também a abertura do código.

Conclusão

As ferramentas apresentadas neste post podem ser instaladas de forma muito simples: seja pela ferramenta rhc ou pelo próprio console administrativo do Openshift ou até utilizando dos quickstarts da comunidade que, em sua maioria, se encontram no github do Openshift. Apesar da facilidade da criação desse ambiente, as contas gratuitas do Openshift permitem até 3 aplicações criadas e portanto você pode consumir toda a sua cota, mas nada te impede de criar várias contas e gerenciar essas aplicações em uma conta específica.

Um comentário:

  1. DreamHost is ultimately the best web-hosting provider with plans for any hosting requirements.

    ResponderExcluir