Integração Contínua com Bitbucket Pipelines - Containers Auxiliares

Deu de notar que to completamente viciado no Bitbucket Pipelines? Pois é, como disse, tenho utilizado ele todos os dias na BeeTech, então, nada mais natural do que ir acompanhando - e aplicando - as novidades que vão aparecendo.

Um pouco antes do Cache, foi implementado o recurso de containers paralelos, ou auxiliares, como queira chamar, que nada são que container que rodam junto com seu fluxo de CI. Como um banco de dados por exemplo.

Você não precisa instalar o PostgreSQL no seu container ou outros serviços “pesados” que precisem estar a postos antes de rodar seus testes, você pode facilmente chamar um container auxiliar eu seu fluxo e pronto, o Pipelines vai subir esta instância, e deixa-la disponível para seus testes.

A sintaxe é bem simples, vou mostrara abaixo, como subir um container contendo o PostgreSQL:

image: node

pipelines:
  default:
    - step:
        caches:
          - node
        script:
          - npm install --progress=false
          - npm test
        services:
          - database

definitions:
  services:
    database:
      image: sameersbn/postgresql:9.6-2
      environment:
        DB_USER: 'foooooo'
        DB_PASS: 'baaaaar'
        DB_NAME: 'foobaar

Como disse, a sintaxe é simples, basta você setar um alias para o serviço, em nosso caso “database”, e nas suas “definitions” configurar o serviço, que pode ser qualquer imagem Docker, seguido dos parâmetros que você utilizaria para rodar o container normalmente.

Simples não? Com isso, com certeza seu fluxo de CI ficará bem mais rápido e cada vez menos engessado - ou no mínimo, seu container diminuirá drasticamente de tamanho.

Até a próxima!

Integração Contínua com Bitbucket Pipelines - Cache

Não tenho tido muito tempo de continuar a série sobre integração contínua, porém, venho utilizado no meu dia a dia o Bitbucket Pipelines como principal ferramenta de CI. Com isso, tenho podido acompanhar a evolução desta ferramenta e a facilidade de uso que o time do Bitbucket vem proporcionando a cada atualização.

Um dos maiores problemas na integração contínua, é a instalação de todas as dependências do projeto até chegar na produção de artefatos limpos. Rodar um composer install ou um npm install a cada build pode ser custoso e demorado. Nenhum time quer esperar vários minutos para saber se um push é válido ou não, isso atrasa e muito as entregas.

Uma atualização bacanuda é a possibilidade de utilizarmos cache para as dependências dos nossos projetos.

A instação é bem simples, vou colocar um exemplo prático, para cachearmos as dependências administradas pelo composer em uma aplicação PHP:

image: php:7.1.6-cli

pipelines:
  default:
    - step:
        caches:
          - composer
        script:
          - curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
          - composer install
          - ./vendor/bin/phpunit -c phpunit.xml.dist

Bem simples não? Como você pode ver, apenas adicionamos o tipo de cache que queremos utilizar, o Pipelines nos dá várias opções pré-configuradas para diversas linguagens, mas também podemos utilizar o nosso próprio, como mostrarei abaixo, para aplicações em angular:

image: node

pipelines:
  default:
    - step:
        caches:
          - node
          - bower
        script:
          - npm install --progress=false
          - ./node_modules/.bin/bower install --allow-root
          - npm test

definitions:
  caches:
    bower: bower_components

Como você pode ver, utilizei uma configuração pré-existente (node) e uma customizada (bower) para cache.

Para saber mais, veja a documentação oficial.

Diversão de Domingo com Python

Utilizo muito os serviços do DeployBot para CD, junto ao meu fluxo de CI. Mas nem como em alguns momentos deploy é apenas uma questão de estratégia, é chato ficar ter que abrindo o navegador para acessar o painel do DeployBot a todo momento para acionar um build.

Então, juntando a minha vontade de estudar mais Python e minha mania incansável de ficar criando ferramentas sempre que descubro que algo que uso possui uma API, nasceu o deploybot-cli, uma pequena ferramenta de linha de comando, para interagir com a API do DeployBot.

Você pode baixar o pacote - ou o fonte diretamente do Github, ou mesmo instalar via Pip:

pip install deploybot-cli

No momento que escrevo este post, a última versão estável é a 0.2.3, mas tão logo os estudos forem avançando, vou melhorando, fique de olho.

Claro, fique a vontade para utilizar somente as classes e integrar da forma que achar melhor com sua aplicação ou ambiente.

O projeto é pequeno e para mim, é apenas uma forma de estudar mais uma linguagem e também de agilizar meu trabalho.

Fique a vontade para mandar um PR com melhorias (principalmente no cli.py) ou dicas de como melhorar a ferramenta. A API é bem limitada e possui poucos end-points, mas para mim, é extremamente útil.

Um grande abraço!