Ejecutar enlaces antes y después de la implementación

En esta guía de inicio rápido se muestra cómo ejecutar un hook de implementación, es decir, un programa arbitrario que se ejecuta antes o después de implementar con Cloud Deploy.

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

  1. Crea un clúster de GKE o un servicio de Cloud Run.

    También puedes usar clústeres de GKE adjuntos, pero en esta guía de inicio rápido solo se usan GKE y Cloud Run.

  2. Crea una configuración de Skaffold y un manifiesto de Kubernetes o una definición de servicio de Cloud Run.

    En el archivo de configuración de Skaffold se configuran los hooks de implementación que se van a ejecutar. Identifica un contenedor que se va a ejecutar antes de la implementación y otro que se va a ejecutar después.

  3. Define tu flujo de procesamiento de entrega y tu destino de implementación de Cloud Deploy.

    En la configuración del flujo de procesamiento de entrega, harás referencia a los ganchos de implementación que se definieron en skaffold.yaml para ejecutar esos ganchos.

    Esta canalización solo incluye una fase y usa un solo destino.

  4. Crea una versión, que se implementa automáticamente en el destino.

    Uno de los ganchos se ejecuta antes de que se implemente la aplicación y el otro, después.

  5. Consulta los resultados de los hooks previos y posteriores al despliegue en los registros de Cloud Build, en la página Detalles del lanzamiento de Cloud Deploy en laGoogle Cloud consola.

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.

    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. 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.

    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. 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, asegúrate de que estás usando 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.
      • En GKE:

        gcloud projects add-iam-policy-binding PROJECT_ID \
            --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
            --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
            --role="roles/container.developer"
        

      • En Cloud Run:

        gcloud projects add-iam-policy-binding PROJECT_ID \
            --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
            --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
            --role="roles/run.developer"
        

    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
      

    Crear el entorno de ejecución

    Si vas a desplegar en Cloud Run, puedes omitir este comando.

    En GKE, crea un clúster: deploy-hooks-cluster, con la configuración predeterminada. El endpoint de la API de Kubernetes del clúster debe ser accesible desde la red pública de Internet. Los clústeres de GKE son accesibles externamente de forma predeterminada.

    gcloud container clusters create-auto deploy-hooks-cluster \
                     --project=PROJECT_ID \
                     --region=us-central1
    

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

    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 identifica el manifiesto que se usará para desplegar la aplicación de ejemplo, así como los contenedores que se ejecutarán antes y después del despliegue (los hooks de despliegue).

    1. Abre una ventana de terminal.

    2. Crea un directorio y accede a él.

      GKE

      mkdir deploy-hooks-gke-quickstart
      cd deploy-hooks-gke-quickstart
      

      Cloud Run

      mkdir deploy-hooks-run-quickstart
      cd deploy-hooks-run-quickstart
      
    3. Crea un archivo llamado skaffold.yaml con el siguiente contenido:

      GKE

      apiVersion: skaffold/v4beta7
      kind: Config
      manifests:
        rawYaml:
        - k8s-pod.yaml
      deploy:
        kubectl: {}
      customActions:
      - name: predeploy-action
        containers:
        - name: predeploy-echo