Desplegar un flujo de trabajo desde un repositorio de Git con Cloud Build

Puedes usar un activador de Cloud Build para iniciar automáticamente una compilación y desplegar un flujo de trabajo desde un repositorio de Git. Puedes configurar el activador para que despliegue tu flujo de trabajo a partir de cualquier cambio en el repositorio de origen o solo cuando el cambio cumpla determinados criterios.

Este enfoque puede ayudarte a gestionar el ciclo de vida de tu implementación. Por ejemplo, puedes desplegar cambios en un flujo de trabajo en un entorno de staging, ejecutar pruebas en ese entorno y, a continuación, implementar estos cambios de forma incremental en el entorno de producción.

Antes de empezar

En estas instrucciones se da por hecho que tienes el rol Editor de Cloud Build (roles/cloudbuild.builds.editor) en tu proyecto Google Cloud para poder crear activadores. También necesitas un flujo de trabajo en un repositorio de origen, como GitHub o Bitbucket.

Consola

  1. Habilita las APIs Cloud Build y Workflows.

    Habilita las APIs

  2. Concede el rol Administrador de Workflows (roles/workflows.admin) a la cuenta de servicio de Cloud Build:

    1. En la consola, ve a la página IAM. Google Cloud

      Ir a IAM

    2. Selecciona el proyecto.

    3. En la fila de la cuenta de servicio de Cloud Build (PROJECT_NUMBER@cloudbuild.gserviceaccount.com), haz clic en Editar principal.

    4. Haz clic en Añadir otro rol.

    5. En la lista Rol, selecciona el rol Administrador de flujos de trabajo.

    6. Haz clic en Guardar.

  3. Asigna el rol Usuario de cuenta de servicio (roles/iam.serviceAccountUser) en la cuenta de servicio predeterminada de Compute Engine a la cuenta de servicio de Cloud Build. Cuando hayas habilitado la API Compute Engine, la cuenta de servicio predeterminada de Compute Engine estará PROJECT_NUMBER-compute@developer.gserviceaccount.com.

    .
    1. En la Google Cloud consola, ve a la página Cuentas de servicio.

      Ir a Cuentas de servicio

    2. Selecciona el proyecto.

    3. Haz clic en la dirección de correo de la cuenta de servicio predeterminada de Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com).

    4. Haz clic en la pestaña Permisos.

    5. Haz clic en el botón Conceder acceso.

    6. Para añadir un nuevo principal, introduce la dirección de correo de tu cuenta de servicio (SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com).

    7. En la lista Seleccionar un rol, selecciona el rol Cuentas de servicio > Usuario de cuenta de servicio.

    8. Haz clic en Guardar.

gcloud

  1. Habilita las APIs Cloud Build y Workflows.

    gcloud services enable cloudbuild.googleapis.com \
      workflows.googleapis.com
    
  2. Concede el rol Administrador de Workflows (roles/workflows.admin) a la cuenta de servicio de Cloud Build:

    PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format='value(projectNumber)')
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
      --role=roles/workflows.admin
    

    Sustituye PROJECT_ID por el ID de tu Google Cloud proyecto.

  3. Asigna el rol Usuario de cuenta de servicio (roles/iam.serviceAccountUser) en la cuenta de servicio predeterminada de Compute Engine a la cuenta de servicio de Cloud Build. Cuando hayas habilitado la API Compute Engine, la cuenta de servicio predeterminada de Compute Engine estará PROJECT_NUMBER-compute@developer.gserviceaccount.com.

    .
    gcloud iam service-accounts add-iam-policy-binding \
      $PROJECT_NUMBER-compute@developer.gserviceaccount.com \
      --member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
      --role=roles/iam.serviceAccountUser
    

Conéctate a tu repositorio de origen

Debes conectar Cloud Build a tu repositorio de origen para que Cloud Build pueda automatizar las compilaciones en respuesta a los eventos que se produzcan en el repositorio.

