Definir y usar un tipo de destino personalizado

En esta guía de inicio rápido se explica cómo usar Cloud Deploy para crear un tipo de destino personalizado y, a continuación, desplegarlo 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 imágenes de contenedor y a comandos de shell que se ejecutan en esas imágenes, que son las acciones de las operaciones de renderización e implementación.

  2. Defina un tipo de segmentación personalizada y un destino que haga referencia a ese tipo.

  3. Define tu flujo de procesamiento de entrega de Cloud Deploy.

    Esta canalización solo incluye una fase y usa un solo destino. En esa fase, harás referencia al objetivo que has configurado.

  4. Crea una versión, lo que genera automáticamente un lanzamiento, lo que provoca que se realicen las operaciones de renderización e implementación personalizadas.

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

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

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

    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.

    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 gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  14. Si ya tienes instalada la CLI de Google Cloud, asegúrate de que estás ejecutando la versión más reciente:

    gcloud components update
    
  15. Comprueba que la cuenta de servicio predeterminada de Compute Engine tenga los permisos suficientes.

    Es posible que la cuenta de servicio ya tenga los permisos necesarios. Estos pasos se incluyen para los proyectos que inhabilitan las concesiones automáticas de roles para las cuentas de servicio predeterminadas.

    1. Primero, añade 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. Añade el rol de desarrollador para tu tiempo de ejecución específico.
    3. Añade el rol iam.serviceAccountUser, que incluye el permiso actAs para implementar en el tiempo 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
      

    Preparar la configuración de Skaffold

    Cloud Deploy usa Skaffold para proporcionar los detalles de qué desplegar y cómo desplegarlo 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 renderización e implementación del 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 tiempo de ejecución. Tanto la acción de renderización como la de despliegue suben un archivo de resultados a Cloud Storage para cumplir el contrato de destino personalizado entre Cloud Deploy y la renderización y el despliegue definidos por el usuario.

    1. Abre una ventana de terminal.

    2. Crea un directorio y accede a é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: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
      - name: custom-deploy
        containers:
        - name: deploy
          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
      

      Este archivo 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 va a ejecutar y a los comandos que se van a ejecutar en ese contenedor.

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

    Crea tu flujo de procesamiento de entrega, el tipo de destino personalizado y el destino

    Puedes definir tu canal de distribución, el tipo de destino personalizado y el destino en un archivo o en archivos independientes. En esta guía de inicio rápido, crearás un único archivo con los tres.

    1. En el directorio custom-target-quickstart, crea un archivo llamado 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
      customActions:
        renderAction: custom-render
        deployAction: custom-deploy
      
    2. Registra tu canal y tus destinos en el servicio Cloud Deploy:

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

      Ahora tienes un flujo de procesamiento 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.

    3. Confirma tu flujo de procesamiento y tus objetivos:

      En la Google Cloud consola, ve a la página Pipelines de entrega de Cloud Deploy para ver una lista de los pipelines de entrega disponibles.

      Abre la página Pipelines de entrega.

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

      Página de flujo de procesamiento de entrega en la consola Google Cloud , donde se muestra tu flujo de procesamiento

    Crear una versión

    Una versión es el recurso central de Cloud Deploy que representa los cambios que se van a implementar. El flujo de procesamiento de entrega define el ciclo de vida de esa versión. Consulta la arquitectura de servicio de Cloud Deploy para obtener más información 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 va a 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 despliegue. Se ejecutan todas las fases de ese lanzamiento, incluidas la renderización y la implementación.

    Ver los resultados en la Google Cloud consola

    Al cabo de unos minutos, el despliegue se habrá completado. En este caso, como las dos acciones personalizadas son comandos para mostrar cadenas en un archivo y subir el archivo a Cloud Storage, no se implementa nada en ningún tiempo de ejecución de destino.

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

    1. En la Google Cloud consola, ve a la página Pipelines de entrega de Cloud Deploy para ver tu pipeline de entrega (custom-targets-pipeline).

      Abre la página Pipelines de entrega.

    2. Haga clic en el nombre de su flujo de trabajo de entrega (custom-targets-pipeline).

      La visualización de la canalización muestra el estado de la implementación de la aplicación. Como solo hay una fase en la canalización, la visualización muestra un solo nodo.

      Visualización del flujo de procesamiento de entrega que muestra el éxito

      Tu lanzamiento aparecerá en la pestaña Lanzamientos, 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, haga clic en el enlace 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 has definido en el archivo de configuración skaffold.yaml, que contiene la cadena "Sample manifest rendered content".

      Salida de la acción de renderización personalizada

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

      Abrir la página del navegador de Cloud Storage

      Se muestra la página Contenedores, donde se ven dos contenedores creados para esta versión. Un segmento contiene el archivo de configuración del flujo de procesamiento de entrega y el skaffold.yaml renderizado. El otro incluye el archivo de salida que nuestra acción personalizada está configurada para crear.

    7. Haga clic en el segmento cuyo nombre empiece por us-central1.deploy-artifacts...

      Lista de segmentos de Cloud Storage

    8. Haz clic en la carpeta cuyo nombre empiece por custom-targets-pipeline- y, a continuación, en la carpeta test-release-001.

    9. Haz clic en la carpeta cuyo nombre sea 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, a continuación, en la carpeta custom-output.

    11. Haz clic en results.json y, a continuación, en la URL enlazada del campo URL autenticada.

      Este archivo contiene la cadena que has configurado como salida de la acción custom-deploy en tu skaffold.yaml:

      Salida de la acción personalizada de implementación

    Limpieza

    Para evitar que se apliquen cargos en tu cuenta de Google Cloud por los recursos utilizados en esta página, sigue estos pasos.

    1. Elimina el flujo de procesamiento, el destino, la versión y el lanzamiento:

      gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
      
    2. Elimina los dos segmentos de Cloud Storage que ha creado Cloud Deploy.

      Abrir la página del navegador de Cloud Storage

    ¡Ya has completado esta guía de inicio rápido!

    Siguientes pasos