Desplegar en Cloud Run con Cloud Build

En esta página se explica cómo desplegar automáticamente servicios de Cloud Run con Cloud Build. Si no has usado nunca Cloud Build, consulta primero las guías de inicio rápido y la descripción general de la configuración de compilación.

Cloud Run te permite ejecutar imágenes sin estado en un entorno sin servidor. Con Cloud Build, puedes desplegar imágenes de Artifact Registry en Cloud Run. Puedes implementar una imagen que ya tengas, crear e implementar una imagen o automatizar la implementación.

Antes de empezar

  • Enable the Cloud Build, Cloud Run, Artifact Registry, and Resource Manager APIs.

    Enable the APIs

Permisos de Gestión de Identidades y Accesos necesarios

Para obtener los permisos que necesitas para desplegar en Cloud Run con Cloud Build, pide a tu administrador que te conceda los siguientes roles de IAM en la cuenta de servicio predeterminada de Cloud Build:

Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.

Crear y desplegar una imagen

Cloud Build te permite compilar una imagen, almacenarla en Artifact Registry y, a continuación, desplegarla en Cloud Run.

Para crear y desplegar una imagen, sigue estos pasos:

  1. En el directorio raíz de tu proyecto, crea un archivo de configuración llamado cloudbuild.yaml.

  2. En el archivo de configuración de compilación, añade docker pasos de compilación para compilar la imagen y enviarla a Artifact Registry. A continuación, añade un gcloud paso de compilación para invocar el comando gcloud run deploy y desplegar la imagen en Cloud Run:

    steps:
    # Build the image
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE', '.']
    # Push the image to Artifact Registry
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE']
    # Deploy image to Cloud Run
    - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
      entrypoint: gcloud
      args: ['run', 'deploy', 'SERVICE_NAME', '--image', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE', '--region', 'SERVICE_REGION']
    images:
    - 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE'
    

    Donde:

    • REPOSITORY es el nombre del repositorio de Artifact Registry desde el que implementas la imagen.
    • LOCATION es la ubicación de tu repositorio de Artifact Registry, como us-east1.
    • PROJECT_ID es el ID del proyecto Google Cloud en el que se almacena la imagen.
    • SERVICE_NAME es el nombre del servicio de Cloud Run.
    • SERVICE_REGION es la región del servicio de Cloud Run que vas a desplegar.
    • IMAGE es el nombre de la imagen en Artifact Registry.
  3. Ve al directorio raíz de tu proyecto y ejecuta el siguiente comando, donde LOCATION es una de las regiones de compilación admitidas para ejecutar la compilación:

     gcloud builds submit --region=LOCATION
    

Una vez completado el proceso, se muestra un mensaje de éxito junto con la URL del servicio implementado.

Despliegue continuo

Puedes automatizar el despliegue de tu software en Cloud Run creando activadores de Cloud Build. Puedes configurar tus activadores para compilar y desplegar imágenes cada vez que actualices tu código fuente.

Para automatizar el despliegue, sigue estos pasos:

  1. En la raíz de tu repositorio, añade un archivo de configuración llamado cloudbuild.yaml con los pasos para crear la imagen, enviarla a Artifact Registry y, a continuación, invocar el comando gcloud run deploy:

    steps:
    # Build the image
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA', '.']
    # Push the image to Artifact Registry
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA']
    # Deploy image to Cloud Run
    - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
      entrypoint: gcloud
      args: 
        - 'run'
        - 'deploy'
        - 'SERVICE_NAME'
        - '--image'
        - 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA'
        - '--region'
        - 'SERVICE_REGION'
    images:
    - 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA'
    

    Donde:

    • REPOSITORY es el nombre del repositorio de Artifact Registry desde el que implementas la imagen.
    • LOCATION es la ubicación de tu repositorio de Artifact Registry, como us-east1.
    • PROJECT_ID es el ID del proyecto Google Cloud en el que se almacena la imagen.
    • SERVICE_NAME es el nombre del servicio de Cloud Run.
    • SERVICE_REGION es la región del servicio de Cloud Run que vas a desplegar.
    • IMAGE es el nombre de la imagen en Artifact Registry.

    Cloud Build rellena la variable de sustitución $COMMIT_SHA cuando se activa desde un repositorio de Git.

  2. Crea un activador de compilación con el archivo de configuración que has creado en el paso anterior:

    1. Abre la página Activadores:

      Ir a la página Activadores

    2. Haz clic en Crear activador.

    3. En el campo Nombre, introduce un nombre para el activador.

    4. En Región, selecciona la región de tu activador.

    5. En Evento, selecciona el evento del repositorio para iniciar el activador.

    6. En Source (Origen), selecciona tu repositorio y el nombre de la rama o etiqueta que activará el activador. Para obtener más información sobre cómo especificar qué ramas se deben compilar automáticamente, consulta Crear un activador de compilación.

    7. En Configuración, selecciona Archivo de configuración de Cloud Build (YAML o JSON).

    8. En el campo Ubicación del archivo de configuración de Cloud Build, escribe cloudbuild.yaml después de /.

    9. Haz clic en Crear para guardar el activador de compilación.

    Ahora, cuando envíes código nuevo a tu repositorio, Cloud Build invocará una compilación y desplegará el servicio en Cloud Run.

Para obtener más información sobre cómo crear activadores de Cloud Build, consulta el artículo Crear y gestionar activadores de compilación.

Usar permisos mínimos de gestión de identidades y accesos

Cuando se despliega una imagen en un servicio de Cloud Run, la imagen se ejecuta con la identidad de la cuenta de servicio de entorno de ejecución del servicio de Cloud Run. Como Cloud Build puede desplegar nuevas imágenes automáticamente, Cloud Build debe poder actuar como la cuenta de servicio de entorno de ejecución de tu servicio de Cloud Run.

Para conceder acceso limitado a Cloud Build para desplegar en un servicio de Cloud Run, haz lo siguiente:

Consola

  1. Ve a la página Cuentas de servicio de la Google Cloud consola:

    Ir a Cuentas de servicio

  2. Haz clic en la dirección de correo de la cuenta de servicio de entorno de ejecución de tu servicio de Cloud Run (de forma predeterminada, es PROJECT_NUMBER-compute@developer.gserviceaccount.com).

  3. Haz clic en la pestaña Permisos.

  4. Haz clic en Conceder acceso.

  5. Introduce la cuenta de servicio de Cloud Build (PROJECT_NUMBER@cloudbuild.gserviceaccount.com).

  6. En el menú desplegable Seleccionar un rol, selecciona Cuentas de servicio > Usuario de cuenta de servicio.

  7. Haz clic en Guardar.

gcloud

Usa el comando gcloud iam service-accounts add-iam-policy-binding, donde PROJECT_NUMBER es el ID numérico de tu proyecto:

gcloud iam service-accounts add-iam-policy-binding \
  PROJECT_NUMBER-compute@developer.gserviceaccount.com \
  --member="serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com" \
  --role="roles/iam.serviceAccountUser"

Sustituye PROJECT_NUMBER por el ID numérico de tu proyecto.

Si usas Cloud Run con una identidad de servicio personalizada, sustituye PROJECT_NUMBER-compute@developer.gserviceaccount.com por la dirección de tu cuenta de servicio.

Para obtener más información, consulta Permisos de implementación.

Ejemplos de código

Aquí tienes algunos repositorios de ejemplo, cada uno de los cuales contiene una aplicación de ejemplo y un archivo de configuración de compilación para desplegar la aplicación en Cloud Run:

  • deploy-prebuilt: un ejemplo de código que muestra cómo desplegar una imagen prediseñada en Cloud Run.
  • run-example-builddeploy: un ejemplo de código que muestra cómo crear y desplegar una imagen en Cloud Run.

Siguientes pasos