Sigue estos pasos para conectarte a GitHub o Bitbucket:

  1. En la Google Cloud consola, ve a la página Triggers (Activadores) de Cloud Build:

    Ir a Activadores

  2. Si es necesario, selecciona el proyecto y haz clic en Abrir.

  3. En la lista Región, selecciona la región en la que quieras crear el activador.

  4. Haz clic en Conectar repositorio.

  5. Selecciona el repositorio de origen en el que has almacenado el código fuente.

    Por ejemplo, GitHub (aplicación GitHub para Cloud Build)

  6. Haz clic en Continuar.

  7. Autentícate en tu repositorio de origen con tu nombre de usuario y tu contraseña.

    Si inicias sesión en GitHub, se te pedirá que autorices a la aplicación de GitHub para Google Cloud Build a acceder a tu cuenta de GitHub para continuar.

  8. En la lista de repositorios disponibles, selecciona el que quieras y haz clic en Aceptar.

    En el caso de los repositorios externos, como GitHub y Bitbucket, debes tener permisos de propietario en el Google Cloud proyecto en el que estés trabajando.

  9. Lee la renuncia de responsabilidad y marca la casilla situada junto a ella para indicar que aceptas los términos.

  10. Haz clic en Connect (Conectar).

  11. Para seguir creando un activador de compilación que automatice las compilaciones del código fuente del repositorio, haz clic en Crear un activador. De lo contrario, haz clic en Hecho.

Crear un archivo de configuración de Cloud Build

Un archivo de configuración de compilación define los campos necesarios al usar un activador de compilación para iniciar una compilación. Crea el archivo de configuración en el directorio raíz de tu proyecto y escríbelo con YAML o JSON.

Por ejemplo, el siguiente archivo de configuración implementa y ejecuta un flujo de trabajo de prueba y, a continuación, usa una secuencia de comandos para comprobar el resultado. Si la prueba se supera, el flujo de trabajo se implementa:

steps:
# Deploy the test workflow with the commit sha
- id: 'deploy-test-workflow'
  name: 'gcr.io/cloud-builders/gcloud'
  args: ['workflows', 'deploy', '$_WORKFLOW_NAME-$BRANCH_NAME-$SHORT_SHA', '--source', 'gitops/workflow.yaml']

# Run the test workflow and capture the output
- id: 'run-test-workflow'
  name: 'gcr.io/cloud-builders/gcloud'
  entrypoint: 'bash'
  args: ['-c', 'gcloud workflows run $_WORKFLOW_NAME-$BRANCH_NAME-$SHORT_SHA > /workspace/testoutput.log']

# Delete the test workflow
- id: 'delete-test-workflow'
  name: 'gcr.io/cloud-builders/gcloud'
  args: ['workflows', 'delete', '$_WORKFLOW_NAME-$BRANCH_NAME-$SHORT_SHA', '--quiet']

# Check the test output
- id: 'check-test-workflow'
  name: 'gcr.io/cloud-builders/gcloud'
  entrypoint: 'bash'
  args: ['gitops/test-$BRANCH_NAME.sh']

# Deploy the workflow
- id: 'deploy-workflow'
  name: 'gcr.io/cloud-builders/gcloud'
  args: ['workflows', 'deploy', '$_WORKFLOW_NAME-$BRANCH_NAME', '--source', 'gitops/workflow.yaml']

Cloud Build rellena las $BRANCH_NAME y $SHORT_SHA variables de sustitución cuando se activa una compilación desde un repositorio de Git. Representan el nombre de tu rama y los siete primeros caracteres del ID de la confirmación asociada a tu compilación, respectivamente.

La variable de sustitución $_WORKFLOW_NAME te permite reutilizar un archivo de configuración con diferentes valores de variable. Puedes especificar su valor al crear el activador de compilación.

Para obtener más información, consulta Crear un archivo de configuración de compilación.

Crear un activador de compilación

Puedes automatizar el despliegue de tu flujo de trabajo creando un activador de Cloud Build.

