Dicas para tarefas de script com o Bitbucket Pipelines
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.
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.
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.
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.