Validar configuraciones

En este tutorial se muestra cómo validar configuraciones con Cloud Build al usar 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.

Te recomendamos que valides los cambios de configuración en tu canalización de CI/CD, además de comprobar la validez de tus configuraciones ejecutando el comando nomos vet.

Objetivos

  • Crea un archivo de configuración de Cloud Build que indique a Config Sync que use nomos vet en las configuraciones de tu repositorio.
  • Crea un activador de Cloud Build para que tus configuraciones se comprueben cada vez que se modifique la rama de desarrollo.

Costes

En este documento, se utilizan los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costes basada en el uso previsto, utiliza la calculadora de precios.

Los usuarios nuevos Google Cloud pueden disfrutar de una prueba gratuita.

Cuando termines las tareas que se describen en este documento, puedes evitar que se te siga facturando eliminando los recursos que has creado. Para obtener más información, consulta la sección Limpiar.

Antes de empezar

  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. Crea un clúster de GKE o ten acceso a uno que cumpla los requisitos de Config Sync. Para obtener información sobre cómo crear un clúster de este tipo, consulta el artículo Empezar a usar Config Sync.
  9. Conceder permiso a la cuenta de servicio de Cloud Build

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

    gcloud

    Para añadir 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
    

    Consola

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

      Ir a la página de gestión de identidades y accesos

    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 Añadir otro rol.

    5. En la lista Seleccionar un rol, selecciona Kubernetes Engine Developer y, a continuación, haz clic en Guardar.

    Crear 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 contenga los 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
    

    Haz los cambios siguientes:

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

    Esta configuración consta de tres pasos:

    1. Ejecuta kubectl config current-context para generar el archivo kubeconfig necesario para autenticarte en el clúster de GKE my-cluster. El usuario root genera este archivo con permisos restringidos.
    2. Ejecuta chmod 444 /kube/config para que este archivo se pueda leer en el siguiente paso.
    3. Ejecuta nomos vet en el repositorio de Git que se clona automáticamente en /workspace. Si usas un repositorio sin estructurar, ejecuta nomos vet --source-format=unstructured.

    Crear un activador de compilación

    En el siguiente ejemplo se crea un activador que se ejecuta en 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 de activadores

    2. Haz clic en Conectar repositorio.

    3. Selecciona GitHub (replicado) y, a continuación, haz clic en Continuar.

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

    5. Haz clic en Añadir activador.

    6. Introduce o selecciona la entrada correspondiente en cada campo descrito 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.

    Probar el activador de compilación

    Prueba la configuración manualmente ejecutando el activador:

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

      Ir a la página de activadores

    2. Busca el activador que has creado y haz clic en Ejecutar activador.

      Aparecerá el mensaje "Build started on master branch" (Compilación iniciada en la rama principal).

    3. Haz clic en Mostrar.

      Los pasos de Cloud Build aparecen en verde si se han configurado correctamente.

    Configuraciones de Cloud Build no válidas

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

    Para probarlo, actualiza la configuración de Cloud Build en tu repositorio con el siguiente archivo. Fíjate en la sangría no válida de 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 manualmente, recibirás el siguiente mensaje de error porque path: de 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, indenta 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 Crear una configuración básica de Cloud Build.

    Limpieza

    Eliminar el proyecto

    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.

    Eliminar recursos concretos

    Para eliminar los recursos concretos, sigue estos pasos:

    1. Elimina el archivo de configuración de Cloud Build.
    2. Elimina el activador de Cloud Build que has creado.
    3. Elimina el clúster que has usado en este tutorial.

    Siguientes pasos