En este instructivo, se muestra cómo validar las configuraciones con Cloud Build cuando se usan clústeres de la edición Enterprise de Google Kubernetes Engine (GKE). La misma configuración funciona en cualquier otro sistema de IC/EC 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 comando nomos vet
.
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 Cloud Build para que se verifiquen tus parámetros de configuración cada vez que haya un cambio en la rama de desarrollo.
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
- Config Sync (part of GKE Enterprise)
- Cloud Build
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Cuando finalices las tareas que se describen en este documento, puedes borrar los recursos que creaste para evitar que continúe la facturación. Para obtener más información, consulta Cómo realizar una limpieza.
Antes de comenzar
- 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.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build API.
- Crea un clúster de GKE Enterprise 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 el 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 Enterprise.
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 de IAM en la consola de Google Cloud .
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 Agregar otra función.
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
: Es la zona en la que se ejecuta el clúster.CLUSTER_NAME
: Es el nombre de tu clúster.POLICY_DIR
: La ruta de acceso dentro del repositorio de Git que representa el nivel superior del repositorio que se sincronizará.
Esta configuración consta de tres pasos:
- Ejecuta
kubectl config current-context
para generar el archivo kubeconfig necesario para autenticar en el clúster de GKEmy-cluster
. El usuario raíz genera este archivo con permisos restringidos. - Ejecuta
chmod 444 /kube/config
para que este archivo sea legible en el siguiente paso. - Ejecuta
nomos vet
en el repositorio de Git, que se clona automáticamente en/workspace
. Si usas un repositorio no estructurado, ejecutanomos 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.
Abre la página Activadores en la consola de Google Cloud .
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
Ejecuta el activador para probar la configuración de forma manual:
Abre la página Activadores en la consola de Google Cloud .
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 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 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 Cómo crear una configuración básica de Cloud Build.
Limpia
Borra el proyecto
Delete a Google Cloud project:
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 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