Validar configurações

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:

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem estar qualificados para uma avaliação gratuita.

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

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Build API.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Cloud Build API.

    Enable the API

  8. 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

  1. Abra a página do IAM no console do Google Cloud.

    Acessar a página do IAM

  2. Na coluna membro, encontre a linha com a conta de serviço do Cloud Build:

    PROJECT_NUMBER@cloudbuild.gserviceaccount.com
    
  3. Nessa linha, clique em Editar principal.

  4. Clique em Adicionar outro papel.

  5. 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:

  1. Execute kubectl config current-context para gerar o arquivo kubeconfig necessário para autenticar o cluster my-cluster do GKE. O usuário raiz gera este arquivo com permissões restritas.
  2. Execute chmod 444 /kube/config para tornar este arquivo legível na próxima etapa.
  3. Execute nomos vet no repositório do Git que é clonado automaticamente em /workspace. Se você estiver usando um repositório não estruturado, execute nomos 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.

  1. Abra a página "Gatilhos" no console do Google Cloud.

    Acessar a página "Gatilhos"

  2. Clique em Conectar repositório.

  3. Selecione "GitHub (espelhado)" e clique em Continuar.

  4. Selecione o repositório e clique em Conectar repositório.

  5. Clique em Adicionar gatilho.

  6. 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
  7. Clique em Criar para salvar o gatilho de build.

Testar o gatilho de compilação

Teste a configuração manualmente executando o gatilho:

  1. Abra a página "Gatilhos" no console do Google Cloud.

    Acessar a página "Gatilhos"

  2. Encontre o gatilho que você criou e clique em Executar gatilho.

    A mensagem "Versão iniciada na ramificação mestre" é exibida.

  3. 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.

Limpeza

Excluir o projeto

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

Excluir recursos individuais

Para excluir os recursos individuais, siga estas etapas:

  1. Exclua o arquivo de configuração do Cloud Build.
  2. Exclua o gatilho do Cloud Build que você criou.
  3. Exclua o cluster usado neste tutorial.

A seguir