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.
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
- 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.
-
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 theresourcemanager.projects.create
permission. 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.enable
permission. 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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. 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.enable
permission. Learn how to grant roles. - 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.
Abre la página de 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.com
En esa fila, haz clic en
Editar principal.Haz clic en Añadir otro rol.
En la lista Seleccionar un rol, selecciona
Kubernetes Engine Developer
y, a continuación, haz clic en Guardar.ZONE
: la zona en la que se ejecuta tu clústerCLUSTER_NAME
: el nombre de tu clústerPOLICY_DIR
: la ruta del repositorio de Git que representa el nivel superior del repositorio que se va a sincronizar.- Ejecuta
kubectl config current-context
para generar el archivo kubeconfig necesario para autenticarte en el clúster de GKEmy-cluster
. El usuario root genera este archivo con permisos restringidos. - Ejecuta
chmod 444 /kube/config
para que este archivo se pueda leer en el siguiente paso. - Ejecuta
nomos vet
en el repositorio de Git que se clona automáticamente en/workspace
. Si usas un repositorio sin estructurar, ejecutanomos vet --source-format=unstructured
. Abre la página Activadores en la Google Cloud consola.
Haz clic en Conectar repositorio.
Selecciona GitHub (replicado) y, a continuación, haz clic en Continuar.
Selecciona tu repositorio y haz clic en Conectar repositorio.
Haz clic en Añadir activador.
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 Haz clic en Crear para guardar el activador de compilación.
Abre la página Activadores en la Google Cloud consola.
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).
Haz clic en Mostrar.
Los pasos de Cloud Build aparecen en verde si se han configurado correctamente.
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
- Elimina el archivo de configuración de Cloud Build.
- Elimina el activador de Cloud Build que has creado.
- Elimina el clúster que has usado en este tutorial.
- Consulta información sobre Cloud Build.
- Detener temporalmente la sincronización de configuraciones
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
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:
Esta configuración consta de tres pasos:
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.
Probar el activador de compilación
Prueba la configuración manualmente ejecutando el activador:
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
Eliminar recursos concretos
Para eliminar los recursos concretos, sigue estos pasos: