Como validar configurações

Além de executar nomos vet manualmente ou como um hook pré-confirmado localmente, recomendamos que você valide todas as alterações de configuração no pipeline de CI/CD. Neste guia, você verá como validar configurações com o Cloud Build ao usar clusters do GKE. 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.

Antes de começar

Para seguir este guia, você precisa primeiro concluir o guia de início rápido do Anthos Config Management.

Como configurar o Cloud Build

Como ativar a API Cloud Build

gcloud

Para ativar a API do Cloud Build, execute o seguinte comando:

gcloud services enable cloudbuild.googleapis.com

Console

Ativar a API Cloud Build

Como conceder permissão à conta de serviço do Cloud Build para acessar seu cluster do GKE

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 Cloud IAM no Console do Cloud.

    Acessar a página do Cloud IAM

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

    [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com

  3. Clique no ícone de lápis nessa linha.

  4. Clique em Adicionar outro papel, selecione "Desenvolvedor do Kubernetes Engine" e clique em Salvar.

Como 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

em que ZONE é a zona em que seu cluster está em execução, CLUSTER_NAME é o nome de seu cluster, e POLICY_DIR é o caminho dentro do 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 (em inglês) 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.

Como criar um gatilho de compilação

O exemplo a seguir cria um acionador que é executado para cada confirmação na ramificação mestre de um Cloud Source Repositories. Use o arquivo de configuração do Cloud Build da etapa anterior:

  1. Abra a página "Gatilhos" no Console do 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$
    Tipo de arquivo de configuração do build 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 compilação.

Como testar o gatilho de compilação

É possível testar a configuração executando manualmente o gatilho.

  1. Abra a página "Gatilhos" no Console do 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 MOSTRAR" é 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.

Por exemplo, atualize a configuração do Cloud Build em 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 acionador 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.

A seguir