Para crear un activador de compilación para el archivo de configuración de la sección anterior, sigue estos pasos:

  1. En la Google Cloud consola, ve a la página Triggers (Activadores) de Cloud Build:

    Ir a Activadores

  2. Haz clic en Crear activador.

  3. En el campo Nombre, introduce un nombre para el activador.

  4. En Evento, seleccione el evento que activará el activador.

    Por ejemplo: Enviar a una rama

  5. En Fuente, selecciona tu repositorio y el nombre de la rama o etiqueta que activará el activador. Puedes usar una expresión regular para especificar una coincidencia con una rama o una etiqueta.

    Por ejemplo: GoogleCloudPlatform/workflows-demos (repositorio) y ^main$|^staging$ (coincide con las ramas main y staging)

  6. Despliega la sección Mostrar los filtros de archivos incluidos e ignorados y especifica tu flujo de trabajo como archivo incluido para que, cuando se modifique, se invoque una compilación.

    Por ejemplo: gitops/workflow.yaml

  7. En Configuración, selecciona Archivo de configuración de Cloud Build (YAML o JSON) como tipo y Repositorio como ubicación.

  8. En el campo Ubicación del archivo de configuración de Cloud Build, especifique la ubicación del archivo.

    Por ejemplo: gitops/cloudbuild.yaml

  9. Si quiere añadir una variable de sustitución, haga clic en Añadir variable y especifique una combinación de clave y valor.

    Por ejemplo: _WORKFLOW_NAME (variable) y workflows-gitops (valor)

  10. Para guardar el activador de compilación, haz clic en Crear.

Cuando se insertan cambios en un flujo de trabajo de la rama especificada del repositorio de Git, se activa automáticamente Cloud Build para desplegar el flujo de trabajo.

Para obtener más información, consulta Crear y gestionar activadores de compilación.

Probar el activador de compilación

Puedes probar el activador de compilación y el archivo de configuración de las secciones anteriores.

  1. En la rama staging del repositorio de Git, edita workflow.yaml y cambia Hello World por Bye World:

    main:
      steps:
        - init:
            assign:
              - message: "Hello World"
        - returnResult:
            return: ${message}
  2. Confirma y envía el cambio a la rama staging.

    git add workflow.yaml
    git commit -m "Update workflow.yaml in staging"
    git push
    

    El activador de Cloud Build se ejecuta e inicia una compilación.

  3. Para confirmar que la compilación se ha realizado correctamente, en la consola Google Cloud , vaya a la página Historial de compilaciones:

    Ir al historial de compilaciones

    Una vez que se completa una compilación, Cloud Build proporciona un estado general de la compilación y de cada paso de compilación. Para obtener más información, consulta Ver los resultados de la compilación.

  4. Para confirmar que se ha desplegado un flujo de trabajo de staging, en la consola de Google Cloud , ve a la página Flujos de trabajo:

    Ve a Workflows

    Debería aparecer un flujo de trabajo llamado workflows-gitops-staging.

  5. Para implementar el flujo de trabajo de la fase de pruebas en producción, combina la rama staging con la rama main:

    git checkout main
    git merge staging
    git push
    

    Ten en cuenta que, como test-main.sh espera Hello World en el resultado del flujo de trabajo, la compilación fallará:

    RESULT_EXPECTED="result: '\"Hello World\"'"
    RESULT_ACTUAL=$(grep "result: " $FILE)
    if [[ $RESULT_EXPECTED == $RESULT_ACTUAL ]]; then
      echo "Result test passed"
    else
      echo "Result test failed. Expected: $RESULT_EXPECTED Actual: $RESULT_ACTUAL"; exit 1;
    fi
  6. Para implementar correctamente un flujo de trabajo de producción, en la rama staging, vuelve a editar workflow.yaml y cambia la cadena a Hello World.

  7. Confirma y envía el cambio a la rama staging y, a continuación, combina la rama staging con la rama main.

  8. Para confirmar que se ha desplegado un flujo de trabajo de producción, en la consola de Google Cloud , ve a la página Flujos de trabajo:

    Ve a Workflows

    Debería aparecer un flujo de trabajo llamado workflows-gitops-main.

Siguientes pasos