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 veten 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.
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
- 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.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
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 theserviceusage.services.enablepermission. Learn how to grant roles.-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
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 theserviceusage.services.enablepermission. Learn how to grant roles.- 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
Abre la página IAM en la Google Cloud consola.
En la columna miembro , busca la fila con la cuenta de servicio de Cloud Build:
PROJECT_NUMBER@cloudbuild.gserviceaccount.comEn esa fila, haz clic en Editar principal.
Haz clic en Agregar otra función.
En la lista Seleccionar un rol , selecciona
Kubernetes Engine Developery, 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:
- Ejecuta
kubectl config current-contextpara generar el archivo kubeconfig necesario a fin de autenticar en el clúster de GKEmy-cluster. El usuario raíz genera este archivo con permisos restringidos. - Ejecuta
chmod 444 /kube/configpara que este archivo sea legible en el siguiente paso. - Ejecuta
nomos veten el repositorio de Git, que se clona automáticamente en/workspace. Si usas un repositorio no estructurado, ejecutanomos vet --source-format=unstructureden 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.
Abre la página Activadores en la Google Cloud consola.
Haz clic en Conectar repositorio.
Selecciona GitHub (duplicado) y, luego, haz clic en Continuar.
Selecciona tu repositorio y haz clic en Conectar repositorio.
Haz clic en Agregar activador.
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 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:
Abre la página Activadores en la Google Cloud consola.
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”.
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:
- Borra el archivo de configuración de Cloud Build.
- Borra el activador de compilación de Cloud Build que creaste.
- Borra el clúster que usaste para este instructivo.
¿Qué sigue?
- Obtén información sobre Cloud Build.
- Detener temporalmente la sincronización de configuraciones