Cómo definir y usar un tipo de objetivo personalizado

En esta guía de inicio rápido, se muestra cómo usar Cloud Deploy para crear un tipo de destino personalizado y, luego, realizar la implementación en un destino personalizado de ese tipo.

En esta guía de inicio rápido, harás lo siguiente:

  1. Define un tipo de objetivo personalizado, en el que configurarás el comportamiento del objetivo. Esta configuración hace referencia a imágenes de contenedores y comandos de shell que se ejecutan en esas imágenes, que son las acciones para las operaciones de renderización e implementación.

  2. Define un objetivo que haga referencia al tipo de objetivo personalizado.

  3. Define tu canalización de entrega de Cloud Deploy.

    Esta canalización incluye solo una etapa y usa solo un destino. En esa etapa, harás referencia al destino que configuraste.

  4. Crea una configuración de Skaffold, que es necesaria para la versión.

  5. Crea una versión, lo que genera automáticamente un lanzamiento, lo que hace que se realicen las operaciones de renderización y de implementación personalizadas.

    Como parte de esta versión y lanzamiento, se ejecutan las operaciones de renderización y de implementación definidas en la configuración de tu tipo de destino personalizado.

  6. Consulta los resultados de las operaciones personalizadas. Esto incluye un archivo de configuración renderizado que se subió a Cloud Storage, una cadena escrita en ese archivo y un archivo de resultados que incluye el estado de la operación.

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. 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 role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

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

  4. Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Instala Google Cloud CLI.

  6. Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

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

    gcloud init
  8. 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 role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

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

  10. Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. Instala Google Cloud CLI.

  12. Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

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

    gcloud init
  14. Si ya instalaste Google Cloud CLI, asegúrate de ejecutar la versión más reciente:

    gcloud components update
    
  15. Asegúrate de que la cuenta de servicio predeterminada de Compute Engine tenga los permisos necesarios.

    Es posible que la cuenta de servicio ya tenga los permisos necesarios. Estos pasos se incluyen en los proyectos que inhabilitan la asignación automática de roles para las cuentas de servicio predeterminadas.

    1. Primero, agrega el rol clouddeploy.jobRunner:
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --role="roles/clouddeploy.jobRunner"
      
    2. Agrega el rol de desarrollador para tu entorno de ejecución específico.
    3. Agrega el rol iam.serviceAccountUser, que incluye el permiso actAs para implementar en el entorno de ejecución:
      gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --role="roles/iam.serviceAccountUser" \
          --project=PROJECT_ID
      

Crea tu canalización de entrega, tu tipo de destino personalizado y tu destino

