Close

Dicas para tarefas de script com o Bitbucket Pipelines

Foto de Sten Pittet
Sten Pittet

Autor colaborador

Com o Bitbucket Pipelines, você pode adotar com rapidez a integração contínua ou fluxo de trabalho de entrega contínua para os repositórios. Parte essencial desse processo é transformar processos manuais em scripts que podem ser executados automatizados por 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!

Tempo

30 minutos

Público-alvo:

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

Etapa 1: não registre informações confidenciais!

Antes de prosseguir no mundo da automação, você precisa revisar os logs e se certificar de não enviar dados confidenciais, como chaves de API, credenciais ou qualquer informação que possa comprometer o 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.

Etapa 2: use chaves SSH para se conectar a servidores remotos

A autenticação no geral é 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 no 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 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 disponibilizar a 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 Hosts conhecidos. Caso contrário, o pipeline vai ficar preso, aguardando aprovação, quando você tentar se conectar ao servidor remoto.

Etapa 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

Etapa 4: execute comandos no modo não interativo

Se você precisar instalar dependências como parte do script, se certifique 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á 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

Etapa 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 a 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 usar ele e depois 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 a configuração de Bitbucket Pipelines para conter apenas os comandos necessários para compilar, testar e implementar o 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

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.

Sten Pittet
Sten Pittet

Estou no ramo de software há 10 anos, em diversas funções, de desenvolvimento a gerenciamento de produto. Depois de passar os últimos 5 anos na Atlassian trabalhando em Ferramentas de Desenvolvimento, agora escrevo sobre como compilar software. Fora do trabalho, estou aprimorando minhas habilidades como pai de uma criancinha maravilhosa.


Compartilhar este artigo
Próximo tópico

Leitura recomendada

Marque esses recursos para aprender sobre os tipos de equipes de DevOps ou para obter atualizações contínuas sobre DevOps na Atlassian.

Ilustração do DevOps

Comunidade de DevOps

Ilustração do DevOps

Caminho de aprendizagem de DevOps

Ilustração do mapa

Comece gratuitamente

Inscreva-se para receber a newsletter de DevOps

Thank you for signing up