Dicas para tarefas de script com o Bitbucket Pipelines

Conheça nossas cinco dicas para automatizar tarefas manuais com o Bitbucket Pipelines. 

Sten Pittet Sten Pittet

Com o Bitbucket Pipelines, você pode adotar rapidamente uma integração contínua ou fluxo de trabalho de entrega contínua para seus repositórios. Uma parte essencial desse processo é transformar processos manuais em scripts que podem ser executados automatizados por uma máquina sem a necessidade de intervenção humana. Mas, às vezes, pode ser complicado automatizar tarefas, pois podem surgir problemas com autenticação, instalação de dependências ou problemas de relatório. Este guia vai ajudar com algumas dicas para escrever scripts!

Requisitos

Tempo:

30 minutos

Público-alvo:

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

Pré-requisito:

Experimente grátis

#1 - Não registre informações confidenciais!

Antes de prosseguir no mundo da automação, você precisa revisar seus logs e certificar-se de não enviar dados confidenciais, como chaves de API, credenciais ou qualquer informação que possa comprometer seu sistema. Assim que você começa a usar o Bitbucket Pipelines para executar seus scripts, os logs são armazenados e lidos por qualquer pessoa que tenha acesso ao seu repositório.

#2 - Use chaves SSH para se conectar a servidores remotos

A autenticação geralmente é uma das partes mais problemáticas da automação. As chaves SSH têm a dupla vantagem de tornar a conexão com servidores remotos fácil de gerenciar e muito seguras. Com o Bitbucket Pipelines, você pode gerar com facilidade um novo par de chaves para ser usado em cada pipeline executado para se conectar a servidores remotos.

Gerar chaves SSH diretamente do Bitbucket Pipelines

Você só vai precisar copiar a chave pública em seu servidor remoto para poder se conectar a ele a partir do pipeline em execução. Por exemplo, uma vez que as chaves SSH são configuradas para no servidor (você pode usar um URL ou endereço IP), o script abaixo listaria os arquivos no diretório /var/www sem a necessidade de fornecer uma senha.

bitbucket-pipelines.yml

image: node:4.6.0
   pipelines:
      default:
        - step:
           script:
              - ssh <user>@<server> ls -l /var/www

Não se esqueça de registrar todos os servidores aos quais você precisa se conectar na seção Conhecer hosts. Caso contrário, seu pipeline vai ficar preso, aguardando aprovação, quando você tentar se conectar ao servidor remoto.

#3 - Use variáveis de ambiente seguras para chaves e credenciais de API

Se você precisar usar uma API remota como parte de seus scripts, é provável que seu provedor de API permita que você use seus recursos protegidos com uma chave de API. Você pode adicionar credenciais com segurança aos Bitbucket Pipelines usando variáveis de ambiente seguras. Uma vez salvo, você pode chamá-los em seus scripts, e eles ficam mascarados na saída do log.

O Bitbucket Pipelines mantém variáveis seguras mascaradas nos logs

#4 - Execute comandos no modo não interativo

Se você precisar instalar dependências como parte de seu script, certifique-se de que ele não solicite validação ou entrada ao usuário. Consulte a documentação dos comandos que você está usando para ver se há uma marcação que permite a execução não interativa.

Por exemplo, a marcação -y no comando abaixo vai instalar o PostgreSQL em um servidor Debian.

apt-get install -y postgresql

E a marcação -q permite a execução não interativa de comandos do Google Cloud SDK.

gcloud -q app deploy app.yaml

#5 - Crie suas próprias imagens do Docker que estão prontas para uso

Instalar as dependências necessárias para que o pipeline seja executado pode ser demorado. Você pode economizar muito tempo de execução criando sua própria imagem do Docker com as ferramentas básicas e pacotes necessários para compilar e testar o aplicativo.

Por exemplo, na seguinte configuração de Pipelines, instalamos o AWS CLI no início para usá-lo posteriormente para implementar o aplicativo no AWS Elastic Beanstalk.

bitbucket-pipelines.yml

image: node:7.5.0
   pipelines:
      default:
       - step:
          script: # Modify the commands below to build your repository.
           - apt-get update && apt-get install -y python-dev
           - curl -O https://bootstrap.pypa.io/get-pip.py
           - python get-pip.py
           - pip install awsebcli --upgrade
           - npm install
           - npm test
           - eb init helloworld-beanstalk-bbp -r eu-west-1 -p node
           - eb deploy hw-eb-tutorial

O problema aqui é que a CLI do AWS não muda a cada commit, o que significa que estamos perdendo algum tempo instalando uma dependência que poderia ser agrupada por padrão.

O Dockerfile a seguir pode ser usado para criar uma imagem personalizada do Docker pronta para implementações do Elastic Beanstalk.

Dockerfile

FROM node:7.5.0 
RUN apt-get update \   && apt-get install -y python-dev \   && cd /tmp \   && curl -O https://bootstrap.pypa.io/get-pip.py \   && python get-pip.py \   && pip install awsebcli --upgrade \   && apt-get clean \   && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

Se eu o colocar na referência spittet/my-custom-image, posso simplificar minha configuração de Bitbucket Pipelines para conter apenas os comandos necessários para compilar, testar e implementar meu aplicativo.

bitbucket-pipelines.yml

image: spittet/my-custom-image
   pipelines:
     default:
       - step:
            script: # Modify the commands below to build your repository.
              - npm install
              - npm test
              - eb init helloworld-beanstalk-bbp -r eu-west-1 -p node
              - eb deploy hw-eb-tutorial

Se eu o colocar na referência spittet/my-custom-image, posso simplificar minha configuração de Bitbucket Pipelines para conter apenas os comandos necessários para compilar, testar e implementar meu aplicativo.

Um conselho final: scripts também são código

Essas dicas devem ajudá-lo a transformar tarefas manuais em processos automatizados que podem ser executados repetidamente e de forma confiável por um serviço como o Bitbucket Pipelines. No final, eles serão os guardiões de seus lançamentos e ferramentas poderosas, capazes de acionar a implementação de todos os seus ambientes de produção em vários servidores e plataformas.

É por esse motivo que você precisa tratar os scripts de automação como código e conduzi-los pela mesma revisão e processo de qualidade que você tem para o código. Por sorte, você pode fazer essas ações com facilidade com o Bitbucket, já que a configuração de pipeline vai ser verificada com o código, permitindo que você crie solicitações de pull no contexto certo.

E, por último, não se esqueça de executar scripts em um ambiente de teste antes de aplicá-los na produção: esses minutos extras podem evitar que você apague os dados de produção por engano.