Cómo definir y usar un tipo de destino 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, implementarlo en un destino personalizado de ese tipo.

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

  1. Crea una configuración de Skaffold.

    En el archivo de configuración de Skaffold, se configura el comportamiento del destino. Esta configuración hace referencia a las imágenes de contenedor y a los comandos de shell que se ejecutarán en esas imágenes, que son las acciones para las operaciones de implementación y renderización.

  2. Define un tipo de segmentación personalizada y un objetivo que haga referencia a ese tipo.

  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 versión que cree automáticamente un lanzamiento, lo que genera las operaciones de implementación y renderización personalizadas.

    Como parte de esta versión y este lanzamiento, se ejecutan las operaciones de renderización y de implementación definidas en tu configuración de Skaffold.

  5. Visualiza los resultados de las operaciones personalizadas. Esto incluye un archivo de configuración renderizado que se subió a Cloud Storage y una string escrita en ese archivo, así como 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. 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 Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage.

    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 Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage.

    Habilita las API

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

    gcloud init
  12. Si ya tienes instalado Google Cloud CLI, asegúrate de estar ejecutando la versión más reciente:

    gcloud components update
    
  13. 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 funciones 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 la función 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
      

Prepara la configuración de Skaffold y el manifiesto de la aplicación

Cloud Deploy usa Skaffold para proporcionar los detalles sobre qué implementar y cómo hacerlo en tu destino.

En esta guía de inicio rápido, crearás un archivo skaffold.yaml, que define acciones personalizadas que representan las operaciones de implementación y renderización para el tipo de destino personalizado.

Ten en cuenta que las acciones personalizadas que se proporcionan en esta guía de inicio rápido no implementan ninguna aplicación en un entorno de ejecución. Las acciones de renderización y de implementación suben un archivo de resultados a Cloud Storage para cumplir con el contrato de destino personalizado entre Cloud Deploy y la renderización y la implementación definidas por el usuario.

  1. Abre una ventana de la terminal.

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

    mkdir custom-target-quickstart
    cd custom-target-quickstart
    
  3. Crea un archivo llamado skaffold.yaml con el siguiente contenido:

    apiVersion: skaffold/v4beta7
    kind: Config
    customActions:
    - name: custom-render
      containers:
      - name: render
        image: gcr.io/google.com/cloudsdktool/google-cloud-cli@sha256:66e2681aa3099b4e517e4cdcdefff8f2aa45d305007124ccdc09686f6712d018
        command: ['/bin/bash']
        args:
          - '-c'
          - |-
            echo "Sample manifest rendered content" > manifest.txt
            gsutil cp manifest.txt $CLOUD_DEPLOY_OUTPUT_GCS_PATH/manifest.txt
            echo {\"resultStatus\": \"SUCCEEDED\", \"manifestFile\": \"$CLOUD_DEPLOY_OUTPUT_GCS_PATH/manifest.txt\"} > results.json
            gsutil cp results.json $CLOUD_DEPLOY_OUTPUT_GCS_PATH/results.json
    - name: custom-deploy
      containers:
      - name: deploy
        image: gcr.io/google.com/cloudsdktool/google-cloud-cli@sha256:66e2681aa3099b4e517e4cdcdefff8f2aa45d305007124ccdc09686f6712d018
        command: ['/bin/bash']
        args:
          - '-c'
          - |-
            echo {\"resultStatus\": \"SUCCEEDED\"} > results.json
            gsutil cp results.json $CLOUD_DEPLOY_OUTPUT_GCS_PATH/results.json
    

    En este archivo, se incluye la estrofa customActions:, que define una acción de renderización personalizada y una acción de implementación personalizada. Cada una de estas acciones personalizadas hace referencia a una imagen de contenedor que se ejecutará y a comandos que se ejecutarán en ese contenedor.

    Consulta la referencia de skaffold.yaml para obtener más información sobre este archivo de configuración.

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

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

  1. En el directorio custom-target-quickstart, crea un archivo nuevo, clouddeploy.yaml, que incluya 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
    customActions:
      renderAction: custom-render
      deployAction: custom-deploy
    
  2. Registra tu canalización y 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 que usa el tipo de destino personalizado; esta canalización no implementa una aplicación en un entorno de ejecución.

  3. Confirma la canalización y los destinos:

    En la consola de Google Cloud, navega a la página Canalizaciones de entrega de Cloud Deploy para ver la lista de 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 canalización de entrega en la consola de Google Cloud, en la que se muestra tu canalización

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 Arquitectura de 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 crea automáticamente un recurso de lanzamiento. Se ejecutan todas las fases de ese lanzamiento, incluidas la renderización y la implementación.

Visualiza los resultados en la consola de Google Cloud

La implementación habrá finalizado luego de unos minutos. En este caso, debido a que las dos acciones personalizadas son comandos para repetir strings en un archivo y subirlo 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 en ese archivo:

  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 la canalización de entrega (custom-targets-pipeline).

    La visualización de la canalización muestra el estado de implementación de la app. Como solo hay una etapa en la canalización, la visualización muestra solo un 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 mostrará 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 mostrará el archivo de manifiesto procesado. En este caso, el archivo es el resultado de la acción de renderización personalizada que definiste en el archivo de configuración skaffold.yaml, que contiene la cadena "Contenido renderizado del manifiesto de muestra".

    Resultado de la acción de renderización personalizada

  6. Busca los buckets de Cloud Storage que se crearon en esta versión.

    Abrir la página del navegador de Cloud Storage

    Se mostrará la página Buckets, que muestra 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. La otra 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 nombre del 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 haz clic en la carpeta custom-output.

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

    Este archivo contiene la string que configuraste como resultado de la acción custom-deploy en tu skaffold.yaml:

    Resultado de la acción de implementación personalizada

Limpia

Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que se usaron 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?