https://www.google.com/url?
sa=i&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FWebAssembly&psig=AOvVaw01ph2uPKCm79kmbF
AW&ust=1594860562007000&source=images&cd=vfe&ved=0CAIQjRxqFwoTCOCK-
dyEzuoCFQAAAAAdAAAAABAD
Ambiente de CI/CD
com Google Cloud
Alvaro Viebrantz
Google Developer Expert for IoT and Product Engineer at Leverege
aviebrantz.com
@alvaroviebrantz
MOTIVAÇÃO DESSA TALK
“COMO CONFIGURAR DEPLOY
POR GIT IGUAL NO HEROKU ?”
ATENÇÃO
DÁ PRA FAZER TUDO
EM QUALQUER CLOUD
O que vamos ver hoje ?
Por que
CI/CD ?
Ferramentas
no GCP
Demos
Por que CI/CD ?
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
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
Ferramentas
no Google Cloud
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 ☁
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.
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
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.
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 🥰
Google Container Registry
Imagens docker armazenadas
Como funciona
o Cloud Build
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
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
Exemplos com cloudbuild.yaml
Alguns containers são disponibilizados pelo Google
Exemplos com cloudbuild.yaml
Containers no Docker Hub funcionam
Exemplos com cloudbuild.yaml
Podem ser parametrizado
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
“Ah mas no Heroku não
precisava de tudo isso”
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
Revendo nosso Fluxo de CI/CD
Com ferramentas do Google Cloud
Onde publicar ?
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
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
Subir o container no Cloud Run
Deploy fácil e com escalabilidade automatica
Publicando no Cloud Run com Cloud Build
Tem um step pronto pra isso
DEMO #1
“QUERO FAZER IGUAL NO HEROKU”
32
GitOps com Cloud Run
Vamos publicar uma aplicação Python no Cloud Run
main.py requirements.txt Dockerfile
33
GitOps com Cloud Run
Quase igual instalar programa no
Windows. Next > Next > Finish
34
GitOps com Cloud Run
35
GitOps com Cloud Run
Quase igual instalar programa no Windows. Next > Next > Finish
DEMO #2
FLUXO MAIS
COMPLETO DE CI/CD
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
Fluxo de CI
Ao publicar na branch development
• Publica no ambiente de dev
39
Fluxo de CI
Ao criar uma release/tag
• Publica no ambiente de produção
40
Fluxo de CI
Desenvolvedor cria um Pull Request
• Cria/Deploy um serviço no Cloud Run
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
DEMO #3
MEU SITE PESSOAL
43
Fluxo de CI
Dessa vez utilizei apenas o Github Actions
• Deploy no Firebase Hosting
Caso de Uso em IoT
45
CI/CD e Over the Air Updates com Google Cloud
Aplicando as mesmas tecnologias apresentadas aqui
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
Configuração no Cloud Build
Arquivos ficam salvos no workspace e podem ser salvos no Google Cloud Storage
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
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
REFERENCIAS
Referencias
Mais material de estudo
• https://medium.com/swlh/how-to-ci-cd-on-google-cloud-platform-1e631cded335
• https://cloud.google.com/devops
• https://github.com/GoogleCloudPlatform/github-actions/blob/master/get-secretmanager-secrets/
README.md
• https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-
actions#github-context
• https://cloud.google.com/cloud-build/docs/configuring-builds/substitute-variable-values#yaml_2
• https://cloud.google.com/cloud-build/docs/building/build-go#building_using_go_modules
• Cloud Run Quickstart - https://www.youtube.com/watch?v=3OP-q55hOUI
• https://fireship.io/lessons/ci-cd-with-google-cloud-build/
Obrigado!
aviebrantz.com
youtube.com/alvaroviebrantz
twitch.tv/alvaroviebrantz
Alvaro Viebrantz
Google Developer Expert for IoT and Product Engineer at Leverege
aviebrantz.com
@alvaroviebrantz

