Este tutorial mostra como validar as configurações com o Cloud Build quando usar clusters do Google Kubernetes Engine. A mesma configuração funciona em qualquer outro sistema de CI/CD baseado em contentores, como o CircleCI, com alterações mínimas.
Recomendamos que valide todas as alterações de configuração no pipeline de CI/CD, além de verificar a validade das configurações executando o comando nomos vet
.
Objetivos
- Crie um ficheiro de configuração do Cloud Build que instrua o Config Sync a usar o comando
nomos vet
nas configurações no seu repositório. - Crie um acionador do Cloud Build para que as suas configurações sejam verificadas sempre que houver uma alteração no ramo de desenvolvimento.
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custos com base na sua utilização projetada,
use a calculadora de preços.
Quando terminar as tarefas descritas neste documento, pode evitar a faturação contínua eliminando os recursos que criou. Para mais informações, consulte o artigo Limpe.
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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. - Criar ou ter acesso a um cluster do GKE que cumpra os requisitos do Config Sync. Para ver detalhes sobre como criar um cluster deste tipo, consulte o artigo Comece a usar o Config Sync.
Abra a página IAM na Google Cloud consola.
Na coluna membro, localize a linha com a conta de serviço do Cloud Build:
PROJECT_NUMBER@cloudbuild.gserviceaccount.com
Nessa linha, clique em
Editar principal.Clique em Adicionar outra função.
Na lista Selecionar uma função, selecione
Kubernetes Engine Developer
e, de seguida, clique em Guardar.ZONE
: a zona onde o cluster está a ser executadoCLUSTER_NAME
: o nome do seu clusterPOLICY_DIR
: o caminho no repositório Git que representa o nível superior do repositório a sincronizar- Execute
kubectl config current-context
para gerar o ficheiro kubeconfig necessário para a autenticação no cluster do GKEmy-cluster
. O utilizador principal gera este ficheiro com autorizações restritas. - Execute
chmod 444 /kube/config
para tornar este ficheiro legível no passo seguinte. - Execute
nomos vet
no repositório Git que é clonado automaticamente em/workspace
. Se estiver a usar um repositório não estruturado, executenomos vet --source-format=unstructured
em alternativa. Abra a página Acionadores na Google Cloud consola.
Clique em Associar repositório.
Selecione GitHub (refletido) e, de seguida, clique em Continuar.
Selecione o repositório e, de seguida, clique em Associar repositório.
Clique em Adicionar acionador.
Introduza ou selecione a entrada correspondente em cada campo descrito na tabela seguinte:
Campo Entrada Evento Envie para um ramo Agência ^master$ Configuração Ficheiro de configuração do Cloud Build (YAML ou JSON) Localização do ficheiro de configuração do Cloud Build / cloudbuild.yaml Clique em Criar para guardar o acionador de compilação.
Abra a página Acionadores na Google Cloud consola.
Encontre o acionador que criou e, de seguida, clique em Executar acionador.
É apresentada a mensagem "Build started on master branch" (Compilação iniciada no ramo principal).
Clique em Mostrar.
Os passos do Cloud Build aparecem a verde se estiverem configurados corretamente.
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
- Elimine o ficheiro de configuração do Cloud Build.
- Elimine o acionador do Cloud Build que criou.
- Elimine o cluster que usou para este tutorial.
- Saiba mais sobre o Cloud Build
- Pare temporariamente a sincronização de configurações
Conceda autorização à conta de serviço do Cloud Build
Conceda à conta de serviço do Cloud Build autorização para aceder ao seu cluster do GKE.
gcloud
Para adicionar a função Kubernetes Engine Developer
à conta de serviço do Cloud Build, execute o seguinte comando:
PROJECT_ID=$(gcloud config get-value project)
PROJECT_NUM=$(gcloud projects list --filter="$PROJECT_ID" --format="value(PROJECT_NUMBER)")
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member=serviceAccount:$PROJECT_NUM@cloudbuild.gserviceaccount.com \
--role=roles/container.developer
Consola
Crie uma configuração do Cloud Build
Crie um ficheiro de configuração do Cloud Build e armazene-o no diretório raiz do repositório que contém os seus ficheiros de configuração (por exemplo, my-repo/cloudbuild.yaml
).
steps:
- name: 'gcr.io/cloud-builders/kubectl'
args: ['config', 'current-context']
volumes:
- name: 'kube'
path: '/kube'
env:
- 'KUBECONFIG=/kube/config'
- 'CLOUDSDK_COMPUTE_ZONE=ZONE'
- 'CLOUDSDK_CONTAINER_CLUSTER=CLUSTER_NAME'
- 'CLOUDSDK_CONTAINER_USE_APPLICATION_DEFAULT_CREDENTIALS=true'
- name: 'bash'
args: ['chmod', '444', '/kube/config']
volumes:
- name: 'kube'
path: '/kube'
- name: 'gcr.io/config-management-release/nomos:stable'
args: ['nomos', 'vet', '--path', '/workspace/POLICY_DIR']
volumes:
- name: 'kube'
path: '/kube'
env:
- 'KUBECONFIG=/kube/config'
timeout: 30s
Substitua o seguinte:
Existem três passos nesta configuração:
Crie um acionador de versão
O exemplo seguinte cria um acionador que é executado para cada commit no ramo principal de um repositório do Cloud Source Repositories.
Teste o acionador de compilação
Teste manualmente a configuração executando o acionador:
Configurações do Cloud Build inválidas
Um acionador não pode ser executado se o ficheiro de configuração do Cloud Build for inválido.
Para testar esta situação, atualize a configuração do Cloud Build no seu repositório com o seguinte ficheiro. Repare no avanço inválido na linha 6:
steps:
- name: 'gcr.io/cloud-builders/kubectl'
args: ['config', 'current-context']
volumes:
- name: 'kube'
path: '/kube'
env:
- 'KUBECONFIG=/kube/config'
- 'CLOUDSDK_COMPUTE_ZONE=ZONE'
- 'CLOUDSDK_CONTAINER_CLUSTER=CLUSTER_NAME'
- 'CLOUDSDK_CONTAINER_USE_APPLICATION_DEFAULT_CREDENTIALS=true'
- name: 'bash'
args: ['chmod', '444', '/kube/config']
volumes:
- name: 'kube'
path: '/kube'
- name: 'gcr.io/nomos-release/nomos:stable'
args: ['nomos', 'vet', '--path', '/workspace/POLICY_DIR']
volumes:
- name: 'kube'
path: '/kube'
env:
- 'KUBECONFIG=/kube/config'
timeout: 30s
Se executar novamente o acionador manualmente, recebe a seguinte mensagem de erro, porque path:
na linha 6 não tem a indentação correta:
Failed to trigger build: failed unmarshalling build config cloudbuild.yaml:
unknown field "path" in cloudbuild_go_proto.BuildStep.
Para corrigir esta configuração, aplique uma indentação a path:
na linha 6 até ao mesmo nível que name:
na linha 5. Para mais informações sobre a estrutura de um ficheiro de configuração do Cloud Build, consulte o artigo Criar uma configuração básica do Cloud Build.
Limpar
Elimine o projeto
Elimine recursos individuais
Para eliminar os recursos individuais, conclua os passos seguintes: