Pipeline de CI/CD para desenvolver e entregar apps em contêiner
Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
Last reviewed 2022-11-18 UTC
Neste documento, descrevemos um conjunto integrado de ferramentas do Google Cloud para configurar um sistema de desenvolvimento, integração contínua (CI) e entrega contínua (CD) que pode ser usado para desenvolver e implantar aplicativos no Google Kubernetes Engine (GKE).
Este documento de arquitetura de referência é destinado a operadores e desenvolvedores de software. Ele pressupõe que você esteja familiarizado com a execução de comandos gcloud no Google Cloud e com a implantação de contêineres de aplicativos no GKE.
Arquitetura
O diagrama a seguir mostra os recursos usados nessa arquitetura:
Essa arquitetura inclui os seguintes componentes:
O Cloud Code como um espaço de trabalho de desenvolvimento.
Como parte desse espaço de trabalho, você verá alterações no cluster de desenvolvimento, que é executado no
minikube.
Execute o Cloud Code e o cluster do minikube no Cloud Shell.
O Cloud Shell é um ambiente de desenvolvimento on-line acessível pelo
navegador. Ele tem recursos de computação, memória, um ambiente de desenvolvimento integrado
(IDE) e também o Cloud Code instalado.
O Cloud Build para criar e testar o aplicativo, isto é, a parte de
"CI" do pipeline.
Essa parte do pipeline inclui as seguintes ações:
O Cloud Build monitora as alterações no repositório de origem,
usando um gatilho do Cloud Build.
Quando uma alteração é confirmada na ramificação principal, o
gatilho do Cloud Build faz o seguinte:
Recria o contêiner do aplicativo.
Coloca os artefatos do build em um bucket do Cloud Storage.
Coloca o contêiner do aplicativo no Artifact Registry.
Executa testes no contêiner.
Chama o Cloud Deploy para implantar o contêiner no
ambiente de preparo. Neste exemplo,
o ambiente de preparo é um cluster do Google Kubernetes Engine.
Se o build e os testes forem bem-sucedidos, você vai poder usar
o Cloud Deploy para promover o contêiner do preparo para a
produção.
O Cloud Deploy para gerenciar a implantação. Isto é, a parte de "CD" do
pipeline. Nessa parte do pipeline, o Cloud Deploy faz o seguinte:
Registra um pipeline de entrega e os destinos.
Os destinos representam os clusters de preparo e de produção.
Cria um bucket do Cloud Storage, armazenando a origem da renderização do
Skaffold e os manifestos renderizados nesse bucket.
Gera uma nova versão para cada alteração no código-fonte.
Implanta o aplicativo no ambiente de produção. Nesta
implantação na produção, um operador (ou outra pessoa designada)
aprova manualmente a implantação. Nesta arquitetura, o ambiente de
produção é um cluster do Google Kubernetes Engine.
Nesta arquitetura, a configuração é compartilhada entre os ambientes de desenvolvimento, preparação e produção usando o Skaffold, uma ferramenta de linha de comando que facilita o desenvolvimento contínuo para aplicativos nativos do Kubernetes.
O Google Cloud armazena o código-fonte do aplicativo no GitHub.
Nesta arquitetura, usamos produtos do Google Cloud na maioria dos componentes do
sistema, com o Skaffold permitindo a integração do sistema. Como o
Skaffold é de código aberto, é possível usar esses princípios para criar um sistema semelhante
combinando componentes internos, de terceiros e do Google Cloud.
A modularidade desta solução significa que pode ser adotada de maneira incremental
como parte do pipeline de desenvolvimento e implantação.
Casos de uso
Veja os principais recursos deste sistema integrado:
Desenvolva e implante com mais rapidez.
O loop de desenvolvimento é eficiente porque é possível validar
alterações no espaço de trabalho do desenvolvedor. A implantação é rápida porque o
sistema de CI/CD automatizado e o aumento de paridade entre os ambientes permitem
detectar mais problemas ao implantar alterações na produção.
Aproveite o aumento de paridade entre desenvolvimento, preparo e produção.
Os componentes desse sistema usam um conjunto comum de ferramentas do Google Cloud.
Reutilize configurações em vários ambientes.
Essa reutilização é feita com o Skaffold,
que permite um formato de configuração comum para os diferentes ambientes. Ele
também permite que desenvolvedores e operadores atualizem e usem a mesma configuração.
Aplique a governança no início do fluxo de trabalho.
Este sistema aplica testes de validação para governança tanto na produção como no
sistema de CI e no ambiente de desenvolvimento. A aplicação da governança no ambiente de
desenvolvimento permite encontrar e corrigir os problemas antes.
Deixe que as ferramentas opinativas gerenciem a entrega de software.
A entrega contínua é totalmente gerenciada, separando os estágios do pipeline de
CD dos detalhes de renderização e implantação.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Informações incorretas ou exemplo de código","incorrectInformationOrSampleCode","thumb-down"],["Não contém as informações/amostras de que eu preciso","missingTheInformationSamplesINeed","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 2022-11-18 UTC."],[[["\u003cp\u003eThis architecture uses Google Cloud tools (Cloud Code, Cloud Build, Cloud Deploy) to set up a continuous integration and continuous delivery (CI/CD) system for developing and deploying applications to Google Kubernetes Engine (GKE).\u003c/p\u003e\n"],["\u003cp\u003eCloud Code serves as the development workspace, running in Cloud Shell, where developers can see changes in the minikube development cluster.\u003c/p\u003e\n"],["\u003cp\u003eCloud Build automates building and testing, using triggers to monitor source code changes, rebuild the application container, and run tests before deploying to the staging environment.\u003c/p\u003e\n"],["\u003cp\u003eCloud Deploy manages the continuous delivery pipeline, registering delivery pipelines and targets, storing Skaffold rendering source and manifests, and deploying the application to production with manual approval.\u003c/p\u003e\n"],["\u003cp\u003eSkaffold facilitates shared configuration across development, staging, and production environments, enabling a common configuration format and allowing for the reuse of configurations.\u003c/p\u003e\n"]]],[],null,["# CI/CD pipeline for developing and delivering containerized apps\n\nThis document describes an integrated set of Google Cloud tools\nto set up a system for development, for continuous integration (CI), and\nfor continuous delivery (CD) that you can use to develop and deploy applications to\n[Google Kubernetes Engine (GKE)](/kubernetes-engine).\nThis reference architecture document is intended for both software developers\nand operators. It assumes that you're familiar with running `gcloud` commands on\nGoogle Cloud and with deploying application containers to\nGKE.\n\nArchitecture\n------------\n\nThe following diagram shows the resources that are used in this architecture:\n\nThis architecture includes the following components:\n\n1. **Cloud Code** as a development workspace. As part of this workspace, you can see changes in the development cluster, which runs on [minikube](https://minikube.sigs.k8s.io/docs/). You run Cloud Code and the minikube cluster in [Cloud Shell](/shell). Cloud Shell is an online development environment accessible from your browser. It has compute resources, memory, an integrated development environment, (IDE), and it also has Cloud Code installed.\n2. **Cloud Build** to build and test the application---the \"CI\"\n part of the pipeline\n\n This part of the pipeline includes the following actions:\n - Cloud Build monitors changes to the source repository, using a Cloud Build trigger.\n - When a change is committed into the main branch, the Cloud Build trigger does the following:\n - Rebuilds the application container.\n - Places build artifacts in a Cloud Storage bucket.\n - Places the application container in Artifact Registry.\n - Runs tests on the container.\n - Calls Cloud Deploy to deploy the container to the staging environment. In this example, the staging environment is a Google Kubernetes Engine cluster.\n - If the build and tests are successful, you can then use Cloud Deploy to promote the container from staging to production.\n3. **Cloud Deploy** to manage the deployment---the \"CD\" part of the\n pipeline. In this part of the pipeline, Cloud Deploy does the\n following:\n\n - Registers a [delivery pipeline](/deploy/docs/terminology#delivery_pipeline) and [targets](/deploy/docs/terminology#target). The targets represent the staging and production clusters.\n - Creates a Cloud Storage bucket and stores the Skaffold rendering source and rendered manifests in that bucket.\n - Generates a new [release](/deploy/docs/terminology#release) for each source code change.\n - Deploys the application to the production environment. For this deployment to production, an operator (or other designated person) manually approves the deployment. In this architecture, the production environment is a Google Kubernetes Engine cluster.\n\nIn this architecture, configuration is shared among the development, staging,\nand production environments through\n[Skaffold](https://skaffold.dev/),\na command-line tool that facilitates continuous development\nfor Kubernetes-native applications.\n\nGoogle Cloud stores the application's source code in GitHub.\n\nThis architecture uses Google Cloud products for most of the components of\nthe system, with Skaffold enabling the integration of the system. Because\nSkaffold is open source, you can use these principles to create a similar system\nusing a combination of Google Cloud, in-house, and third-party components.\nThe modularity of this solution means that you can adopt it incrementally\nas part of your development and deployment pipeline.\n\nUse cases\n---------\n\nThe following are the key features of this integrated system:\n\n- **Develop and deploy faster**.\n\n The development loop is efficient because you can validate\n changes in the developer workspace. Deployment is fast because the\n automated CI/CD system and increased parity across the environments allow you\n to detect more issues when you deploy changes to production.\n- **Benefit from increased parity** across development, staging, and production.\n\n The components of this system use a common set of Google Cloud tools.\n- **Reuse configurations** across the different environments.\n\n This reuse is done with [Skaffold](https://skaffold.dev/),\n which allows a common configuration format for the different environments. It\n also allows developers and operators to update and use the same configuration.\n- **Apply governance** early in the workflow.\n\n This system applies validation tests for governance at production and in the\n CI system and development environment. Applying governance in the development\n environment allows problems to be found and fixed earlier.\n- Let **opinionated tooling** manage your software delivery.\n\n Continuous delivery is fully managed, separating the stages of your CD\n pipeline from the details of rendering and deploying.\n\nDeployment\n----------\n\nTo deploy this architecture, see\n[Develop and deploy containerized apps using a CI/CD pipeline](/architecture/app-development-and-delivery-with-cloud-code-gcb-cd-and-gke/deployment).\n\nWhat's next\n-----------\n\n- To learn how to deploy into a private GKE instance, see [Deploying to a private cluster on a Virtual Private Cloud network](/deploy/docs/execution-environment#deploying_to_a_private_cluster_on_a_network).\n- For information about how to implement, improve, and measure deployment automation, see [Deployment automation](https://dora.dev/devops-capabilities/technical/deployment-automation/)."]]