Automatiza las recompilaciones de imágenes de contenedor para sincronizar las actualizaciones de la imagen base


Cloud Workstations te permite crear y usar imágenes personalizadas para tus estaciones de trabajo. Después de usar una imagen personalizada, es útil automatizar una recompilación de la imagen personalizada para extraer correcciones y actualizaciones disponibles en las imágenes base.

En este instructivo, aprenderás a compilar una canalización automatizada para asegurarte de incluir actualizaciones y parches de seguridad en las imágenes de tu estación de trabajo personalizada.

Objetivos

Si sigues este instructivo, compilarás una canalización automatizada para tu imagen base con estos pasos:

  1. Crea un repositorio de Artifact Registry para almacenar y analizar tu imagen personalizada.
  2. Configura GitHub con Google Cloud para almacenar los parámetros de configuración de tus imágenes.
  3. Crear un activador de Cloud Build para automatizar la creación y la implementación de imágenes personalizadas en Artifact Registry
  4. Configurar Cloud Scheduler para iniciar compilaciones periódicamente
  5. Revisa los resultados de los procesos automatizados.

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. Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

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

  1. Accede a tu cuenta de Google Cloud. 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.
  2. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  4. Habilita las API de Artifact Registry, Container Scanning API, Cloud Build y Cloud Scheduler.

    Habilita las API

  5. Instala Google Cloud CLI.
  6. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  7. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  8. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  9. Habilita las API de Artifact Registry, Container Scanning API, Cloud Build y Cloud Scheduler.

    Habilita las API

  10. Instala Google Cloud CLI.
  11. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init

Prepara el entorno

Antes de continuar, asegúrate de establecer las siguientes variables de entorno.

  1. Establece el ID del proyecto de la nube que planeas usar:

    PROJECT_ID=$PROJECT_ID
    
  2. Establece el nombre de usuario de GitHub en el que planeas almacenar tu repositorio:

    GITHUB_USER=$GITHUB_ID
    
  3. Configura las variables PROJECT_NUMBER y REGION que se usarán durante el proceso:

    PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
        --format='value(projectNumber)')
    
    REGION=$REGION
    

    En el ejemplo anterior, reemplaza $REGION por el nombre de la región que planeas usar, por ejemplo, us-central1.

    Para obtener más información sobre las regiones disponibles, consulta Ubicaciones de Cloud Workstations.

Crea un repositorio de Artifact Registry

En este instructivo, usarás Artifact Registry para almacenar y analizar tus imágenes.

  1. Usa el siguiente comando para crear un repositorio:

    gcloud artifacts repositories create custom-images \
          --repository-format=docker \
          --location=$REGION \
          --description="Docker repository"
    

    Reemplaza $REGION por el nombre de la región que planeas usar.

  2. Configura Docker para que use tus credenciales de CLI de gcloud cuando accedas a Artifact Registry.

    gcloud auth configure-docker $REGION-docker.pkg.dev
    

    Para desactivar Artifact Analysis, ejecuta el siguiente comando:

    gcloud services disable containerscanning.googleapis.com
    

Configura tu repositorio de GitHub

En la práctica, puedes conservar el Dockerfile de las imágenes personalizadas en un repositorio de Git. El proceso automatizado accede a ese repositorio durante el proceso de compilación para extraer los archivos de configuración relevantes y el Dockerfile.

Bifurca el repositorio de muestra

Para bifurcar un repositorio de muestra que proporciona definiciones de contenedores, sigue estos pasos:

  1. Haz clic en este vínculo para crear una bifurcación nueva del repositorio software-delivery-workshop.
  2. Si se te solicita, accede a GitHub.
  3. Selecciona tu nombre de usuario de GitHub como propietario. El nombre del repositorio aparecerá como software-delivery-workshop.
  4. Haz clic en Crear bifurcación y espera unos segundos a que se complete el proceso.

Conecta Cloud Build a GitHub

A continuación, conecta ese repositorio a Cloud Build con la capacidad de conexión integrada de GitHub. Haz clic en el vínculo al repositorio de GitHub y sigue las instrucciones que describen cómo completar el proceso. No es necesario que crees el activador en el último paso del asistente. Puedes omitir los últimos pasos porque puedes hacerlo más tarde desde la línea de comandos.

Si usas una solución de repositorio de Git diferente, también puedes seguir las instrucciones para conectar Cloud Build a GitLab o Bitbucket.

Crea un activador de Cloud Build

El repositorio de muestra contiene una definición de contenedor y una configuración de Cloud Build que se usa para compilar la imagen de contenedor. En este paso, crearás un activador de Cloud Build que ejecute las instrucciones en el archivo cloudbuild.yaml que puedes encontrar en la carpeta labs/cloudbuild-scheduled-jobs/code-oss-java.