Ambiente de CI/CD com Google Cloud

  • 1.
  • 2.
  • 3.
    “COMO CONFIGURAR DEPLOY PORGIT IGUAL NO HEROKU ?”
  • 4.
    ATENÇÃO DÁ PRA FAZERTUDO EM QUALQUER CLOUD
  • 5.
    O que vamosver hoje ? Por que CI/CD ? Ferramentas no GCP Demos
  • 6.
  • 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
  • 9.
  • 10.
    O que precisamospara 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 Controlede 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 deCI ✅ • 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 deCI ✅ • 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 Armazenamentode 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 🥰
  • 15.
  • 16.
  • 17.
    Triggers no CloudBuild 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 buildno 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
  • 19.
    Exemplos com cloudbuild.yaml Algunscontainers são disponibilizados pelo Google
  • 20.
  • 21.
  • 22.
    Variáveis no CloudBuild Algumas variáveis estão disponíveis quando alguma trigger é ativada https://cloud.google.com/cloud-build/ docs/configuring-builds/substitute- variable-values
  • 23.
    “Ah mas noHeroku não precisava de tudo isso”
  • 24.
    CNCF Buildpacks !!! Algumasreceitas já prontas de como empacotar algumas aplicações. O Google Cloud Buildpacks integra isso no Cloud Build https://github.com/GoogleCloudPlatform/ buildpacks
  • 25.
    Revendo nosso Fluxode CI/CD Com ferramentas do Google Cloud
  • 26.
  • 27.
    27 IaaS Infrastructure as aService 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 containerno Cloud Run Deploy fácil e com escalabilidade automatica
  • 30.
    Publicando no CloudRun com Cloud Build Tem um step pronto pra isso
  • 31.
    DEMO #1 “QUERO FAZERIGUAL NO HEROKU”
  • 32.
    32 GitOps com CloudRun Vamos publicar uma aplicação Python no Cloud Run main.py requirements.txt Dockerfile
  • 33.
    33 GitOps com CloudRun Quase igual instalar programa no Windows. Next > Next > Finish
  • 34.
  • 35.
    35 GitOps com CloudRun Quase igual instalar programa no Windows. Next > Next > Finish
  • 36.
  • 37.
    37 Fluxo de CI Criandoambiente 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 Aopublicar na branch development • Publica no ambiente de dev
  • 39.
    39 Fluxo de CI Aocriar uma release/tag • Publica no ambiente de produção
  • 40.
    40 Fluxo de CI Desenvolvedorcria um Pull Request • Cria/Deploy um serviço no Cloud Run
  • 41.
    41 Fluxo de CI FechaPull 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
  • 42.
  • 43.
    43 Fluxo de CI Dessavez utilizei apenas o Github Actions • Deploy no Firebase Hosting
  • 44.
  • 45.
    45 CI/CD e Overthe Air Updates com Google Cloud Aplicando as mesmas tecnologias apresentadas aqui
  • 46.
    46 Fluxo de CI Gerandoimagem 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 CloudBuild Arquivos ficam salvos no workspace e podem ser salvos no Google Cloud Storage
  • 48.
    Projetos mostrados aqui Codigoe 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 maisdá 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
  • 50.
  • 51.
    Referencias Mais material deestudo • https://medium.com/swlh/how-to-ci-cd-on-google-cloud-platform-1e631cded335 • https://cloud.google.com/devops • https://github.com/GoogleCloudPlatform/github-actions/blob/master/get-secretmanager-secrets/ README.md • https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github- actions#github-context • https://cloud.google.com/cloud-build/docs/configuring-builds/substitute-variable-values#yaml_2 • https://cloud.google.com/cloud-build/docs/building/build-go#building_using_go_modules • Cloud Run Quickstart - https://www.youtube.com/watch?v=3OP-q55hOUI • https://fireship.io/lessons/ci-cd-with-google-cloud-build/
  • 52.
    Obrigado! aviebrantz.com youtube.com/alvaroviebrantz twitch.tv/alvaroviebrantz Alvaro Viebrantz Google DeveloperExpert for IoT and Product Engineer at Leverege aviebrantz.com @alvaroviebrantz