Valida las configuraciones

Además de ejecutar nomos vet de forma manual o como un hook previo a la confirmación localmente, recomendamos validar cualquier cambio en la configuración de tu canalización de IC/EC. En esta guía, se muestra cómo validar las configuraciones con Cloud Build cuando se usan clústeres de GKE. La misma configuración funciona en cualquier otro sistema de IC/EC basado en contenedores, como CircleCI, con cambios mínimos.

Antes de comenzar

Para seguir esta guía, primero debe completar la guía de inicio rápido de Anthos Config Management.

Configura Cloud Build

Habilita la API de Cloud Build

gcloud

Para habilitar la API de Cloud Build, ejecuta el siguiente comando:

gcloud services enable cloudbuild.googleapis.com

Console

Habilita la API de Cloud Build

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

gcloud

Para agregar la función 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 de Cloud IAM en Cloud Console.

    Ir a la página de Cloud IAM

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

    [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com

  3. Haz clic en el ícono de lápiz en esa fila.

  4. Haz clic en Agregar otra función, selecciona Desarrollador de Kubernetes Engine 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

ZONE es la zona en que se ejecuta el clúster, CLUSTER_NAME es el nombre del clúster y POLICY_DIR es la ruta dentro del repositorio de git que representa el nivel superior del repositorio para 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.

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 Cloud Source Repo. Usa el archivo de configuración de Cloud Build del paso anterior:

  1. Abre la página Activadores en Google Console.

    Ir a la página Activadores

  2. Haz clic en Conectar repositorio.

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

  4. Seleccione su repositorio y, luego, haga 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
    Event Enviar a una rama
    Rama ^master$
    Tipo de archivo de configuración de compilació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 Google Console.

    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 MOSTRAR".

  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 Cloud Build no es válido.

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

Qué sigue