Automatizar la recompilación 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. Una vez que se usa una imagen personalizada, es útil automatizar la recompilación de la imagen personalizada para incorporar las correcciones y actualizaciones disponibles en las imágenes base.

En este tutorial, aprenderá a crear una canalización automatizada para asegurarse de que incluye actualizaciones y parches de seguridad en sus imágenes de estación de trabajo personalizadas.

Objetivos

En este tutorial, crearás un flujo de procesamiento automatizado para tu imagen base siguiendo estos pasos:

  1. Crea un repositorio de Artifact Registry para almacenar y analizar tu imagen personalizada.
  2. Configura GitHub con Google Cloud para almacenar las configuraciones de tus imágenes.
  3. Crea un activador de Cloud Build para automatizar la creación y el despliegue de imágenes personalizadas en Artifact Registry.
  4. Configura Cloud Scheduler para que inicie compilaciones de forma periódica.
  5. Revisa los resultados de los procesos automatizados.

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.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Artifact Registry, Container Scanning API, Cloud Build, and Cloud Scheduler APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

  7. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Artifact Registry, Container Scanning API, Cloud Build, and Cloud Scheduler APIs.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

  13. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  14. Preparar el entorno

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

    1. Define el ID del proyecto de Google Cloud que quieras usar:

      PROJECT_ID=$PROJECT_ID
      
    2. Define el nombre de usuario de GitHub en el que quieres almacenar el repositorio:

      GITHUB_USER=$GITHUB_ID
      
    3. Define las variables PROJECT_NUMBER y REGION que se van a usar durante el proceso:

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

      En el ejemplo anterior, sustituye $REGION por el nombre de la región que quieras usar (por ejemplo, us-central1).

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

    Crear un repositorio de Artifact Registry

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

    1. Crea un repositorio con el siguiente comando:

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

      Sustituye $REGION por el nombre de la región que quieras usar.

    2. Configura Docker para que use tus credenciales de la CLI de gcloud al acceder a Artifact Registry.

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

      Para desactivar Análisis de artefactos, ejecuta el siguiente comando:

      gcloud services disable containerscanning.googleapis.com
      

    Configurar el repositorio de GitHub

    En la práctica, el Dockerfile de tus imágenes personalizadas se guarda en un repositorio de Git. El proceso automatizado accede a ese repositorio durante el proceso de compilación para extraer las configuraciones y el Dockerfile pertinentes.

    Crear una bifurcación del repositorio de ejemplo

    Para bifurcar un repositorio de ejemplo que proporcione definiciones de contenedores, sigue estos pasos:

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

    Conectar Cloud Build a GitHub

    A continuación, conecta ese repositorio a Cloud Build mediante la función de conexión a GitHub integrada. Haz clic en el enlace al repositorio de GitHub y sigue las instrucciones para completar el proceso. No es necesario que crees el activador en el último paso del asistente, y puedes saltarte los últimos pasos porque puedes hacerlo más adelante desde la línea de comandos.

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

    Crear un activador de Cloud Build

    El repositorio de ejemplo 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 ejecutará las instrucciones del archivo cloudbuild.yaml, que se encuentra 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 en Cloud Build llamado custom-image-trigger, tal como indica la marca name en la segunda línea.
    • Las tres líneas siguientes 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. En 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 va a compilar. $_IMAGE_DIR

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

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

    Configurar Cloud Scheduler

    Para asegurarte de que tus imágenes están actualizadas con los últimos parches y actualizaciones, usa Cloud Scheduler para ejecutar el activador de Cloud Build con una frecuencia determinada. En este tutorial, el trabajo se ejecuta todos los días. En la práctica, define una frecuencia que se ajuste a las necesidades de tu organización para asegurarte de que siempre se incluyan las últimas actualizaciones.

    1. Asigna un rol obligatorio 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. Concede 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 la tarea 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. La tarea está configurada para ejecutarse una vez al día. Sin embargo, para probar la función inmediatamente, ejecuta la tarea manualmente desde Cloud Scheduler:

      Ir a Cloud Scheduler

      1. En la página 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 de esa fila.
      3. Haz clic en Forzar la ejecución de un trabajo para probar el sistema manualmente.
      4. Una vez que se haya ejecutado correctamente el comando, ve a la página del historial de Cloud Build para revisar el progreso:

        Ir al historial de Cloud Build

    Revisar los resultados

    Como has habilitado la API Container Scanning durante el proceso de configuración, Artifact Registry analiza automáticamente las imágenes en busca de vulnerabilidades de seguridad.

    Para revisar las vulnerabilidades, sigue estos pasos:

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

      Ir a Artifact Registry Repositories

    2. En la lista de repositorios, haz clic en uno.

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

      Página Repositorios de Artifact Registry que muestra un nombre de imagen de ejemplo

    4. Para ver la lista de vulnerabilidades de una imagen, haga clic en el enlace de la columna Vulnerabilidades. La lista de vulnerabilidades muestra la gravedad, la disponibilidad de una corrección y el nombre del paquete que contiene la vulnerabilidad.

      Página Vulnerabilidades de Artifact Registry, que muestra una lista de ejemplo de vulnerabilidades

    Limpieza

    Para evitar que los recursos utilizados en este tutorial se cobren en tu cuenta de Google Cloud, elimina el proyecto que contiene los recursos o conserva el proyecto y elimina los recursos.

    Para evitar que se apliquen cargos en tu Google Cloud cuenta por los recursos utilizados en esta página, no olvides eliminar los recursos que ya no necesites.

    Para eliminar un Google Cloud proyecto desde la Google Cloud consola o desde la gcloudCLI, sigue estos pasos:

    Consola

    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.

    gcloud

    • In the Google Cloud console, go to the Manage resources page.

      Go to Manage resources

    • 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.

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

    Siguientes pasos