Saiba mais sobre implementação contínua com o Bitbucket Pipelines

Você vai ver neste guia como pode implementar um pipeline de implementação contínua com o Bitbucket Pipelines.

Sten Pittet Sten Pittet

Em desenvolvimento de software, você com frequência precisa realizar concessões difíceis ao desenvolver um aplicativo. Se quiser ir mais rápido, a crença geral é que precisará abrir mão da qualidade de suas versões. Porém, há uma prática de desenvolvimento que pode lhe permitir poupar tempo enquanto lança mais rapidamente: implementação contínua.

Com a implementação contínua, você elimina o estresse de implementar software tornando-o um processo automatizado. Sua equipe de desenvolvimento não precisa mais parar e mudar o contexto para uma versão – o código é enviado aos seus clientes assim que um desenvolvedor tiver terminado o trabalho.

Você vai ver neste guia como pode implementar um pipeline de implementação contínua com o Bitbucket Pipelines.

Entrega contínua vs. implementação contínua

Entrega contínua é a prática de garantir que seu código esteja sempre pronto para ser liberado, mesmo que você não esteja implementando todas as alterações na produção. Recomenda-se atualizar sua produção com a maior frequência possível para garantir que você mantenha o escopo das mudanças pequeno, mas, em última análise, você esteja no controle do ritmo de seus lançamentos.

Na implementação contínua, as novas alterações enviadas ao repositório são implementadas de forma automática na produção se passarem nos testes, o que dá mais ênfase (leia-se: pressão) à cultura de teste, mas é uma ótima maneira de acelerar o ciclo de feedback com os clientes.

Diagrama mostrando a diferença entre implementação contínua e desenvolvimento contínuo | Atlassian CI/CD

Requisitos

Tempo:

30 minutos

Público-alvo:

Você é novo na implementação contínua e/ou no Bitbucket Pipelines

Pré-requisito:

Experimente grátis

Configurando um pipeline de implementação contínua

A implementação contínua é uma ótima maneira para as equipes acelerarem o desenvolvimento. Ela elimina os impedimentos relacionados ao processo de aprovação do lançamento e permite que os desenvolvedores obtenham feedback dos clientes assim que concluírem seu trabalho. Os itens são mais fáceis de identificar e corrigir e há menos troca de contexto, pois não há mais tempo de lançamento.

Configurar um pipeline de implementação contínua com o Bitbucket Pipelines é muito fácil. Vamos ver como fazer a configuração com um aplicativo Hello World simples que passa por um ambiente de staging e testes de aceitação antes da liberação automática para produção.

Você pode encontrar a origem do aplicativo Hello World no repositório vinculado abaixo.

Preparando a implementação para o Heroku

Antes de começar, precisamos adicionar algumas variáveis de ambiente para poder implementar nosso aplicativo no Heroku:

  • HEROKU_API_KEY: Você pode encontrar sua chave de API em sua conta Heroku
  • HEROKU_STAGING: nome do seu ambiente de preparação
  • HEROKU_PROD: nome do seu ambiente de produção

Acesse Pipelines > Variáveis de ambiente nas configurações do seu repositório para adicionar as variáveis.

Configuração de variáveis de ambiente para implementar no Heroku

Configuração de variáveis de ambiente para implementar no Heroku

Estamos usando Heroku neste guia, certamente é possível adaptar este exemplo a outros serviços de hospedagem. Você pode encontrar outros guias de implementação na documentação.

Configuração do pipeline

Nosso fluxo de trabalho será simples:

  • Compilar o aplicativo.
  • Executar testes no build.
  • Implementar para staging.
  • Executar alguns testes de aceitação no staging.
  • Implementar para a produção.

Você vai ver que é muito fácil criar a configuração de pipeline correspondente. A gente começa adicionando a implementação automática ao ambiente de staging para garantir que ela esteja correta em cada push.

