1. O documento apresenta um fluxo de CI/CD utilizando ferramentas do Google Cloud como Cloud Build, Cloud Run e Cloud Storage.
2. É demonstrado como configurar triggers no Cloud Build para disparar builds em diferentes ambientes e como publicar containers no Cloud Run.
3. Também é mostrado um caso de uso em IoT para fazer over-the-air updates de dispositivos de forma automatizada utilizando essas mesmas ferramentas.
7. Por que CI/CD ?
Vamos automatizar tudo
• Garantir entrega de software de forma continua
• Com qualidade
• Automatizar suite de testes
• Analises estáticas de código
• Evitar erros humanos e muitas ações manuais
• Rotinas para verificar pacotes/dependencias
• Segurança
8. Por que CI/CD ?
Publicação automatizada
• Deploy em diferentes ambientes
• Criar ambiente de teste
• Publicar em ambiente Dev/QA/Prod
• Publicar bibliotecas
• Bibliotecas privadas da empresa
• Maven, pip, NPM, etc
• Gerar arquivos/assets em geral
• Teremos um exemplo disso no final em IoT
10. O que precisamos para entregar de forma continua
Em geral é o que precisamos em todo projeto de CI/CD
• Controle de versão 📖
• Ferramenta de build 🛠
• Ferramenta para rodar testes ✅
• Alertas para o time 🚨
• Ferramenta de publicação 🚀
• Onde publicar ☁
11. Cloud Source Repositories
Controle de versão 📖
• Repositório Git privado e ilimitado
• Sincroniza com Github e Bitbucket ⭐
• Associar erros nos logs com código
• Não recomendo como ferramenta de versionamento principal
• Outras ferramentas resolvem melhor o problema
• Mas ajuda muito para acessar o código de dentro do GCP
• Não precisa de credenciais com o serviço externo pra isso
por ex.
• Tem triggers quando código é modificado.
12. Cloud Build
Ferramenta de CI ✅
• A principal ferramenta que vamos falar hoje
• Utiliza Docker para rodar os comandos, então dá pra
suportar muitos ambientes/linguagens/etc
• Alertas de sucesso/erro no build 🚨
• Via PubSub ou HTTP
• Free Tier pra sempre bem bacana
• 120 minutos de build por dia
13. Cloud Build
Ferramenta de CI ✅
• Pode ser integrado com serviços no Google para rodar
sua aplicação
• App Engine, Kubernetes, Cloud Functions
• Firebase
• Publicar Apps
• Virtualmente qualquer coisa
• Também pode ser usado para publicar arquivos/
bibliotecas/imagens docker.
• Vamos ver um caso de uso até em IoT mais a frente.
14. Cloud Container Registry
Armazenamento de Imagens Docker 🐳
• Repositório de imagens Docker privado.
• Onde vamos armazenar nossa aplicação
• Faz scan de segurança nas imagens 🚨
• Vai virar o Artifact Registry em breve em beta
• Docker, maven, npm, pip, etc
• 5GB gratis de armazenamento 🥰
17. Triggers no Cloud Build
Como ativar seu fluxo de CI/CD
• Push em uma branch
• Filtro por regex
• Push de uma nova tag
• Filtro por regex
• Pull Request
• Integração com o Github
• Sim, a gama não é muito grande, mas dá pro gasto
• Vamos usar o Github Actions para complementar
18. Formato de build no Cloud Build
Como executar seus passos
• Por Dockerfile
• Só faz o build da imagem e salva no Container Registry
• Por arquivo cloudbuild.yaml
• Mais interessante e permite construir seus próprios passos
• Cada passo roda em um container Docker
• Mas os dados ficam salvos em um ambiente comum
22. Variáveis no Cloud Build
Algumas variáveis estão disponíveis
quando alguma trigger é ativada
https://cloud.google.com/cloud-build/
docs/configuring-builds/substitute-
variable-values
24. CNCF Buildpacks !!!
Algumas receitas já prontas de como
empacotar algumas aplicações.
O Google Cloud Buildpacks integra
isso no Cloud Build
https://github.com/GoogleCloudPlatform/
buildpacks
27. 27
IaaS
Infrastructure as a Service
CaaS
Container/Cluster as a
Service
PaaS
Platform as a Service
FaaS/Serverless
Function as a Service
ProvedorVocê
28. 28
Google Cloud Run
Serverless + Containers
• Facilidade de uso do serverless
• Flexibilidade dos Containers
• Acesso via HTTP e gRPC
• Pode rodar de varias formas
• Ambiente todo gerenciado - Cloud Run Managed
• Seu próprio Cluster Kubernetes
• Cloud Run for GKE
29. Subir o container no Cloud Run
Deploy fácil e com escalabilidade automatica
37. 37
Fluxo de CI
Criando ambiente temporários para validação
• Várias Triggers e cloudbuild.yaml diferentes para cada caso
• Uso de variáveis de ambiente
38. 38
Fluxo de CI
Ao publicar na branch development
• Publica no ambiente de dev
39. 39
Fluxo de CI
Ao criar uma release/tag
• Publica no ambiente de produção
41. 41
Fluxo de CI
Fecha Pull Request - ( Via Github Actions )
• Deleta o Serviço criado para o Pull Request
O time do Google fez vários
plugins pro Github Actions
github.com/GoogleCloudPlatform/github-actions
45. 45
CI/CD e Over the Air Updates com Google Cloud
Aplicando as mesmas tecnologias apresentadas aqui
46. 46
Fluxo de CI
Gerando imagem a ser enviada ao device IoT
• Projeto usa PlatformIO
• Tem suporte a build de projetos de IoT de forma facilitada
• Imagem Docker com PlatformIO instalado
• Compila o projeto e salva os binários
• Binários são salvos no Google Cloud Storage
• Criação dos binários ativa uma Cloud Functions
• Salva dados de nova versão no BigQuery
• Uma Cloud Function HTTP é disponibilizada para dispositivo checar
versão e fazer download da imagem.
47. 47
Configuração no Cloud Build
Arquivos ficam salvos no workspace e podem ser salvos no Google Cloud Storage
48. Projetos mostrados aqui
Codigo e Artigos
• Demo em Flask
• https://github.com/alvarowolfx/flask-demo
• Demo de Múltiplos Ambientes
• https://github.com/alvarowolfx/gcloud-ci-cd-demo
• Use Case em IoT
• https://medium.com/google-cloud/serverless-continuous-integration-and-ota-update-flow-using-
google-cloud-build-and-arduino-d5e1cda504bf
• https://github.com/alvarowolfx/gcloud-ota-arduino-update
49. O que mais dá pra fazer ?
Outros Artigos
• Deploy de aplicativos móveis
• Android APK
• https://cloud.google.com/community/tutorials/building-android-apk-with-cloud-build-gradle-
docker-image
• Flutter e Cloud Build
• https://medium.com/@lidemin/flutter-ci-cd-with-cloud-build-android-9cd12ade8306
• Outros ambientes de execução
• Google App Engine
• https://medium.com/google-cloud/continuous-delivery-in-google-cloud-platform-cloud-build-
with-app-engine-8355d3a11ff5
• Cloud Functions
• https://cloud.google.com/cloud-build/docs/deploying-builds/deploy-functions