Neste tutorial, mostramos como validar configurações com o Cloud Build ao usar clusters da edição Google Kubernetes Engine (GKE) Enterprise. A mesma configuração funciona em qualquer outro sistema de CI/CD com base em contêiner, como o CircleCI, com alterações mínimas.
Recomendamos validar qualquer alteração 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 arquivo de configuração do Cloud Build que instrua o Config Sync a usar
nomos vet
nas configurações do seu repositório. - Crie um gatilho do Cloud Build para que as configurações sejam verificadas sempre que houver uma alteração na ramificação de desenvolvimento.
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
- Config Sync (part of GKE Enterprise)
- Cloud Build
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Saiba mais em Limpeza.
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 Build API.
-
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 Build API.
- Crie ou obtenha acesso a um cluster do GKE Enterprise que atenda aos requisitos do Config Sync. Para detalhes sobre como criar esse cluster, consulte Primeiros passos com o Config Sync.
Conceder permissão à conta de serviço do Cloud Build
Conceda permissão à conta de serviço do Cloud Build para acessar seu cluster do GKE Enterprise.
gcloud
Para adicionar o papel Kubernetes Engine Developer
à conta de serviço do Cloud Build, execute o comando a seguir:
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
Console
Abra a página do IAM no console do Google Cloud.
Na coluna membro, encontre 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 outro papel.
Na lista Selecionar um papel, selecione
Kubernetes Engine Developer
e clique em Salvar.
Criar uma configuração do Cloud Build
Crie um arquivo de configuração do Cloud Build e armazene-o no diretório raiz do repositório que contém seus arquivos 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:
ZONE
: a zona em que o cluster está em execução.CLUSTER_NAME
: o nome do cluster.POLICY_DIR
: caminho no repositório Git que representa o nível superior do repositório a ser sincronizado
Há três etapas nesta configuração:
- Execute
kubectl config current-context
para gerar o arquivo kubeconfig necessário para autenticar o clustermy-cluster
do GKE. O usuário raiz gera este arquivo com permissões restritas. - Execute
chmod 444 /kube/config
para tornar este arquivo legível na próxima etapa. - Execute
nomos vet
no repositório do Git que é clonado automaticamente em/workspace
. Se você estiver usando um repositório não estruturado, executenomos vet --source-format=unstructured
.
Criar um acionador de versão
O exemplo a seguir cria um acionador que é executado para cada confirmação na ramificação mestre de um repositório do Cloud Source Repositories.
Abra a página "Gatilhos" no console do Google Cloud.
Clique em Conectar repositório.
Selecione "GitHub (espelhado)" e clique em Continuar.
Selecione o repositório e clique em Conectar repositório.
Clique em Adicionar gatilho.
Insira ou selecione a entrada correspondente em cada campo descrito na tabela a seguir:
Campo Entrada Evento Enviar para uma ramificação Ramificação ^master$ Configuração Arquivo de configuração do Cloud Build (yaml ou json) Local do arquivo de configuração do Cloud Build / cloudbuild.yaml Clique em Criar para salvar o gatilho de build.
Testar o gatilho de compilação
Teste a configuração manualmente executando o gatilho:
Abra a página "Gatilhos" no console do Google Cloud.
Encontre o gatilho que você criou e clique em Executar gatilho.
A mensagem "Versão iniciada na ramificação mestre" é exibida.
Clique em Mostrar.
As etapas do Cloud Build aparecerão em verde se forem configuradas corretamente.
Configurações inválidas do Cloud Build
O gatilho não poderá ser executado se o arquivo de configuração do Cloud Build for inválido.
Para testar isso, atualize a configuração do Cloud Build no seu repositório com o arquivo a seguir. Observe o recuo inválido na linha seis:
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 você executar manualmente o gatilho de novo, receberá a mensagem de erro a seguir, porque path:
na linha seis não está recuado corretamente:
Failed to trigger build: failed unmarshalling build config cloudbuild.yaml:
unknown field "path" in cloudbuild_go_proto.BuildStep.
Para corrigir essa configuração, recue path:
na linha seis para o mesmo nível de name:
na linha cinco. Para mais informações sobre a estrutura de um arquivo de configuração do Cloud Build, consulte Como criar uma configuração básica do Cloud Build.
Limpar
Excluir o projeto
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Excluir recursos individuais
Para excluir os recursos individuais, siga estas etapas:
- Exclua o arquivo de configuração do Cloud Build.
- Exclua o gatilho do Cloud Build que você criou.
- Exclua o cluster usado neste tutorial.
A seguir
- Saiba mais sobre o Cloud Build
- Interrompa a sincronização das configurações temporariamente