Puedes definir tu canalización de entrega, el tipo de destino personalizado y el destino en un solo archivo o en archivos separados. En esta guía de inicio rápido, crearás un solo archivo con los tres.

  1. Abre una ventana de terminal.

  2. Crea un directorio nuevo y navega hasta él.

    mkdir custom-target-quickstart
    cd custom-target-quickstart
    
  3. En el directorio custom-target-quickstart, crea un archivo nuevo, clouddeploy.yaml, con el siguiente contenido:

    apiVersion: deploy.cloud.google.com/v1
    kind: DeliveryPipeline
    metadata:
      name: custom-targets-pipeline
    serialPipeline:
      stages:
      - targetId: sample-env
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
      name: sample-env
    customTarget:
      customTargetType: basic-custom-target
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: CustomTargetType
    metadata:
      name: basic-custom-target
    tasks:
      render:
        type: 'container'
        image: gcr.io/google.com/cloudsdktool/google-cloud-cli@sha256:484e8266c1cfc84b283bc6d4eec1f6b61223115178cce76fb59f77b223f26e8e
        command: ['/bin/bash']
        args:
          - '-c'
          - |-
            echo "Sample manifest rendered content" > manifest.txt
            gcloud storage cp manifest.txt $CLOUD_DEPLOY_OUTPUT_GCS_PATH/manifest.txt
            echo {\"resultStatus\": \"SUCCEEDED\", \"manifestFile\": \"$CLOUD_DEPLOY_OUTPUT_GCS_PATH/manifest.txt\"} > results.json
            gcloud storage cp results.json $CLOUD_DEPLOY_OUTPUT_GCS_PATH/results.json
      deploy:
        type: 'container'
        image: gcr.io/google.com/cloudsdktool/google-cloud-cli@sha256:484e8266c1cfc84b283bc6d4eec1f6b61223115178cce76fb59f77b223f26e8e
        command: ['/bin/bash']
        args:
          - '-c'
          - |-
            echo {\"resultStatus\": \"SUCCEEDED\"} > results.json
            gcloud storage cp results.json $CLOUD_DEPLOY_OUTPUT_GCS_PATH/results.json
    

    La definición del tipo de destino personalizado incluye la sección tasks, que define una tarea de renderización y una tarea de implementación. Cada una de estas tareas hace referencia a una imagen de contenedor para ejecutar y a los comandos que se ejecutarán en ese contenedor.

  4. Registra tu canalización y tus destinos con el servicio de Cloud Deploy:

    gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
    

    Ahora tienes una canalización de entrega con un destino. Este es tu destino con el tipo de destino personalizado, y esta canalización no implementa una aplicación en un tiempo de ejecución.

  5. Confirma tu canalización y tus objetivos:

    En la consola de Google Cloud , navega a la página Canalizaciones de entrega de Cloud Deploy para ver una lista de las canalizaciones de entrega disponibles.

    Abrir la página Canalizaciones de entrega

    Se muestra la canalización de entrega que acabas de crear, con un destino enumerado en la columna Destinos.

    Página de la canalización de entrega en la consola de Google Cloud , en la que se muestra tu canalización

Crea tu archivo de configuración de Skaffold

La versión de esta guía de inicio rápido requiere un archivo de configuración de Skaffold, pero este archivo no requiere una configuración significativa.

  1. Crea un archivo llamado skaffold.yaml con el contenido siguiente:

    apiVersion: skaffold/v4beta7
    kind: Config
    

Crea una versión

Una versión es el recurso central de Cloud Deploy que representa los cambios que se implementan. La canalización de entrega define el ciclo de vida de esa versión. Consulta la arquitectura del servicio de Cloud Deploy para obtener detalles sobre ese ciclo de vida.

Ejecuta el siguiente comando desde el directorio custom-target-quickstart para crear un recurso release que represente la acción personalizada que se implementará:

gcloud deploy releases create test-release-001 \
  --project=PROJECT_ID \
  --region=us-central1 \
  --delivery-pipeline=custom-targets-pipeline

Al igual que con todas las versiones (a menos que incluyan --disable-initial-rollout), Cloud Deploy también crea automáticamente un recurso de lanzamiento. Se ejecutan todas las fases de esa implementación, incluidas la renderización y la implementación.

Visualiza los resultados en la consola de Google Cloud

Después de unos minutos, se completará la implementación. En este caso, como las dos acciones personalizadas son comandos para hacer eco de cadenas en un archivo y subir el archivo a Cloud Storage, no se implementa nada en ningún entorno de ejecución de destino.

Sin embargo, puedes ver el archivo y las cadenas que contiene:

  1. En la consola de Google Cloud , navega a la página Canalizaciones de entrega de Cloud Deploy para ver tu canalización de entrega (custom-targets-pipeline).

    Abrir la página Canalizaciones de entrega

  2. Haz clic en el nombre de tu canalización de entrega (custom-targets-pipeline).

    La visualización de la canalización muestra el estado de implementación de la app. Debido a que solo hay una etapa en la canalización, la visualización muestra un solo nodo.

    Visualización de la canalización de entrega que muestra el éxito

    Y la versión aparece en la pestaña Versiones, en Detalles de la canalización de entrega.

  3. Haz clic en el nombre de la versión.

    Se muestra la página Detalles de la versión.

  4. Haz clic en la pestaña Artefactos.

  5. En Artefactos de destino, haz clic en el vínculo VER ARTEFACTOS.

    Se muestra el archivo de manifiesto renderizado. En este caso, el archivo es el resultado de la acción de renderización personalizada que definiste en la configuración de tu tipo de destino personalizado y contiene la cadena "Contenido renderizado de muestra del manifiesto".

    Es el resultado de la acción de renderización personalizada.

  6. Busca los buckets de Cloud Storage creados por esta versión.

    Abrir la página del navegador de Cloud Storage

    Se muestra la página Buckets, en la que se ven dos buckets creados para esta versión. Un bucket contiene el archivo de configuración de la canalización de entrega y el skaffold.yaml renderizado. El otro incluye el archivo de salida que nuestra acción personalizada está configurada para crear.

  7. Haz clic en el bucket cuyo nombre comienza con us-central1.deploy-artifacts

    Lista de buckets de Cloud Storage

  8. Haz clic en la carpeta cuyo nombre comienza con custom-targets-pipeline- y, luego, en la carpeta test-release-001.

  9. Haz clic en la carpeta cuyo nombre es el de tu lanzamiento, que debería ser test-release-001-to-sample-env-0001.

  10. Haz clic en la carpeta que se muestra, que es un UUID, y, luego, en la carpeta custom-output.

  11. Haz clic en results.json y, luego, en la URL con hipervínculo del campo URL autenticada.

    Este archivo contiene la cadena que configuraste como resultado de la acción custom-deploy, en la definición de tu tipo de destino personalizado:

    Es el resultado de la acción personalizada de la implementación.

Realiza una limpieza

Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que usaste en esta página.

  1. Borra la canalización de entrega, el destino, la versión y el lanzamiento:

    gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
    
  2. Borra los dos buckets de Cloud Storage que creó Cloud Deploy.

    Abrir la página del navegador de Cloud Storage

Eso es todo, finalizaste la guía de inicio rápido.

¿Qué sigue?