Valide as configurações

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.

Os novos Google Cloud utilizadores podem ser elegíveis para uma avaliação gratuita.

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

  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.

    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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

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

    1. Abra a página IAM na Google Cloud consola.

      Aceda à página IAM

    2. Na coluna membro, localize 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 outra função.

    5. Na lista Selecionar uma função, selecione Kubernetes Engine Developer e, de seguida, clique em Guardar.

    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:

    • ZONE: a zona onde o cluster está a ser executado
    • CLUSTER_NAME: o nome do seu cluster
    • POLICY_DIR: o caminho no repositório Git que representa o nível superior do repositório a sincronizar

    Existem três passos nesta configuração:

    1. Execute kubectl config current-context para gerar o ficheiro kubeconfig necessário para a autenticação no cluster do GKE my-cluster. O utilizador principal gera este ficheiro com autorizações restritas.
    2. Execute chmod 444 /kube/config para tornar este ficheiro legível no passo seguinte.
    3. Execute nomos vet no repositório Git que é clonado automaticamente em /workspace. Se estiver a usar um repositório não estruturado, execute nomos vet --source-format=unstructured em alternativa.

    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.

    1. Abra a página Acionadores na Google Cloud consola.

      Aceda à página de acionadores

    2. Clique em Associar repositório.

    3. Selecione GitHub (refletido) e, de seguida, clique em Continuar.

    4. Selecione o repositório e, de seguida, clique em Associar repositório.

    5. Clique em Adicionar acionador.

    6. 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
    7. Clique em Criar para guardar o acionador de compilação.

    Teste o acionador de compilação

    Teste manualmente a configuração executando o acionador:

    1. Abra a página Acionadores na Google Cloud consola.

      Aceda à página de acionadores

    2. 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).

    3. Clique em Mostrar.

      Os passos do Cloud Build aparecem a verde se estiverem configurados corretamente.

    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

    1. In the Google Cloud console, go to the Manage resources page.

      Go to Manage resources

    2. In the project list, select the project that you want to delete, and then click Delete.
    3. In the dialog, type the project ID, and then click Shut down to delete the project.

    Elimine recursos individuais

    Para eliminar os recursos individuais, conclua os passos seguintes:

    1. Elimine o ficheiro de configuração do Cloud Build.
    2. Elimine o acionador do Cloud Build que criou.
    3. Elimine o cluster que usou para este tutorial.

    O que se segue?