MouseOver Studio

MouseOver Studio header image 2

Integração contínua simples de verdade com Signal

outubro 29th, 2009 por Diego Carrion · 1 comentário

Signal é um servidor de integração continua criado em Rails que na minha opinião pega as melhores funcionalidades dos concorrentes e une elas numa aplicação bem simples de utilizar.

Quando comecei a trabalhar com Rails, o primeiro servidor de integração continua que experimentei foi o CruiseControl.rb. O CC.rb foi escrito sobre Rails e o que mais me incomoda nele é que para adicionar um projeto você tem que ir no servidor e executar:

./cruise add [project-name] -r [repository] -s [svn|git|hg|bzr]

Após ter executado o comando podemos abrir um arquivo .yml e configurar o destinatário dos emails que serão enviados pela aplicação quando o build quebrar. Na terra do scaffold, isso não faz nenhum sentido para mim. É bem mais simples ter uma pagina onde qualquer usuário consegue cadastrar um projeto sem maior dificuldade, que nem no Hudson, no Integrity e no Signal.

Outra coisa que me incomoda no CC.rb é que ele dispara um monte de processos cruise e de vez em quando eles travam. Por um tempo achei que o problema era somente comigo mas após conversar com algumas pessoas descobri que é um problema comum.

A terceira coisa da qual vou reclamar do CC.rb é que na pagina inicial ele mostra os últimos cinco builds de cada projeto. A meu parecer, os últimos dois builds já é informação de mais. Saber que os últimos builds quebraram ou não para mim não quer dizer nada, o único que me importa é saber se nesse momento o projeto esta em um estado bom ou não, que nem o Integrity faz.

O Integrity faz varias coisas de um jeito legal, mas o que eu não gosto é que para instalar ele você tem que baixar primeiro a gem e depois executar um comando. O pior de tudo é que dependendo do servidor que você quer utilizar, o comando recebe parâmetros diferentes. Antes de explicar porque esse método de instalação é um problema, vou declarar que outra coisa que não gosto do Integrity é que ele vem sem suporte a email por padrão. Além dessa falta de suporte ser chata, para adicionar ela você tem que baixar outra gem e modificar um arquivo. Parece ser simples mas comigo não funcionou. Aparentemente a versão da gem plugin não era compatível com a versão da gem aplicação. Agora, como você troca a versão da aplicação que foi instalada ao executar o comando de uma gem? Seria somente baixar a segunda versão da gem e apagar a primeira? Seria necessário executar novamente o comando? Não sei, pode ser que tenha feito besteira mas as coisas não funcionaram comigo e por isso acredito que essa forma de trabalhar com aplicações é um problema.

O Signal tenta se aproveitar do bom e velho Git. Para instalar o Signal basta executar:

git clone git://github.com/dcrec1/signal.git
cd signal
rake inploy:local:setup

Caso algum dia queiramos voltar uma versão é somente executar git reset –hard ; simples, além de poder tirar proveito do histórico e saber o que estamos desfazendo e onde estamos.

Uma característica que o CC.rb tinha e que acho falta no Integrity é mostrar a data do build na página principal. O Signal mostra faz quanto tempo foi realizado o ultimo build, de modo que podamos saber quando foi o ultimo build e se eles estão sendo criados.

O report_card é um projeto que integra metric_fu com o Integrity, mas para isso é necessário rodar outra aplicação e rodar uns comandos, o que é muito complicado para mim. É por tal motivo que decidi que o Signal teria integração nativa com o metric_fu, o RSpec e o Cucumber.

A integração do Signal com o RSpec, Cucumber é metric_fu é bem simples. Em cada tela de build do Signal aparecem trés links: specs, features, e metrics, que apontam para ROOT/docs/specs.html, ROOT/docs/features.html e ROOT/tmp/metric_fu/output/index.html, padrão do metric_fu. Isso quer dizer que caso estejamos gerando outputs html das especificações, elas poderão ser acessadas a partir da página do build.

Outra integração que o Signal tem é com o Inploy. Caso desejemos realizar um deploy da aplicação, podemos ir na página dele e clicar no link deploy, a tarefa rake inploy:remote:update sera executada.

O Hudson é um servidor de integração legal, mas eu acho que o Signal supera ele em ser um pouco mais simples e se aproveitar de algumas convenções, além de ser desenvolvido em Rails e estar no Github.

Ser desenvolvido em Rails é uma vantagem porque este tipo de projetos acostumam ter vários plugins e plugins e Rails tem tudo a ver. Rails tem suporte nativo a plugins e quase tudo mundo que trabalha com Rails sabe como se instalam e como funcionam, pelo que facilita a criação deles.

Estar no Github é uma vantagem porque facilita ainda mais a colaboração com o projeto. Hoje o Signal tem muita coisa fixa que pode ser utilizada como convenção, mas caso alguém precise de alguma configuração especial, é somente dar um fork no projeto e começar a contribuir. Dado que o Signal foi desenvolvido com Rails e que ele é bem simples, as pessoas não vão ter muitas dificuldades para entender como ele funciona.

Uma das convenções do Signal é que em cada build ele executa a tarefa rake build, que eu acostumo ter mais ou menos assim dependendo do projeto:

task :build => [:'db:migrate', :spec, :cucumber, :'metrics:all']

Gravei um pequeno vídeo de quase trés minutos demonstrando como é fácil instalar e utilizar o Signal. Nele baixo a aplicação e instalo ela utilizando o Inploy. Seguidamente cadastro um novo projeto e mando criar um build dele. O build não é criado automaticamente junto com o projeto porque as vesses precisamos executar algumas ações antes de rodar ele. Somente por fins de demostração, escolhi um projeto em Ruby com um build muito rápido, ele não roda as features do Cucumber nem as métricas. Após o primeiro build, executo um start no delayed_job e criou um build a partir da linha de comando, como se estivesse num hook no Git. O vídeo termina com eu mostrando um build do projeto Signal e como é fácil visualizar os specs, estorias e métricas a partir dele.

Really easy continuous integration with Signal from Diego Carrion on Vimeo.

Considera me recomendar no Working With Rails. Para ficar mais perto das novidades, não deixa de me seguir no Twitter.

Tags: continuous integration · rails · signal

1 resposta ate agora ↓

  • 1 Jefferson Girão // nov 3, 2009 at 12:32 pm

    Não conhecia o Signal, uso o CC.rb e me deparei com alguns dos problemas que você citou.
    Parabéns pelo post! Farei um experiência com o Signal 😀

Deixar um comentário