Concrete Logo
Hamburger button

Fluxo CI/CD com Bitbucket Pipelines

  • Blog
  • 4 de Julho de 2018

Olá! Vamos conhecer hoje o Bitbucket Pipelines, uma ótima ferramenta para continuous integration e deployment. Neste primeiro post da série, vamos ver como configurar um fluxo de CI com um exemplo simples de Node.js e vamos construindo nosso aplicativo. Em seguida, vamos ver como podemos implementar um teste simples e, finalmente, vamos aprender como conectá-lo ao Bitbucket Pipelines.

Como funciona?

Acredito que a maioria dos desenvolvedores já está habituada a trabalhar com o bitbucket para armazenar e versionar o código de seus projetos. O que poucos sabem é que é possível gerenciar pipeline de CI/CD na mesma ferramenta. A sua configuração é feita em formato YAML e é possível trabalhar com projetos Node.js, Java, Python, configurar variáveis de ambiente, chaves SSH e muito mais, para realizar deploys direto na nuvem.

Para quem trabalha com a versão premium da ferramenta, é possível realizar 1000mins/mês em builds. Caso queira saber mais detalhes dos planos oferecidos, recomendo consultar este link.

Para começar, este tutorial mostra que tudo o que você precisa é de uma conta no Bitbucket, o git e o Node instalados na sua máquina. Ah! E vontade de aprender, claro. (:

1. Construindo uma aplicação Hello World

O objetivo da aplicação é exibir um Hello World no navegador, simples assim. Primeiro, vamos criar um repositório e executar um npm init para inicializar um novo projeto Node.

Feito isso, vai ser criado o arquivo package.json em seu diretório, com o conteúdo abaixo:

Agora vamos instalar o Express, um framework web para o Node, e vamos salvá-lo como uma dependência com o parâmetro –save. É importante salvá-lo explicitamente como uma dependência, pois vai permitir que, mais tarde, o Bitbucket Pipelines saiba quais dependências precisam ser instaladas para testar a nossa aplicação.

Crie um arquivo chamado server.js. Para isso, copie e cole o conteúdo abaixo:

Para finalizar esse passo, vamos criar outro arquivo de nome index.js:

Até aqui, nosso diretório deve ter a seguinte estrutura:

Vá até o arquivo package.json abaixo da linha “scripts” e adicione:

Vamos agora executar o comando npm start e acessar o endereço http://localhost:3000 para ver o nosso código em ação:

2. Escrevendo os testes da aplicação

Agora que temos a nossa aplicação em funcionamento, podemos começar a escrever um teste para ela. Nesse caso, nos certificaremos de que ela sempre exiba “Hello World!” corretamente quando o usuário chamar a URL base. Para fazer isso, vamos usar uma estrutura de teste chamada Mocha e uma biblioteca chamada supertest, que vai ajudar a gerenciar solicitações HTTP em nossos testes.
Execute o comando abaixo em seu terminal para instalar o Mocha e o supertest como dependências de desenvolvimento da aplicação.

Vamos criar um diretório de nome test e dentro dele o arquivo test.js com o seguinte conteúdo:

Agora editamos o arquivo package.json, substituindo a linha “test”: “echo \”Error: no test specified\” && exit 1″ por “test”: “mocha”. Se executarmos o comando ‘npm test’ no diretório corrente, vamos ter o resultado do teste que acabamos de escrever:

3. Implementando o fluxo de CI com Bitbucket Pipelines

Agora que temos a aplicação pronta e os testes escritos, vamos habilitar a Pipeline no repositório do projeto e ver a mágica acontecer.

Em sua conta do Bitbucket, crie um repositório para o nosso projeto. Neste exemplo, criei o meu repositório com o nome de nodejs-tutorial-ci. Feito isso, vamos fazer um push do nosso projeto para o repositório remoto recém criado.

Com o repositório em questão aberto, navegue até a opção Pipelines do lado esquerdo da tela:

Neste momento, você deve visualizar uma tela semelhante a essa, com as opções de template e os tipos de aplicação que podemos trabalhar com o Bitbucket Pipelines:

Como estamos trabalhando com o Node, vamos escolher a opção JavaScript (node.js) para fazer o build e os testes da nossa aplicação. Feito isso, ele vai nos trazer um arquivo YAML com os passos necessários para iniciar nosso fluxo de CI:

Vamos comitar o arquivo e… voilà! Habemus integração contínua com o Bitbucket!

Lembrando que no arquivo YAML, temos uma infinidade de argumentos que podem ser usados para especificar o seu fluxo de integração contínua e deploy.

Para mais detalhes, recomendo a leitura da documentação que pode ser acessada neste link.

O código usado de exemplo nesse post está disponível aqui.

No próximo post, vamos focar na construção de cada um desses steps para realizar o deploy da nossa aplicação na AWS.

Até lá!

Aqui na Concrete, o capítulo de DevOps é o motor para a agilidade dos times, responsável por pensar estrategicamente na estrutura e arquitetura final, garantindo a qualidade. Justamente por automatizar processos e melhorar o desempenho do time de desenvolvimento, nossos “DevOps” trabalham desde o início da criação dos produtos, implementando processos de integração e entrega contínua, utilizando servidores de CI, repositórios de código, scripts de automatização e relatórios. Quer trabalhar com os melhores? Só vem! concrete.com.br/vagas