gcloud builds triggers create manual \
    --name=custom-image-trigger \
    --repo=$GITHUB_USER/software-delivery-workshop \
    --repo-type=GITHUB \
    --branch=main \
    --build-config=labs/cloudbuild-scheduled-jobs/code-oss-java/cloudbuild.yaml \
    --substitutions=_REGION=$REGION,_AR_REPO_NAME=custom-images,_AR_IMAGE_NAME=code-oss-java,_IMAGE_DIR=labs/cloudbuild-scheduled-jobs/code-oss-java

TRIGGER_ID=$(gcloud builds triggers list \
    --filter=name="custom-image-trigger" --format="value(id)")

En este ejemplo, se configura lo siguiente:

  • El comando gcloud de la CLI crea un activador manual dentro de Cloud Build llamado custom-image-trigger como lo indica la marca name en la segunda línea.
  • Las siguientes tres líneas contienen marcas relacionadas con el repositorio de GitHub de origen:
  • La marca build-config indica la ruta al archivo de Cloud Build en el repositorio de Git.
  • Para que el trabajo sea dinámico, usa la marca substitutions. Para este trabajo, el comando pasa las siguientes variables:

    • Región, $_REGION
    • Nombre del repositorio de Artifact Registry, $_AR_REPO_NAME
    • Nombre de la imagen del contenedor, $_AR_IMAGE_NAME
    • Ubicación del Dockerfile que se compilará, $_IMAGE_DIR

    Consulta el archivo cloudbuild.yaml para ver cómo se usan estas variables en el proceso.

  • Después de crear el activador, se recupera su nombre único y se almacena en la variable de entorno $TRIGGER_ID para usarlo más adelante.

Configura Cloud Scheduler

Para asegurarte de que tus imágenes estén actualizadas con las actualizaciones y los parches más recientes, usa Cloud Scheduler para ejecutar el activador de Cloud Build con una frecuencia establecida. Para este instructivo, el trabajo se ejecuta todos los días. En la práctica, establece una frecuencia que se alinee con las necesidades de tu organización para asegurarte de que siempre se incluyan las actualizaciones más recientes.

  1. Otorga un rol necesario a la cuenta de servicio predeterminada para invocar el activador de Cloud Build:

    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
        --role="roles/cloudbuild.builds.editor"
    
  2. Otorga un rol obligatorio a la cuenta de servicio de Cloud Build para subir imágenes a Artifact Registry:

    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
        --role="roles/artifactregistry.admin"
    
  3. Crea el trabajo de Cloud Scheduler con el siguiente comando:

    gcloud scheduler jobs create http run-build \
        --schedule='0 1 * * *' \
        --uri=https://cloudbuild.googleapis.com/v1/projects/$PROJECT_ID/locations/global/triggers/$TRIGGER_ID:run \
        --location=us-central1 \
        --oauth-service-account-email=$PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --oauth-token-scope=https://www.googleapis.com/auth/cloud-platform
    
  4. El trabajo está configurado para ejecutarse una vez al día; sin embargo, si quieres probar la función de inmediato, ejecuta el trabajo de forma manual desde Cloud Scheduler:

    Ir a Cloud Scheduler

    1. En la página de Cloud Scheduler, busca la entrada que acabas de crear llamada run-build.
    2. En la columna Acciones, haz clic en el menú de opciones more_vertMás para esa fila.
    3. Haz clic en Forzar la ejecución de una tarea para probar el sistema de forma manual.
    4. Una vez que el comando se ejecute de forma correcta, cambia a la página del historial de Cloud Build para revisar el progreso:

      Ir al historial de Cloud Build

Revise los resultados

Debido a que habilitaste la API de Container Scanning como parte del proceso de configuración, Artifact Registry analiza automáticamente las imágenes en busca de vulnerabilidades de seguridad.

Para revisar las vulnerabilidades, haz lo siguiente:

  1. Abre la página de repositorios de Artifact Registry:

    Ir a los repositorios de Artifact Registry

  2. En la lista de repositorios, haz clic en un repositorio.

  3. Haz clic en el nombre de una imagen. Los totales de las vulnerabilidades para cada resumen de la imagen aparecen en la columna Vulnerabilidades.

    Página de repositorios de Artifact Registry en la que se muestra un nombre de imagen de muestra

  4. Para ver la lista de vulnerabilidades de una imagen, haz clic en el vínculo de la columna Vulnerabilidades. En la lista de vulnerabilidades, se muestra la gravedad, la disponibilidad de una corrección y el nombre del paquete que contiene la vulnerabilidad.

    Página de vulnerabilidades de Artifact Registry que muestra una lista de muestra de vulnerabilidades

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en esta página, asegúrate de borrar los recursos que ya no necesitas.

Para borrar un proyecto de Google Cloud desde la consola de Google Cloud o desde la CLI de gcloud, haz lo siguiente:

Consola

  1. En la consola de Google Cloud, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

gcloud

    Borra un proyecto de Google Cloud:

    gcloud projects delete PROJECT_ID

Para obtener más información sobre cómo borrar otros recursos, como clústeres de estaciones de trabajo, configuraciones de estaciones de trabajo y estaciones de trabajo, consulta Borra recursos.

¿Qué sigue?