Quase um deploy contínuo!
Ainda não é um deploy contínuo (mas falta um pouquinho): usando os triggers do pipeline no Bitbucket.
Continuando
Em texto anterior, Desenvolvendo e publicando um site Javascript na Amazon AWS, foi mostrado como publicar automaticamente um site em javascript na Amazon, sem precisar de um servidor, e sem precisar mandar publicar.
Uma forma de deploy contínuo, usando os pipelines do Bibucket. Ideia simples: alterou a master, se os testes passarem, um bucket S3 é atualizado, que por sua vez, está atrelado a uma distribuição CloudFront.
Outro problema
Até aí tudo bem, com essas configurações, conseguimos ter todo o processo de homologação sob controle. Mas e a produção? Um script pra publicar?
Não!
Nova solução
Tentando resolver esse problema aqui na CARGOBR, deparei-me com essa belezura que é um trigger por tag criado no git.
Criou uma tag no seu repositório, se ele bater com o padrão informado, uma ação é disparada. O padrão aqui exemplificado é: se uma tag começando com production-
for criada no repositório, ela será publicada em produção.
Assim temos um processo automático de geração para homologação, e quando as coisas estiverem bem, vai pra produção, tudo feito ou através da interface do Bitbucket, ou linha de comando mesmo, com git push --tags
.
Para isso, basta alterar o bitbucket-pipelines.yml
(veja o texto citado no começo), e adicionar o elemento tags
:
tags:
production-*:
- step:
name: Build assets
image: node:9.11-alpine
caches:
- node
script:
- npm install
- npm run-script build
artifacts:
- dist/**
- step:
name: Deploy assets to AWS S3 - Production
image: python:3.6-alpine3.7
deployment: production
script:
- pip install awscli
- aws s3 sync --acl public-read --content-encoding utf-8 --delete dist/ $CARGOBR_S3_BUCKET_PRODUCTION
- aws cloudfront create-invalidation --distribution-id $CARGOBR_CF_DISTRIBUTION_ID_PRODUCTION --paths="/*"
Três pontos a atentar:
- Adicionou-se a glob para verificar se a tag interessa ou não (
production-*:
). - Os passos são os mesmos, eu sei, está um copiar e colar do passo anterior.
- As variáveis de ambiente para produção são diferentes de homologação!
Com isso:
- Ninguém da equipe de desenvolvimento precisa de acesso ao painel da Amazon.
- A equipe faz deploy numa boa, sem depender de mais ninguém.
- Pode-se ter vários ambientes de homologação, automáticos até o fim, ou por tag.