1up4developers logo

1up4developers

Nadando contra o Waterfall. tail -f /mind/realworld >> /blog

Integração Contínua E Entrega Contínua De Modo Fácil Com Wercker

| | Comments


TL;DR Wercker é uma plataforma de integração contínua, baseado em containers e focado em facilitar o build e deploy de aplicações na nuvem. Totalmente integrado com Github, BitBucket, Heroku, AWS e OpenShift, em questão de minutos e com apenas alguns cliques é possível configurar o build e deploy da sua aplicação. O serviço está em beta, permitindo repositórios privados grátis!

Como funciona

Cada vez que você faz um git push, o Wercker recebe um sinal que houve atualização, baixa o código do repositório, monta o ambiente do build definindo variáveis de ambiente, rodando as migrations, etc, e executa os testes ou qualquer outro passo que você definir, como compilar os assets, etc.

Uma vez que o build execute com sucesso, fica disponível para deploy na plataforma que escolher, como Heroku ou AWS. Da mesma forma do build, o deploy consiste em passos definidos, como rodar o Capistrano ou fazer push no repositório do Heroku.

Durante as duas etapas deste processo de build e deploy, o Wercker ainda pode notificar seu HipChat ou Slack :)

Por que é diferente?

Existem vários serviços de CI com a mesma proposta, como o Travis ou o Codeship. Mas o Wercker permite total customização do ambiente do build e do deploy, uma vez que é baseado em containers.

Você pode escolher um container oficial para seu build, como Ubuntu com Ruby instalado, por exemplo, ou pode procurar um container disponibilizado por outro usuário no diretório do Wercker.

Mas se precisar de algo muito específico, você pode criar seu próprio container (ou box) com pacotes e serviços que desejar, versões, etc, e utilizá-lo no seu build. E você também pode disponibilizar este box no diretório do Wercker para outros usuários utilizarem!

Boxes

Um box é um ambiente virtual empacotado e versionado com pacotes e serviços necessários para executar o build. Em outras palavras, é o container “base” que rodará seu build.

Para utilizar um box, basta declarar no início do wercker.yml:

1
box: wercker/ubuntu12.04-ruby2.0.0

Tem box para Ruby, Node.js, Go, Java/Android e até para Docker. Na prática, os boxes oficiais vão atender a maioria dos casos, mas você pode criar seu próprio box como desejar.

Para definir um box, basta criar um repositório com o arquivo wercker-box.yml descrevendo a base (Ubuntu, por exemplo), o provisionamento (Chef, Puppet, etc, e adicioná-lo ao build pipeline do Wercker.

Uma vez que o build passar, é possível fazer o deploy para disponibilizá-lo no diretório do Wercker. Assim, é possível utilizar este box no processo de build da sua aplicação.

Mais informações: http://devcenter.wercker.com/articles/boxes/

Services

Serviços são boxes prontos disponibilizados pelo Wercker, como MySql, PostgreSql, MongoDB, Redis, etc. Em outras palavras, é um container configurado com um serviço ready to use.

Para utilizar um service, basta adicionar ao seu wercker.yml:

1
2
3
4
box: wercker/ruby
services:
    - wercker/mongodb
    - wercker/redis

Mais informações: http://devcenter.wercker.com/articles/services/

Steps

As steps são os “comandos” executados pelo Wercker no build ou deploy da aplicação, como bundle-install, database-migrate, script, etc.

Você pode utilizar as steps disponibilizadas pelo Wercker ou criar suas próprias steps, executando os comandos que julgar necessário no seu build ou deploy.

Para definir as steps do seu build, basta adicionar o wercker.yml:

1
2
3
4
5
6
7
8
9
10
11
12
build:
    steps:
        - rvm-use:
            version: 2.1.2
        - bundle-install
        - rails-database-yml
        - script:
            name: db migrate
            code: bundle exec rake db:migrate
        - script:
            name: rspec
            code: bundle exec rspec

Mais informações: http://devcenter.wercker.com/articles/steps/

Deploy pipeline

O Wercker permite fazer o deploy da sua aplicação em vários PaaS como Heroku automaticamente ou definir o processo de deploy manualmente, utilizando o Capistrano ou executando um script de sua preferência.

Durante a processo de deploy, é possível definir chaves SSH específicas, variáveis de ambiente, etc.

Para configurar seu deploy, adicione ao wercker.yml (por exemplo):

1
2
3
4
5
6
7
8
deploy:
    steps:
        - heroku-deploy
        - s3sync:
            key_id: $AWS_ACCESS_KEY_ID
            key_secret: $AWS_SECRET_ACCESS_KEY
            bucket_url: $AWS_BUCKET_URL
            source_dir: build/

Mais informações: http://devcenter.wercker.com/articles/deployment/

#comofas?

O Wercker é legal, fácil, bla bla bla. Vamos à um exemplo prático, passo-a-passo, de como configurar seu projeto no Wercker, fazer o build e o deploy automaticamente no Heroku.

0 – Crie sua conta :)

1 – Escolha o repositório, adicione as chaves SSH, finalize;

2 – Adicione o arquivo wercker.yml ao seu projeto, parecido com este:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
box: wercker/rvm
services:
    - wercker/postgresql
build:
    steps:
        - rvm-use:
            version: 2.1.2
        - bundle-install
        - rails-database-yml
        - script:
            name: db migrate
            code: bundle exec rake db:migrate RAILS_ENV=test
        - script:
            name: rspec
            code: bundle exec rspec -f d
    after-steps:
        - hipchat-notify:
            token: $HIPCHAT_TOKEN
            room-id: 123456
            from-name: wercker

Mais informações: http://devcenter.wercker.com/articles/werckeryml

3 – Dispare o build com git push;

1
2
git commit -m "Configurando Wercker"
git push origin master

4 – Configure o deploy no Heroku:

5 – Dispare o build/deploy com git push ou manualmente:

6 – \o/

Espalhe a palavra!

Fácil né? Não há mais choro desculpas para não utilizar um CI em seu projeto.

Configure seu projeto, tire um print screen do primeiro build com sucesso e Tuite para o @wercker para receber stickers de grátis!

Compartilhe este post! Dúvidas e sugestões nos comentários abaixo. Sucesso!

Comments