DEV Community

Jardel
Jardel

Posted on

CI/CD no Bitbucket para SFTP

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.

Imagem do código no arquivo dockerfile

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.

Imagem do código no arquivo dockerfile

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.

Imagem do código no arquivo dockerfile

  1. bash
    O bash oferece diversas vantagens para nossa imagem, com ele podemos escrever scripts simples e poderosos para automatizar diversas etapas do pipeline.

  2. 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.

  3. openssh-client
    E, por último, vamos adicionar o openssh-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.

Imagem do código no arquivo dockerfile

  • Quinta etapa

Usar o comando para copiar o package.json e o package-lock.json para o container

Imagem do código no arquivo dockerfile

  • 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.

Imagem do código no arquivo dockerfile

  • Sétima etapa

Usar o comando para copiar o código-fonte do projeto para dentro do container.

Imagem do código no arquivo dockerfile

  • Oitava etapa

Usar o comando para gerar a build do projeto

Imagem do código no arquivo dockerfile

  • Ú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.

Imagem do código no arquivo dockerfile

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:

Image description

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)