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 una aplicación en ese tipo de destino y, luego, implementarlos 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, configuras el comportamiento de la objetivo. Esta configuración hace referencia a imágenes de contenedor y a shell comandos para ejecutar en esas imágenes, que son las acciones para renderizar e implementar las operaciones.

  2. Define un tipo de destino personalizado y un objetivo que haga referencia a ese tipo.

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

    Esta canalización incluye una sola etapa y utiliza solo un destino. En ese harás referencia al destino que configuraste.

  4. Crea una versión, lo que creará automáticamente un lanzamiento, lo que dará como resultado la de las operaciones de renderización y de implementación personalizadas que se realizan.

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

  5. Consulta los resultados de las operaciones personalizadas. Esto incluye un espacio de configuración cargado a Cloud Storage y una cadena escrita en él 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.

    Go to project selector

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

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

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

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

    Go to project selector

  8. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

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

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

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

    gcloud components update
    
  13. Asegúrate de que la configuración La cuenta de servicio de Compute Engine tiene los permisos necesarios.

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

    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)")[email protected] \
          --role="roles/clouddeploy.jobRunner"
      
    2. Agrega el rol de desarrollador a 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)")[email protected] \
          --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")[email protected] \
          --role="roles/iam.serviceAccountUser" \
          --project=PROJECT_ID
      

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

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

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 y de implementación de la el tipo de objetivo.

Ten en cuenta que las acciones personalizadas proporcionadas en esta guía de inicio rápido no se implementan cualquier aplicación a 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 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
            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:66e2681aa3099b4e517e4cdcdefff8f2aa45d305007124ccdc09686f6712d018
        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 renderización personalizada. y una de implementación personalizada. Cada una de estas acciones personalizadas hace referencia a un una imagen de contenedor para ejecutar y comandos para ejecutar en ese contenedor.

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

Crea la canalización de entrega, el tipo de destino personalizado y el destino

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

  1. 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
    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 objetivo usando el tipo de destino personalizado, y esta canalización no implementa una aplicación tiempo de ejecución.

  3. Confirma tu canalización y tus destinos:

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

    Abrir la página Canalizaciones de entrega

    Se muestra la canalización de entrega que acabas de crear, con un destino detallado en 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

Un lanzamiento es el recurso central de Cloud Deploy que representa el cambios que se están implementando. La canalización de entrega define el ciclo de vida de esa lanzamiento. Consulta Arquitectura de servicios de Cloud Deploy para obtener detalles sobre ese ciclo de vida.

Ejecuta el siguiente comando desde el directorio custom-target-quickstart: Crea 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 rollout. Y todas las fases de eso lanzamiento, incluida la renderización y la implementación.

Ve los resultados en la consola de Google Cloud

Luego de unos minutos, se completará la implementación. En este caso, debido a que las dos acciones personalizadas son comandos para repetir cadenas en un archivo y subirlo a Cloud Storage, nada se implementa 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 Cloud Deploy La página Canalizaciones de entrega para visualizar 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. Porque no existe en una sola etapa de la canalización, la visualización solo muestra 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 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 skaffold.yaml que contiene la cadena "Ejemplo de contenido renderizado de manifiesto".

    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 con dos buckets creados para este lanzamiento. Un bucket contiene el archivo de configuración de la canalización de entrega y el se renderiza skaffold.yaml. El otro incluye el archivo de salida que se acción se configura 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, haz clic 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 haz clic en el custom-output carpeta.

  11. Haz clic en results.json y, luego, en la URL con hipervínculo en la sección URL.

    Este archivo contiene la cadena que configuraste como salida de la custom-deploy, en tu skaffold.yaml:

    Resultado de la acción personalizada de implementación

Limpia

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 ambos buckets de Cloud Storage que están en Cloud Deploy crear.

    Abrir la página del navegador de Cloud Storage

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

¿Qué sigue?