Travis-CI
O Travis-CI, é um dos queridinhos e escolhido por 9 entre cada 10 dentistas, não péra, vamos de novo… Senhoras e senhores, apresentando a vocês, o incrível: Travis-CI!!!
Um boa parte dos projetos que encontramos no GitHub, que possuam um mínimo de testes, utilizam o Travis-CI como sua principal ferramenta de integração contínua e testes automatizados; isso porque ele é totalmente gratuito para projetos de código aberto, e além de suas inúmeras integrações, é muito fácil e rápido de configurar e integrar ao controle de versão utilizado.
Pra ficar mais fácil de entender e conhecer a ferramenta, vou dividir este post em alguns tópicos. Vamos lá.
Apresentação
Com disse, o Travis é o mais escolhido nos projetos open source, justamente pela sua facilidade para configurar, quanto para integrar ao CVS utilizado no projeto.
Sua interface é realmente muito simples e sem botões para se perder ou funcionalidades inúteis. O suporte a múltiplas linguagens também é um grande atrativo.
Com poucas linhas, é possível subir seu ambiente de testes e começar a testar seus projetos, assim como disparar gatilhos no caso de sucesso ou falhas. Fora o “badge” bacana que tu pode colocar no README do projeto ;)
Cadastro
O cadastro é simples e rápido, bastando você se logar com sua conta do GitHub e logo você cai na Dashboard,
onde estão seus projetos listados em uma coluna à esquerda e o status detalhado do build do projeto selecionado.
Caso seja seu primeiro acesso, você não terá nenhum projeto listado, tendo que habilitar na tela de configurações que veremos a seguir com detalhes.
Configurando
Tão simples quanto o cadastro é a configuração do Travis-CI para cada projeto.
Nela você pode configurar dentre as variáveis de ambiente - caso seu projeto utilize - se o build ocorrerá somente nos “pushs” do projeto ou também sobre cada pull request - ótimo e aconselhável.
O arquivo .travis.yml é onde ficam as configurações necessárias para rodar os testes e etc, abaixo, o arquivo de configuração de um projeto simples em PHP:
language: php
php:
- 7.0
before_script:
- composer install --dev --prefer-dist
script:
- ./vendor/bin/phpunit
Não se assuste com nada, é só um exemplo. Mas você já pode ver que com poucas linhas, você já tem seu projeto sendo testado automaticamente a cada Push ou PR.
No arquivo você também pode configurar ações para cad etapa do build, são elas:
- before_install
- install
- before_script
- script
- after_success or after_failure
- before_deploy *
- deploy *
- after_deploy *
- after_script
As ações marcadas com “*” são opcionais no arquivo de configuração. Na verdade, você também não é obrigado a configurar todos os passos citados ;)
Também é possível clicar no canto superior direito, acessando o menu Accounts para integrar - ou desligar - outros projetos
que você tenha acesso.
Sua conta e organizações que você esteja vinculado, ficarão listados na coluna a esquerda, bastando clicar sobre, para obter uma listagem de projetos do qual você possu permissão de acesso.
A direita, temos a listagem de projetos, e também o botão de sincronização. O Travis-CI sincroniza sua conta de tempos em tempos, porém, as vezes é necessário dar uma clicada ali para obter uma listagem mais recente, principalmente se você acabou de criar o projeto no GitHub.
Na listagem, é possível habilitar e desabilitar a integração com o Travis-CI, assim como ir direto às configurações do projeto, como falado anteriormente.
Na imagem abaixo, temos um exemplo de projetos integrados e não integrados com a ferramenta, assim como algumas organizações que possuo acesso através do meu GitHub.
Com o Travis habilitado para seu projeto, você pode ir até a página do projeto no GitHub e olhar as configurações do serviço, na aba Webhooks & Services, nela, você verá uma imagem semelhante a abaixo, onde você poderá ver serviço habilitado.
Clicando no lápis, teremos detalhes da configuração - não se preoupce, você não precisa mexer em nada aqui:
Você também pode testar o serviço, sem ter que fazer um push para seu repositório, clicando no botão “Test service” logo no topo.
PHP
Abaixo um exemplo básico, de um projeto feito em PHP, testando a compatibilidade com várias versões e permitindo a falha do build em versões específicas.
language: php
php:
- 7.0
- 5.6
- nightly
- hhvm
- hhvm-nightly
matrix:
allow_failures:
- php: nightly
- php: hhvm
- php: hhvm-nightly
before_script:
- composer selfupdate
- composer install --dev --prefer-dist
script:
- ./vendor/bin/phpunit
Nodejs
Neste exemplo, mostro como faço para rodar um projeto, que utiliza algumas bibliotecas específicas e necessitam de configurações adicionais do ambiente para efetuar a instalação das mesmas, como a versão dos compiladores e etc, o Travis-CI permite essas configurações “obscuras”.
language: node_js
env:
- CXX=g++-4.8
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- g++-4.8
node_js:
- "5.1.1"
Angularjs
Para os projetos em Angular, gosto muito de utilizar o Protractor pela sua praticidade de configuração.
language: node_js
node_js:
- "0.12"
before_script:
- export DISPLAY=:99.0
- sh -e /etc/init.d/xvfb start
- npm start > /dev/null &
- npm run update-webdriver
- sleep 1 # give server time to start
script:
- npm run test-single-run
- npm run protractor
Ruby
Não possuo experiência com Ruby além de minúsculos projetos de exemplo e alguns sites hospedados no GitHub, que utilizam o Jekyll como base. Neste exemplo, mostro como rodar um projeto em Jekyll hospedado no próprio GitHub. Nele, rodo o build do Jekyll e o HtmlProofer, para analisar links e etc. Porém, rodo somente no branch master os testes.
language: ruby
rvm:
- 2.1
# Assume bundler is being used, therefore the `install` step will run `bundle install` by default.
script:
- bundle exec jekyll build
- bundle exec htmlproof --allow-hash-href --disable-external --empty-alt-ignore ./_site
# branch whitelist, only for GitHub Pages
branches:
only:
- master
env:
global:
- NOKOGIRI_USE_SYSTEM_LIBRARIES=true # speeds up installation of html-proofer
Java
Não possuo experiência com Java, então, o exemplo a seguir eu busquei na documentação do próprio Travis-CI. Abaixo, a configuração básica de um projeto utilizando o Ant e sendo compilado em diversas versões do JDK.
language: java
jdk:
- oraclejdk8
- oraclejdk7
- openjdk6
install: ant deps
script:
- ant test
Prós & Contras
O Travis-CI na minha opinião é uma ferramenta fantástica e incrivelmente simples de configurar.
Só pelo seu modelo de apoio a projetos de código aberto, pra mim já é suficiente para votar no uso e incentivar a todos.
Como único ponto contra, é o preço final para projetos privados, que - com o atual valor do dólar - é um tanto quanto salgado, no momento em que escrevo este post, o plano mais simples gira em torno de $129.
Para uma grande empresa talvez não seja problema, mas para pequenas empresas ou freelancers - como é o meu caso - é um serviço bem caro para se manter, deixando como opção, outras ferramentas que disponibilizam o mesmo uso, mas para um número limitado de projetos privados, ou mesmo instalar outra ferramenta de CI em um servidor próprio.
Conclusão
O Travis-CI é indiscutivelmente, minha primeira opção para projetos no GitHub ou de código aberto, justamente pela sua simplicidade de configuração e maturidade.
Sua flexibilidade permite a definição perfeita do ambiente de integração contínua, com a segurança de manter as informações privadas de forma segura e um suporte realmente incrível as mais diversas linguagens e ambientes - permitindo inclusive a configuração de múltiplos sistemas operacionais.
Mais Informações
Se você estiver interessado em obter mais informações sobre o Travis-CI, fique a vontade para comentar ou me enviar um e-mail.
Abaixo, deixo alguns links interessantes para quem deseja começar a utilizar o Travis-CI em seus projetos.
- Travis-CI - Projetos Open Source
- Travis-CI - Projetos Privados
- Travis-CI - Iniciando
- Travis-CI - Customizando o Build