Validar los parámetros de configuración

En este instructivo, se muestra cómo validar las configuraciones con Cloud Build cuando se usan clústeres de Google Kubernetes Engine. La misma configuración funciona en cualquier otro sistema de CI/CD basado en contenedores, como CircleCI, con cambios mínimos.

Recomendamos validar cualquier cambio en la configuración de tu canalización de CI/CD y, también, verificar la validez de tus configuraciones mediante la ejecución del nomos vet comando.

Objetivos

  • Crea un archivo de configuración de Cloud Build que le indique al Sincronizador de configuración que use nomos vet en las configuraciones de tu repositorio.
  • Crea un activador de compilación de Cloud Build para que se verifiquen tus configuraciones cada vez que haya un cambio en la rama de desarrollo.

Costos

En este documento, usarás los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.

Es posible que los usuarios de Google Cloud nuevos cumplan con los requisitos para acceder a una prueba gratuita.

Cuando completes las tareas que se describen en este documento, podrás borrar los recursos que creaste para evitar que se te siga facturando. Para obtener más información, consulta Realiza una limpieza.

Antes de comenzar

  1. Accede a tu Google Cloud cuenta de. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  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 role (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 role (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. Crea un clúster de GKE que cumpla con los requisitos del Sincronizador de configuración o accede a uno. Para obtener detalles sobre cómo crear un clúster de este tipo, consulta Comienza a usar el Sincronizador de configuración.

Otorga permiso a la cuenta de servicio de Cloud Build

Otorga permiso a la cuenta de servicio de Cloud Build para acceder a tu clúster de GKE.

gcloud

Para agregar el rol Kubernetes Engine Developer a la cuenta de servicio de Cloud Build, ejecuta el siguiente 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

Console

  1. Abre la página IAM en la Google Cloud consola.

    Ve a la página IAM

  2. En la columna miembro , busca la fila con la cuenta de servicio de Cloud Build:

    PROJECT_NUMBER@cloudbuild.gserviceaccount.com
    
  3. En esa fila, haz clic en Editar principal.

  4. Haz clic en Agregar otra función.

  5. En la lista Seleccionar un rol , selecciona Kubernetes Engine Developer y, luego, haz clic en Guardar.

Crea una configuración de Cloud Build

Crea un archivo de configuración de Cloud Build y guárdalo en el directorio raíz del repositorio que contiene tus archivos de configuración (por ejemplo, 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

Reemplaza lo siguiente:

  • ZONE: la zona en la que se ejecuta el clúster.
  • CLUSTER_NAME: el nombre de tu clúster.
  • POLICY_DIR: la ruta de acceso dentro del repositorio de Git que representa el nivel superior del repositorio al que se sincronizará.

Esta configuración consta de tres pasos:

  1. Ejecuta kubectl config current-context para generar el archivo kubeconfig necesario a fin de autenticar en el clúster de GKE my-cluster. El usuario raíz genera este archivo con permisos restringidos.
  2. Ejecuta chmod 444 /kube/config para que este archivo sea legible en el siguiente paso.
  3. Ejecuta nomos vet en el repositorio de Git, que se clona automáticamente en /workspace. Si usas un repositorio no estructurado, ejecuta nomos vet --source-format=unstructured en su lugar.

Crea un activador de compilación

En el siguiente ejemplo, se crea un activador que se ejecuta para cada confirmación de la rama principal de un repositorio de Cloud Source Repositories.

  1. Abre la página Activadores en la Google Cloud consola.

    Ir a la página Activadores

  2. Haz clic en Conectar repositorio.

  3. Selecciona GitHub (duplicado) y, luego, haz clic en Continuar.

  4. Selecciona tu repositorio y haz clic en Conectar repositorio.

  5. Haz clic en Agregar activador.

  6. Ingresa o selecciona la entrada correspondiente en cada campo que se describe en la siguiente tabla:

    Campo Entrada
    Evento Enviar a una rama
    Rama ^master$
    Configuración Archivo de configuración de Cloud Build (YAML o JSON)
    Ubicación del archivo de configuración de Cloud Build /cloudbuild.yaml
  7. Haz clic en Crear para guardar el activador de compilación.

Prueba el activador de compilación

Para probar la configuración, ejecuta el activador manualmente:

  1. Abre la página Activadores en la Google Cloud consola.

    Ir a la página Activadores

  2. Busca el activador que creaste y, a continuación, haz clic en Ejecutar activador.

    Aparecerá el mensaje “Comenzó la compilación en la rama principal”.

  3. Haz clic en Mostrar.

    Los pasos de Cloud Build aparecen en verde si están configurados correctamente.

Configuraciones de Cloud Build no válidas

No se puede ejecutar un activador si el archivo de configuración de compilación de Cloud Build no es válido.

Para probar esto, actualiza la configuración de Cloud Build en tu repositorio con el siguiente archivo. Observa la sangría no válida en la línea 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

Si vuelves a ejecutar el activador de forma manual, recibes el siguiente mensaje de error, porque path: en la línea 6 no tiene la sangría correcta:

Failed to trigger build: failed unmarshalling build config cloudbuild.yaml:
unknown field "path" in cloudbuild_go_proto.BuildStep.

Para corregir esta configuración, aplica sangría en path: en la línea 6 al mismo nivel que name: en la línea 5. Para obtener más información sobre la estructura de un archivo de configuración de Cloud Build, consulta Crea una configuración básica de Cloud Build.

Limpia

Borra el proyecto

    Borra un Google Cloud proyecto:

    gcloud projects delete PROJECT_ID

Borra los recursos individuales

Para borrar los recursos individuales, completa los siguientes pasos:

  1. Borra el archivo de configuración de Cloud Build.
  2. Borra el activador de compilación de Cloud Build que creaste.
  3. Borra el clúster que usaste para este instructivo.

¿Qué sigue?