image: node:4.6.0   # Doing a full clone to be able to push back to Heroku. clone:   depth: full   pipelines:   branches:     main:       - step:           script: # Modify the commands below to build your repository.             - npm install             - npm test             - git push https://heroku:$HEROKU_API_KEY@git.heroku.com/$HEROKU_STAGING.git main 

Você vai ver que a gente está usando um a clone completo para garantir que o Heroku não rejeite o push. A gente também usa um pipeline específico da ramificação para garantir que apenas implementemos o staging para alterações enviadas na principal e não em outras ramificações. Você pode enviar essa configuração para o Bitbucket para vê-la em ação.

A implementação automática para staging está concluída


Nesse estágio, agora temos nosso aplicativo Olá, Mundo implementado em staging.

Agora a gente pode passar para a próxima etapa e adicionar os testes de aceitação. Os testes de aceitação estão aqui para garantir que o aplicativo tenha o comportamento esperado em um ambiente de produção (staging). O objetivo é remover as incertezas devido às diferenças na configuração entre o ambiente usado para testar a construção e a produção.

Se você olhar o código do nosso aplicativo, nosso teste está fazendo algo extremamente simples, pois está apenas procurando a presença da string "Hello World" na página. Em um aplicativo real, recomendamos ter testes de aceitação que vão muito além e verificar se todos os serviços subjacentes usados por seu aplicativo (banco de dados, cache, terceiros, etc.) estão funcionando bem.

Então, vamos adicionar nosso teste logo após nossa implementação para o staging.

image: node:4.6.0   # Doing a full clone to be able to push back to Heroku. clone:   depth: full   pipelines:   branches:     main:       - step:           script: # Modify the commands below to build your repository.             - npm install             - HEROKU_STAGING=$HEROKU_STAGING npm test acceptance-test             - git push https://heroku:$HEROKU_API_KEY@git.heroku.com/$HEROKU_STAGING.git main             - npm test acceptance-test  

Depois de enviar esta nova configuração para o Bitbucket, podemos ver nosso pipeline ser concluído com sucesso.

O Bitbucket Pipelines agora executa testes de aceitação depois de implementar para preparação

Tudo o que resta agora é adicionar nossa implementação de produção no final para concluir nosso pipeline de implementação contínua.

image: node:4.6.0   # Doing a full clone to be able to push back to Heroku. clone:   depth: full   pipelines:   branches:     main:       - step:           script: # Modify the commands below to build your repository.             - npm install             - npm test             - git push https://heroku:$HEROKU_API_KEY@git.heroku.com/$HEROKU_STAGING.git main             - HEROKU_STAGING=$HEROKU_STAGING npm test acceptance-test             - git push https://heroku:$HEROKU_API_KEY@git.heroku.com/$HEROKU_PROD.git main  

Um push final para o Bitbucket vai levar as alterações de código por todo o pipeline, construindo e testando o código e depois implementando na produção após verificar com sucesso se o staging funciona. Neste caso, a página inicial foi atualizada com uma mensagem diferente para garantir que seria implementada em todo o caminho para a produção.

Nossa nova mensagem foi para a produção como esperado!

Você pode verificar o pipeline para ter certeza de que passou corretamente por todas as diferentes fases.

Verificando se o código passou pelo pipeline

É importante destacar a relevância de ter um bom pacote de teste, bem como de ter monitoramento em tempo real em vigor antes de seguir em frente e aplicar implementação contínua para seus próprios repositórios. De agora em diante, as alterações vão direto para produção assim que são enviadas ao branch principal. Assim, é ainda mais importante garantir que seus testes automatizados verifiquem as partes fundamentais do seu aplicativo. Além disso, você precisará de ferramentas de monitoramento para detectar alterações que afetem negativamente suas instâncias de produção, seja uma falha total ou um serviço degradado.

Você pode encontrar a fonte final no repositório do Bitbucket Cloud vinculado abaixo.