Integra la puerta de enlace de Connect a Cloud Build

Este es un instructivo básico a fin de integrar Cloud Build con la puerta de enlace de Connect, lo que te permite crear una canalización de CI/CD para clústeres de GKE que se ejecutan en muchos entornos diferentes.

En este instructivo, suponemos que estás familiarizado con las secciones anteriores en la guía de puerta de enlace de Connect y que estás familiarizado con Cloud Build. En estas instrucciones, se aprovecha la imagen de compilador de cloud-sdk que requieren algunas secuencias de comandos (como verás a continuación).

Antes de comenzar

  • Asegúrate de tener instaladas las siguientes herramientas de línea de comandos:

    • La versión más reciente de Google Cloud CLI, que incluye gcloud, la herramienta de línea de comandos para interactuar con Google Cloud.
    • kubectl

    Si usas Cloud Shell como entorno de shell para interactuar con Google Cloud, estas herramientas están instaladas.

  • Asegúrate de haber inicializado la CLI de gcloud para usarla en tu proyecto.

  • Asegúrate de que la puerta de enlace de Connect y otras API necesarias estén habilitadas para tu proyecto, como se describe en la guía de configuración.

1. Otorga funciones de IAM a la cuenta de servicio de Cloud Build

De forma predeterminada, Cloud Build usa una cuenta de servicio de Google Cloud para ejecutar todo el trabajo requerido, con una dirección en el formato MY_PROJECT_NUMBER @cloudbuild.gserviceaccount.com. Puedes encontrar esta dirección de correo electrónico de la cuenta de servicio en el proyecto en Cloud Build: Configuración en la consola de Google Cloud.

Captura de pantalla de la página de configuración de Cloud Build

Sigue las instrucciones de Otorga permisos de IAM en la guía de configuración de la puerta de enlace para otorgar a esta cuenta las funciones necesarias de tu proyecto.

2. Especifica políticas de RBAC para la cuenta de servicio de Cloud Build

Sigue las instrucciones en Configura políticas de RBAC en la guía de configuración de la puerta de enlace para otorgarle a la cuenta de servicio de Cloud Build los permisos adecuados en todos los clústeres que deseas usar.

Recomendamos usar Policy Controller para implementar y mantener las políticas de RBAC en varios clústeres.

3. Crea una canalización de Cloud Build

El flujo de trabajo de Cloud Build necesita un archivo cloudbuild.yaml para configurar la canalización. El siguiente es un ejemplo simple que implementa un manifiesto estático en dos clústeres diferentes (un clúster de GKE en Google Cloud y otro en VMware). Si deseas obtener más información para configurar una canalización de Cloud Build, consulta la documentación de Cloud Build.

steps:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
  entrypoint: bash
  id: Deploy to cluster on Google Cloud
  args:
  - '-c'
  - |
    set -x && \
    export KUBECONFIG="$(pwd)/gateway-kubeconfig" && \
    gcloud container fleet memberships get-credentials my-gke-cluster && \
    kubectl --kubeconfig gateway-kubeconfig apply -f myapp.yaml
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
  entrypoint: bash
  id: Deploy to cluster on VMware
  args:
  - '-c'
  - |
    set -x && \
    export KUBECONFIG="$(pwd)/gateway-kubeconfig" && \
    gcloud container fleet memberships get-credentials my-vmware-cluster && \
    kubectl --kubeconfig gateway-kubeconfig apply -f myapp.yaml

Puedes configurar el flujo de trabajo que desees en myapp.yaml para configurar los clústeres. A continuación, se muestra un ejemplo:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

Una vez que envías la configuración al repositorio de Git, el flujo de trabajo de Cloud Build implementa la aplicación necesaria en los clústeres especificados. También puedes configurar Cloud Build para detectar cambios en el repositorio de Git vinculado a fin de activar la instalación o actualización automática de las aplicaciones.

Uso avanzado

Dado que usas conceptos estándar de Cloud Build, puedes adaptar y personalizar nuestro ejemplo para adaptarla a tus necesidades específicas de CI/CD En particular, si deseas compilar una imagen desde cero e implementarla en tu canalización, puedes usar el modo de preparación del compilador gke-deploy. Por ejemplo, la siguiente configuración de Cloud Build:

  1. Compila una imagen de Docker del Dockerfile en la raíz del repositorio de Git y la etiqueta con el SHA de Git.
  2. Envía la imagen etiquetada al Container Registry del proyecto.
  3. Prepara los manifiestos de Kubernetes en el directorio manifest mediante la configuración de las etiquetas de imagen correctas y la colocación de los manifiestos de salida en output/expanded.
  4. Se implementa en un clúster de GKE de forma local con la puerta de enlace de Connect.
steps:
- name: 'gcr.io/cloud-builders/docker'
  id: "Build Container"
  args: ['build', '--tag=gcr.io/$PROJECT_ID/demo-app:$SHORT_SHA', '.']
- name: 'gcr.io/cloud-builders/docker'
  id: "Push to GCR"
  args: ['push', 'gcr.io/$PROJECT_ID/demo-app:$SHORT_SHA']
- name: "gcr.io/cloud-builders/gke-deploy"
  id: "Prepare Manifests"
  args:
  - prepare
  - --filename=manifests/
  - --image=gcr.io/$PROJECT_ID/demo-app:$SHORT_SHA
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
  entrypoint: bash
  id: "Deploy to cluster on VMware
  args:
  - '-c'
  - |
    set -x && \
    export KUBECONFIG="$(pwd)/gateway-kubeconfig" && \
    gcloud container fleet memberships get-credentials my-vmware-cluster && \
    kubectl --kubeconfig=gateway-kubeconfig apply -f output/expanded

Ten en cuenta que, en este ejemplo, tuvimos que crear un secreto de extracción de imagen para autorizar al clúster de GKE local a fin de extraer imágenes de Container Registry.

Para obtener más ideas de uso de Cloud Build, consulta la documentación de Cloud Build.