O Bitbucket Pipelines é uma ferramenta poderosa que permite a automação de builds, testes e implantações diretamente do Bitbucket. Para um profissional de DevOps, compreender e utilizar essa ferramenta pode otimizar significativamente o fluxo de trabalho e garantir maior eficiência nas entregas de software. Neste artigo vamos explorar os primeiros passos para configurar e utilizar o Bitbucket Pipelines.
Introdução ao Bitbucket Pipelines
Um dos pontos positivos do Bitbucket é que ele faz parte do ecossistema de soluções da Atlassian, que também é proprietária de ferramentas como Zendesk, Jira, Trello e Confluence. Se você ainda não conhece essas ferramentas, um dia muito provavelmente irá conhecer pelo seu potencial ou pela sua popularidade na indústria de desenvolvimento de software. O ponto positivo é a facilidade de integração entre as ferramentas e todo suporte ao ecossistema que você tem, deixando tudo centralizado e fácil para administrar.
Assim como seus concorrentes, o Bitbucket Pipelines é uma ferramenta focada em CI/CD, possibilitando automação de processos, compilação, testes de código e deploys.
Estrutura do Bitbucket Pipelines
Dentro do Bitbucket, temos a tradicional hierarquia de Organizações, Projetos e Repositórios. Dentro de cada repositório, você pode criar uma pipeline de execução.
Dentro do repositório, os pré requisitos que você tem que ter para executar esse passo a passo são:
- ter um código versionado;
- ter permissões suficientes para alterar as configurações básicas do repositório.
Em configurações, habilite o repositório para executar a pipeline. A própria ferramenta irá sugerir um template para facilitar a sua vida. Nesse momento, podemos ignorar e aceitar a sugestão da ferramenta apenas para criar nosso exemplo.
Esse arquivo é padrão e obrigatório para criarmos pipelines no Bitbucket, ou seja, ele sempre precisará estar na raiz do projeto e se chamar bitbucket-pipelines.yml.
Pipeline na prática
Para fins didáticos, utilizaremos um exemplo de “Hello world” em Node.js que está disponível aqui. Neste exemplo básico, definiremos apenas a instalação dos pacotes do Node.js. Abaixo temos o conteúdo do arquivo bitbucket-pipelines.yml, que define a estrutura da pipeline.
image: node:lts-alpine3.19
pipelines:
default:
- step:
name: Build and Test
caches:
- node
script:
- npm install
Vamos analisar cada linha do código do arquivo bitbucket-pipelines.yml fornecido e entender o que ela faz:
image: define a imagem do Docker a ser usada para executar o passo. Neste caso, a imagem “node:lts-alpine3.19” será usada, que contém o Node.js instalado.
pipelines: define a seção “pipelines” do arquivo YAML. As pipelines são usadas para definir os passos ou estágios de um processo de integração contínua.
default: define a seção “default” dentro da seção “pipelines”. A seção “default” é usada para definir os passos padrão que serão executados quando nenhum outro estágio específico for especificado.
– step: define um passo dentro da seção “default”. Um passo é uma tarefa específica que será executada durante o processo de integração contínua.
name: Build and Test: define o nome do passo como “Build and Test”. É uma descrição opcional que ajuda a identificar o objetivo do passo.
caches: define a seção “caches” dentro do passo. Os caches são usados para armazenar dados em cache entre as execuções dos passos, a fim de melhorar o desempenho.
– node: define um cache chamado “node”. Neste caso, o cache “node” será usado para armazenar as dependências do Node.js, a fim de evitar a necessidade de instalá-las novamente a cada execução.
script: define a seção “script” dentro do passo. A seção “script” contém os comandos que serão executados durante o passo. Aqui é onde você preenche todos os passos que sua aplicação deverá seguir, seja instalação de pacotes, execução de testes e etc. Cada comando pode ser representado separadamente assim:
script:
- npm install
- npm test
- npm x
Variáveis e Segredos
Podemos utilizar o recurso de variáveis e segredos no Bitbucket para armazenar informações sensíveis, parâmetros de configuração que variam entre ambientes e etc. Dentro de configurações de repositório, em Pipelines, encontramos a opção para criar variáveis.
Para utilizar as variáveis dentro do arquivo YAML, basta referenciar o nome da variável criada, precedido de $, por exemplo:
script:
- npm install
- npm test
- echo $Teste
Scripts
Uma outra funcionalidade muito importante é a capacidade de executar scripts dentro da pipeline. Desde que o arquivo exista dentro do repositório em que você irá criar a pipeline, você também consegue criar scripts bash para serem executados dentro dela:
script:
- ./deploy.sh
Triggers: decidindo quando uma pipeline será executada
No contexto de DevOps e integração contínua (CI), as triggers de pipeline são mecanismos essenciais para automatizar e controlar a execução dos pipelines com base em eventos específicos. No Bitbucket Pipelines, as triggers definem quando e como um pipeline deve ser iniciado, oferecendo flexibilidade e controle para diferentes fluxos de trabalho.
Para o Bitbucket, temos alguns tipos de trigger e iremos explorá-las para entender melhor como configurar a execução de sua pipeline.
Triggers de Branches
Nessa configuração, você poderá executar diferentes scripts para branchs distintas. Para a branch Master, a pipeline irá executar a mensagem: “Pipeline para a branch master” e para a Develop “Pipeline para a branch develop”. Esse tipo de estratégia é excelente quando você precisa economizar tempo de pipelines, executando apenas trechos ou eliminando a necessidade de executar o mesmo script sempre:
pipelines:
branches:
master:
- step:
script:
- echo "Pipeline para o branch master"
develop:
- step:
script:
- echo "Pipeline para o branch develop"
Triggers de Pull Requests
Executam pipelines quando um pull request é criado ou atualizado. Isso é útil para garantir que as alterações propostas não introduzem erros.
pipelines:
pull-requests:
‘**’:
- step:
script:
- echo "aqui só vai executar no momento do Pull Request"
Triggers Agendadas ou CRON
Permitem executar pipelines em horários específicos, independentemente de commits ou pull requests. Isso é útil para tarefas de manutenção, backups ou testes periódicos. Esse tipo de operação é muito utilizado para fazer check-ups durante a madrugada ou fora do horário comercial, fazendo com que você desafogue a maior parte das execuções excessivas ou que demore muito para um horário menos concorrido de execução. Para isso, basta criar a pipeline do tipo custom e agendar manualmente pela interface no menu Pipeline > Schecules.
Histórico de execução da pipeline
Dentro da estrutura do repositório, todas as execuções da pipeline ficarão sempre no menu Pipelines. Lá você pode ver o histórico, erros, ou até mesmo executar novamente uma pipeline:
A pipeline que usamos para exemplo didático terá o visual dessa forma:
Aqui, podemos ver que a numeração de execução da pipeline, o commit que disparou o gatilho, a pessoa responsável pela execução, o tempo de execução e em que momento do dia essa pipeline foi executada.
Ao lado direito, podemos explorar todos os logs de cada execução que programamos também. No nosso exemplo, colocamos apenas a instalação de dependências, clicarmos na linha do npm install para ver o seu log e todo o output de sua execução.
Acelere a sua carreira conosco!
A Mentoria DevOps é um programa de mentoria de 12 meses com encontros semanais ao vivo, com um grupo seleto e restrito, onde estaremos do seu lado para mantê-lo relevante e atualizado no mercado de tecnologia, aprendendo e implementando as melhores práticas e ferramentas de DevOps.
Clique aqui para entrar na prioridade pela melhor oferta de lançamento
Conclusão
Agora que você já deu os primeiros passos na construção de pipelines no Bitbucket, é importante praticar e explorar a ferramenta. Você pode, por exemplo, tentar criar sua primeira pipeline para um projeto existente, ou criar um novo projeto simples para praticar. Como vimos, o Bitbucket dispõe de diversos recursos para permitir a criação de um ecossistema de DevOps robusto e eficiente.