Configurando Travis CI para um projeto com GhostDriver e Gradle

Seguindo a linha dos últimos posts sobre Integração Contínua com o Jenkins, vamos falar hoje sobre o Travis CI e como configurá-lo para rodar um projeto de exemplo com GhostDriver e Gradle.

Sobre GhostDriver e Gradle

Para quem não conhece o GhostDriver e o Gradle, eles já foram abordados em outros posts aqui do blog (clique no nome para abrir o post):

Em resumo: GhostDriver é a implementação do Selenium WebDriver para usar o headless browser PhantomJS. Gradle é uma ferramenta de build, assim como o Maven e o Ant. :)


Travis CI

O Travis CI é um serviço de Integração Contínua na nuvem que pode ser conectado a repositórios no GitHub. Ele é gratuito para repositórios públicos e pago para repositórios privados.

É um serviço excelente, amplamente usado em projetos no GitHub. Possui suporte a diversas linguagens, como: C, C++, Clojure, Erlang, Go, Groovy, Haskell, Java, JavaScript (com Node.js), Objective-C, Perl, PHP, Python, Ruby, Scala, etc.. Vale lembrar que a documentação também é muito boa.

Como o Travis funciona?

Toda vez que dermos um push no nosso repositório do GitHub, o Travis irá executar os seguintes passos:

  • Criar uma máquina virtual em branco (padrão: Ubuntu 12.04 LTS Server Edition 64 bit + 3GB de RAM)
  • Pegar o código-fonte no GitHub
  • Fazer o deploy da aplicação
  • Rodar os testes
  • Notificar o usuário (via e-mail, por exemplo)

Conectando o Travis a um repositório do GitHub

Para conectar o Travis CI a um repositório do GitHub, primeiro devemos conseguir um token, que é gerado pelo Travis. Para obter o token:

  • Acesse a página do Travis: https://travis-ci.org/
  • Faça login com sua conta do GitHub
  • Clique no seu nome (no lado superior direito da tela)
  • Clique na aba Profile e copie o token exibido

Agora, precisamos adicionar um novo serviço (Travis) no repositório do GitHub. Isso é feito da seguinte forma:

  • Acesse o seu repositório do GitHub a ser integrado
  • Clique em Settings:

git 1

  • Clique na seção Webhooks & Services. Em seguida, clique em Add service e busque por "Travis CI":

2 add service

  • Na tela seguinte, informe seu usuário do GitHub e o token que você obteve anteriormente.

Finalmente, habilite o projeto no Travis:

  • Acesse o Travis e clique no seu nome de usuário (no lado superior direito)
  • Você verá uma lista dos repositórios públicos do seu GitHub. Habilite o Travis para o projeto que desejar, clicando no botão ON/OFF:

3 enable project

Pronto! Agora só falta configurarmos o arquivo de build, que veremos a seguir. :)


Configurando o build

Um recurso excelente do Travis CI é que ele possui suporte nativo ao PhantomJS. Dessa forma, não precisamos instalar o PhantomJS para rodar nossos testes com o GhostDriver, o que simplifica ainda mais a configuração. :)

OBS: O Travis também oferece suporte pra headless testing com Xvfb + Firefox. Além disso, também tem suporte para usar o SauceLabs.

O build do Travis é configurado através de um arquivo YAML (YAML Ain't a Markup Language), chamado ".travis.yml". A sintaxe é bem simples e a documentação do Travis ajuda a entender quais comandos usar de acordo com a necessidade. Veja abaixo algumas dicas pra entender/escrever melhor arquivos YAML:


Criando um arquivo de build

Crie um arquivo com o nome ".travis.yml" na raiz do repositório. Agora, vamos informar no arquivo o que o Travis precisa para o build. No nosso exemplo, como estamos trabalhando com um projeto Java, temos que dizer isso ao Travis, da seguinte forma:

language: java

Em seguida, precisamos dizer qual versão da JDK vamos usar. O default é a Oracle JDK7, mas, para mostrar como funciona, vamos alterar para a versão OpenJDK7:

jdk:
  - openjdk7

OBS: É possível informar mais de uma versão de JDK, caso você precise testar sua aplicação em versões diferentes. :)

Para terminar, vamos ver a parte de notificações. Por default, o Travis irá enviar um e-mail de notificação para o committer e para o autor do commit quando:

  • um build quebrar ou continuar quebrado
  • um build quebrado for corrigido

Você pode configurar os comportamentos default, além de configurar outros e-mails para que o Travis envie notificações. Também são suportadas notificações via IRC, Campfire, dentre outras formas. A parte da documentação que explica sobre notificações pode ser conferida aqui.

No nosso exemplo, vamos configurar para que o Travis envie notificações por e-mail sempre, ou seja, independente do resultado do build. Um exemplo seria:

notifications:
  email:
    recipients:
      - stefanfk@gmail.com
    on_success: always

CUIDADO: Repare que as tags são indentadas com espaços em branco. Não use TAB para indentar! Valide no Travis WebLint se o seu arquivo está OK! ;)


Travis CI + Gradle

Para projetos em Java, o Travis irá verificar se existe, na raiz do repositório:

  • um arquivo de build do Gradle (build.gradle)
  • um arquivo de build do Maven (pom.xml)
  • um arquivo de build do Ant (build.xml)

No nosso caso, colocamos o arquivo de build do Gradle (e somente ele!) dentro da raiz do repositório do projeto. O Travis irá encontrar o arquivo e executar o build. :)


Gerando novo build e visualizando resultados

Para que o Travis gere um novo build, basta alterarmos alguma coisa no repositório. Para nosso exemplo, vou alterar o arquivo .travis.yml, vide imagem abaixo:

4 commit

Com isso, o Travis irá iniciar um novo build:

5 new build

É possível acompanhar o log de execução, pra ver os passos que estão sendo feitos:

6 log

No final do build, como esperado, recebi um e-mail de notificação:

7 email


E é isso! Compartilhem suas dúvidas/sugestões/críticas nos comentários, ou entrem em contato! :D

Até a próxima!


Referências

http://www.yaml.org/
https://travis-ci.org
https://travis-ci.org/stefanteixeira/exemplo-ghostdriver-gradle
http://lint.travis-ci.org/
https://github.com/stefanteixeira/exemplo-ghostdriver-gradle
http://docs.travis-ci.com/user/getting-started/
http://docs.travis-ci.com/user/languages/java/
http://docs.travis-ci.com/user/notifications/
http://docs.travis-ci.com/user/ci-environment/


Sobre o autor: Stefan Teixeira trabalha como QA Engineer e, desde o final de 2014, tem se aventurado no mundo DevOps. É Bacharel em Ciência da Computação pela UFRJ e MBA em Garantia de Qualidade de Software pela Escola Politécnica da UFRJ. Entusiasta de Testes Automatizados (e de tudo que possa ser automatizado!), Agile Testing e da cultura DevOps.

Contatos: stefanfk@gmail.com | Twitter | LinkedIn


comments powered by Disqus