A integração contínua (CI) e a entrega contínua (CD) são práticas fundamentais no desenvolvimento de software moderno, visando automação e agilidade nos processos de construção, teste e deploy. No contexto do Bitbucket, a implementação de CI/CD pode ser feita de maneira eficiente para diversos cenários. Neste artigo, vamos explorar como configurar um pipeline de CI/CD no Bitbucket, focando na automação de deploys para servidores via SFTP. Essa abordagem proporciona um fluxo contínuo de integração e entrega, garantindo atualizações rápidas e seguras diretamente no ambiente de produção.
Início das configurações
Primeiramente, você deve ter alguns dados do SFTP para iniciar o pipeline. Precisamos do host, user e password. Esses dados seram utilizados para fazer a conexão do pipeline com o seu servidor.
Arquivos para o pipeline no Bitbucket
Nessa abordagem eu utilizei dois tipos de arquivos, um .yml, que é o arquivo base para o pipeline, e um Dockerfile, que fica todos os comandos que utilizaremos para se comunicar com o SFTP. Então na raiz do seu projeto, você pode criar um bitbucket-pipelines.yml e um Dockerfile.
Dockerfile
- Primeira etapa
Primeiro, vamos criar nosso arquivo Dockerfile na raiz do projeto e vamos comentando cada linha para entendermos melhor o que cada uma faz.
No exemplo que vou trazer aqui, inicio o arquivo indicando qual imagem eu quero utilizar para rodar os comandos que vou passar no decorrer do pipeline.
node:12-alpine: É o nome da imagem base que será utilizada. Vamos detalhar os componentes dessa parte:
node: Indica que a imagem base é do tipo Node.js, ou seja, ela contém o ambiente necessário para rodar aplicações feitas com Node.js.
12: Refere-se à versão do Node.js que será utilizada, neste caso, a versão 12.
alpine: Representa uma versão da imagem que é baseada no Alpine Linux, que é uma distribuição Linux leve e otimizada para containers. Vamos utilizar o Alpine, por conta que precisamos se conectar a servidores SFTP e ele oferece um ponto de partida eficiente e seguro, com a flexibilidade para instalar as ferramentas necessárias.
- Segunda etapa
Agora vamos declarar variáveis no ambiente do dockerfile para tornar nosso código mais seguro.
Nesse arquivo eu declarei as variáveis com esses nomes genéricos, mas você pode dar qualquer nome.
- Terceira etapa
Aqui vamos adicionar três dependências necessárias na nossa imagem para que seja possível realizarmos todas as configurações.
bash
O bash oferece diversas vantagens para nossa imagem, com ele podemos escrever scripts simples e poderosos para automatizar diversas etapas do pipeline.sshpass
Nesse exemplo eu vou estar utilizando o sshpass para conectar com o nosso servidor usando user, password e host. É uma abordagem mais simples do que configurarmos chaves SSH para fazermos isso.openssh-client
E, por último, vamos adicionar oopenssh-client
para utilizarmos comandos no nosso servidor SFTP. É a implementação mais amplamente usada de ferramentas de SSH e SFTP, sendo compatível com os padrões de comunicação do protocolo SFTP.
- Quarta etapa
Agora vamos definir o diretório de trabalho dentro do container Docker, ou seja, o diretório onde os comandos subsequentes serão executados e onde o ambiente do container estará "focado" durante a construção e execução do container.
- Quinta etapa
Usar o comando para copiar o package.json e o package-lock.json para o container
- Sexta etapa
Usar o comando para instalar as dependências do projeto usando o seu gerenciador de pacotes de preferência, aqui estou usando o npm.
- Sétima etapa
Usar o comando para copiar o código-fonte do projeto para dentro do container.
- Oitava etapa
Usar o comando para gerar a build do projeto
- Última etapa
Por último, vamos adicionar um comando onde nosso pipeline vai procurar o caminho do SFTP que vamos informar (Aqui você deve criar uma pasta com o mesmo nome da variável criada no início do Dockerfile) e, achando esse caminho, vai fazer o deploy dos arquivos no destinatário.
Finalizando assim nosso arquivo Dockerfile.
bitbucket-pipelines.yml
Agora vamos configurar nosso pipeline.
Devemos criar um arquivo bitbucket-pipelines.yml
na raiz do nosso projeto e adicionarmos o seguinte código:
Da linha 2 até a linha 12, estou informando que quero fazer um teste em todo pull request que for aberto para garantir o funcionamento correto de todo código. Nesse caso, estou testando apenas com o npm run build:prod
para verificarmos se o projeto roda normalmente sem nenhum erro. Se passar, podemos fazer o merge sem problemas.
Da linha 13 até a linha 27, estou informando que tudo que for feito na branch master
, quero que rode nosso arquivo Dockerfile que criamos. Sendo assim, todo novo código que for feito na master ou pr merjado na master, vai ser feito o deploy do projeto atualizado no nosso servidor SFTP.
Top comments (0)