Usar uma política de implantação para restringir lançamentos
Neste guia de início rápido, mostramos como impedir que o Cloud Deploy seja implantado em um destino durante um período especificado e como substituir essa restrição.
Neste guia de início rápido, você fará o seguinte:
Crie uma configuração do Skaffold e um manifesto do Kubernetes ou uma definição de serviço do Cloud Run para especificar a imagem do contêiner (pré-criada) a ser implantada.
Defina o pipeline de entrega do Cloud Deploy e um destino de implantação, apontando para um cluster do GKE ou um serviço do Cloud Run.
Esse pipeline inclui apenas uma etapa para o destino.
Configurar uma política de implantação para um destino.
A política define um período de datas em que os lançamentos são proibidos para esse destino.
Crie uma versão.
Normalmente, quando você cria uma versão, o Cloud Deploy cria um lançamento para o primeiro destino na progressão do pipeline de entrega. Nesse caso, como há uma política que impede a implantação no destino, o lançamento para esse destino não é criado.
Confira os resultados no console do Google Cloud.
Devido à política, você não vai encontrar um lançamento para a versão, e não há nenhuma ação pendente na visualização do pipeline de entrega.
Substitua a política de implantação.
Essa substituição faz com que o Cloud Deploy crie o lançamento para o destino.
Confira os resultados no console do Google Cloud.
Como a política foi substituída, é possível ver que há um lançamento em andamento (ou concluído, se já passou tempo suficiente).
Antes de começar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Deploy, Cloud Build, GKE, and Cloud Storage APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Deploy, Cloud Build, GKE, and Cloud Storage APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Verifique se a conta de serviço padrão do Compute Engine tem permissões suficientes.
A conta de serviço já pode ter as permissões necessárias. Essas etapas são incluídas para projetos que desativam as concessões automáticas de papéis para contas de serviço padrão.
- Primeiro, adicione o papel
clouddeploy.jobRunner
:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/clouddeploy.jobRunner"
- Adicione o papel
clouddeploy.policyAdmin
:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/clouddeploy.policyAdmin"
- Adicione a função de desenvolvedor para o ambiente de execução específico.
- Para o GKE:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/container.developer"
- Para o Cloud Run:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/run.developer"
-
Adicione o papel
iam.serviceAccountUser
, que inclui a permissãoactAs
para implantar no ambiente de execução:gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/iam.serviceAccountUser" \ --project=PROJECT_ID
Se você já tiver a Google Cloud CLI instalada, verifique se está executando a versão mais recente:
gcloud components update
Criar o ambiente de execução
Se você estiver implantando no Cloud Run, pule este comando.
Para o GKE, crie um cluster: quickstart-cluster-qsprod
.
O endpoint de API Kubernetes do cluster precisa ser acessível pela rede da Internet pública. Por padrão, os clusters do GKE podem ser acessados externamente.
gcloud container clusters create-auto quickstart-cluster-qsprod \
--project=PROJECT_ID \
--region=us-central1
Preparar a configuração do Skaffold e o manifesto do aplicativo
O Cloud Deploy usa o Skaffold para fornecer os detalhes sobre o que implantar e como implantar no destino.
Neste guia de início rápido, você cria um arquivo skaffold.yaml
, que identifica
o manifesto do Kubernetes a ser usado para implantar o app de amostra.
Abra uma janela de terminal.
Crie um novo diretório e navegue até ele.
mkdir deploy-policy-quickstart cd deploy-policy-quickstart
Crie um arquivo chamado
skaffold.yaml
com o seguinte conteúdo:GKE;
apiVersion: skaffold/v4beta1 kind: Config manifests: rawYaml: - k8s-pod.yaml deploy: kubectl: {}
Cloud Run
apiVersion: skaffold/v4beta1 kind: Config manifests: rawYaml: - service.yaml deploy: cloudrun: {}
Esse arquivo é uma configuração mínima do Skaffold. Para este guia de início rápido, você vai criar o arquivo. No entanto, você também pode criar uma com o Cloud Deploy, para aplicativos básicos que não são de produção.
Consulte a referência do
skaffold.yaml
para mais informações sobre esse arquivo de configuração.Crie o manifesto do seu aplicativo, uma definição de serviço do Cloud Run ou um manifesto do Kubernetes para o GKE.
GKE;
Crie um arquivo chamado
k8s-pod.yaml
com o seguinte conteúdo:apiVersion: v1 kind: Pod metadata: name: getting-started spec: containers: - name: nginx image: my-app-image
Esse arquivo é um manifesto básico do Kubernetes, que é aplicado ao cluster para implantar o aplicativo. A imagem do contêiner a ser implantada é definida aqui como um marcador de posição,
my-app-image
, que é substituído pela imagem específica quando você cria a versão.Cloud Run
Crie um arquivo chamado
service.yaml
com o seguinte conteúdo:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: my-deploy-policy-run-service spec: template: spec: containers: - image: my-app-image
Esse arquivo é uma definição básica de serviço do Cloud Run, usada para implantar o aplicativo. A imagem do contêiner a ser implantada é definida aqui como um marcador de posição,
my-app-image
, que é substituído pela imagem específica quando você cria a versão.
Criar o pipeline de entrega e o destino
É possível definir o pipeline de entrega e os destinos em um arquivo ou em arquivos separados. Neste guia de início rápido, você vai criar um único arquivo com os dois.
Crie o pipeline de entrega e a definição do destino:
GKE;
No diretório
deploy-policy-quickstart
, crie um novo arquivo:clouddeploy.yaml
, com o seguinte conteúdo:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: deploy-policy-pipeline serialPipeline: stages: - targetId: prod-target --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: prod-target description: production cluster gke: cluster: projects/PROJECT_ID/locations/us-central1/clusters/quickstart-cluster-qsprod
Cloud Run
No diretório
deploy-policy-quickstart
, crie um novo arquivo:clouddeploy.yaml
, com o seguinte conteúdo:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: deploy-policy-pipeline serialPipeline: stages: - targetId: prod-target --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: prod-target description: production Run service run: location: projects/PROJECT_ID/locations/us-central1
Registre o pipeline e os recursos de destino com o serviço do Cloud Deploy:
gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
Agora você tem um pipeline de entrega com um destino.
Confirme o pipeline e os destinos:
No console do Google Cloud, navegue até a página Pipelines de entrega do Cloud Deploy para conferir a lista dos seus pipelines de entrega disponíveis.
Abrir a página "Pipelines de entrega"
O pipeline de entrega que você acabou de criar é mostrado, com um destino listado na coluna Destinos.
Criar a política de implantação
É possível definir a política de implantação no mesmo arquivo que o pipeline de entrega e os destinos ou em um arquivo separado. Para este guia de início rápido, vamos definir isso separadamente.
No mesmo diretório em que você criou o pipeline de entrega e os destinos, crie um novo arquivo,
deploypolicy.yaml
, com o seguinte conteúdo:apiVersion: deploy.cloud.google.com/v1 description: Restrict all rollouts in the deploy-policy-pipeline resource for the next ten years kind: DeployPolicy metadata: name: quickstart-deploy-policy selectors: - deliveryPipeline: id: 'deploy-policy-pipeline' rules: - rolloutRestriction: id: no-rollouts timeWindows: timeZone: America/New_York oneTimeWindows: - start: 2024-01-01 00:00 end: 2034-01-01 24:00
Essa política bloqueia os lançamentos por 10 anos, a partir de 1º de janeiro de 2024. Essa não é uma política realista. Ela foi feita assim apenas para este guia de início rápido, para garantir que a política esteja em vigor quando você criar a versão.
Registre o recurso de política de implantação com o serviço do Cloud Deploy:
gcloud deploy apply --file=deploypolicy.yaml --region=us-central1 --project=PROJECT_ID
Confirme sua política de implantação:
No console do Google Cloud, acesse a página Deploy policies do Cloud Deploy para conferir a lista de políticas disponíveis.
Abrir a página "Implementar políticas"
A política de implantação que você acabou de criar é mostrada.
Criar uma versão
Uma versão é o recurso central do Cloud Deploy que representa as mudanças que estão sendo implantadas. O pipeline de entrega define o ciclo de vida dessa versão. Consulte Arquitetura de serviço do Cloud Deploy para saber mais sobre esse ciclo de vida.
GKE;
Execute o comando abaixo no diretório deploy-policy-quickstart
para
criar a versão:
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=deploy-policy-pipeline \
--images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa
Observe a
flag --images=
,
que você usa para substituir o marcador de posição (my-app-image
) na
definição de serviço ou manifesto pela
imagem específica qualificada pelo SHA. O Google recomenda que você crie um modelo para seus
manifestos dessa maneira e use nomes de imagem qualificados por SHA na criação
da versão.
Cloud Run
Execute o comando abaixo no diretório deploy-policy-quickstart
para
criar a versão:
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=deploy-policy-pipeline \
--images=my-app-image=us-docker.pkg.dev/cloudrun/container/hello@sha256:4a856b6f1c3ce723a456ddc2adfbb794cbfba93f727e2d96fcf6540bd0d6fff4
Observe a
flag --images=
,
que você usa para substituir o marcador de posição (my-app-image
) no
manifesto ou definição de serviço pela
imagem específica qualificada pelo SHA. O Google recomenda que você crie um modelo para seus
manifestos dessa maneira e use nomes de imagem qualificados por SHA na criação
da versão.
Em circunstâncias normais, o Cloud Deploy cria o lançamento para o primeiro destino quando você cria a versão usando esse comando. Nesse caso, como os lançamentos são restritos de acordo com a política de implantação, nenhum lançamento é criado. Uma mensagem de erro é mostrada na linha de comando:
ERROR: (gcloud.deploy.releases.create) A create-rollout attempt was blocked by the "quickstart-deploy-policy"
policy. Target: "prod-target", Delivery pipeline: "deploy-policy-pipeline", policy rule: "no-rollouts"
Substituir a restrição de política
Para implantar o aplicativo de exemplo, que é bloqueado pela política de implantação, é necessário substituir essa política. Para fazer isso, crie um novo lançamento para essa
versão, incluindo a opção --override-deploy-policies
:
GKE;
Execute o comando abaixo no diretório deploy-policy-quickstart
para
criar a versão:
gcloud deploy releases promote --release=test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=deploy-policy-pipeline \
--to-target=prod-target \
--override-deploy-policies=quickstart-deploy-policy
Cloud Run
Execute o comando abaixo no diretório deploy-policy-quickstart
para
criar a versão:
gcloud deploy releases promote --release=test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=deploy-policy-pipeline \
--to-target=prod-target \
--override-deploy-policies=quickstart-deploy-policy
Como você incluiu
--override-deploy-policies=quickstart-deploy-policy
e tem a função
roles/clouddeploy.policyAdmin
, o Cloud Deploy ignora a
política de implantação criada e cria o lançamento para o prod-target
.
Conferir os resultados no console do Google Cloud
No console do Google Cloud, navegue novamente até a página Pipelines de entrega do Cloud Deploy para conferir seu pipeline de entrega (
deploy-policy-pipeline
).Clique no nome do pipeline de entrega (
deploy-policy-pipeline
).A visualização do pipeline mostra o status de implantação do app. Nesse caso, como a política foi substituída, o lançamento foi criado e concluído.
E sua versão é listada na guia Versões em Detalhes do pipeline de entrega.
Limpar
Para evitar cobranças na conta do Google Cloud pelos recursos usados nesta página, siga estas etapas.
Exclua o cluster do GKE ou o serviço do Cloud Run:
GKE;
gcloud container clusters delete quickstart-cluster-qsprod --region=us-central1 --project=PROJECT_ID
Cloud Run
gcloud run services delete my-deploy-policy-run-service --region=us-central1 --project=PROJECT_ID
Exclua a política de implantação:
gcloud deploy delete --file=deploypolicy.yaml --region=us-central1 --project=PROJECT_ID
Exclua o pipeline de entrega, o destino, a versão e o lançamento:
gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
Exclua os dois buckets do Cloud Storage criados pelo Cloud Deploy.
Pronto, você concluiu as etapas deste início rápido.