Implementa 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, también, implementar un flujo de trabajo desde un repositorio de Git. Puedes configurar el activador para implementar tu flujo de trabajo en cualquier cambio en el repositorio de código fuente o implementar el de Terraform solo cuando el cambio coincide con criterios específicos.

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

Antes de comenzar

En estas instrucciones, se supone que tienes el rol de editor de Cloud Build (roles/cloudbuild.builds.editor) en tu proyecto de Google Cloud para que puedas crear activadores. También necesitas un flujo de trabajo en un repositorio de código fuente, como GitHub o Bitbucket.

Console

  1. Habilita las APIs de Cloud Build y Workflows.

    Habilita las API

  2. Otorga el rol de administrador de flujos de trabajo (roles/workflows.admin) a la cuenta de servicio de Cloud Build de la siguiente manera:

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

      Ir a IAM

    2. Elige tu 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 Agregar otro rol.

    5. En la lista Rol, selecciona Administrador de flujos de trabajo. en el área de la seguridad en la nube.

    6. Haz clic en Guardar.

  3. Otorga el rol de 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 tengas habilitaste la API de Compute Engine la cuenta de servicio predeterminada de Compute Engine PROJECT_NUMBER-compute@developer.gserviceaccount.com

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

      Ir a Cuentas de servicio

    2. Elige tu proyecto.

    3. Haz clic en la dirección de correo electrónico 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 otorgamiento . de acceso directo.

    6. Para agregar un principal nuevo, ingresa la dirección de correo electrónico de tu cuenta de servicio (SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com).

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

    8. Haz clic en Guardar.

gcloud

  1. Habilita las APIs de Cloud Build y Workflows.

    gcloud services enable cloudbuild.googleapis.com \
      workflows.googleapis.com
    
  2. Otorga el rol de administrador de flujos de trabajo (roles/workflows.admin) a la cuenta de servicio de Cloud Build de la siguiente manera:

    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
    

    Reemplaza PROJECT_ID por el ID del proyecto de Google Cloud.

  3. Otorga el rol Usuario de cuenta de servicio (roles/iam.serviceAccountUser) en el servicio predeterminado de Compute Engine a la cuenta de servicio de Cloud Build. Cuando tengas habilitaste la API de Compute Engine la cuenta de servicio predeterminada de Compute Engine 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 código fuente

Debes conectar Cloud Build a tu repositorio de código fuente para que Cloud Build puede automatizar las compilaciones en respuesta a eventos que ocurren en el repositorio.

Sigue estos pasos para conectarte a GitHub o Bitbucket:

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

    Ir a Activadores

  2. Si es necesario, selecciona tu proyecto y haz clic en Open.

  3. En la lista Región, selecciona la región en la que deseas crear. tu desencadenante.

  4. Haz clic en Conectar repositorio.

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

    Por ejemplo: GitHub (app de GitHub de Cloud Build)

  6. Haga clic en Continuar.

  7. Autentica el repositorio de código fuente con tu nombre de usuario y contraseña.

    Si accedes a GitHub, se te pedirá que autorices a la app de GitHub de Google Cloud Build para que acceda a tu cuenta de GitHub y puedas continuar.

  8. En la lista de repositorios disponibles, selecciona el repositorio deseado. y, luego, haz clic en OK.

    Para los repositorios externos como GitHub y Bitbucket, debes tener permisos de nivel de propietario para el proyecto de Google Cloud en el que en funcionamiento.

  9. Lee la renuncia de responsabilidad y selecciona la casilla de verificación junto a ella para indicar que consentimiento a las condiciones.

  10. Haz clic en Conectar.

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

Crea un archivo de configuración de Cloud Build

Un archivo de configuración de compilación define los campos que se necesitan cuando se usa un activador de compilación para iniciar una compilación. Crea el archivo de configuración en el directorio raíz del 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. luego, utiliza una secuencia de comandos para verificar el resultado. Si se pasa la prueba, el flujo de trabajo implementadas:

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 propaga las variables de sustitución $BRANCH_NAME y $SHORT_SHA cuando se activa una compilación desde un repositorio de Git. Representan el nombre de tu rama, y los primeros siete caracteres del ID de confirmación asociado con tu compilación, respectivamente.

La variable de sustitución $_WORKFLOW_NAME te permite volver a usar un archivo de configuración con diferentes valores de variables. Puedes especificar su valor cuando creas el activador de compilación.

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

Crea un activador de compilación

Puedes automatizar la implementación de tu flujo de trabajo si creas 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 consola de Google Cloud, ve a la página Activadores de Cloud Build:

    Ir a Activadores

  2. Haz clic en Crear activador.

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

  4. En Evento, selecciona el evento que invocará el activador.

    Por ejemplo: Enviar a una rama

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

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

  6. Expande la sección Mostrar filtros de archivos incluidos y omitidos y especifica tu flujo de trabajo como un archivo incluido para que, cuando se cambie, se invoque una compilación.

    Por ejemplo: gitops/workflow.yaml

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

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

    Por ejemplo: gitops/cloudbuild.yaml

  9. De manera opcional, para agregar una variable de sustitución, haz clic en Agregar variable y especificar una combinación de clave y valor.

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

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

Cuando se envíen cambios a un flujo de trabajo en la rama especificada del repositorio de Git, se activará automáticamente Cloud Build para implementar el flujo de trabajo.

Para obtener más información, consulta Crea y administra activadores de compilación.

Prueba 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 a 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 y comienza una compilación.

  3. Para confirmar el éxito de la compilación, en la consola de Google Cloud, dirígete a la página Historial de compilación

    Ir a Historial de compilaciones

    Cuando se completa una compilación, Cloud Build proporciona un estado general para la compilación y para cada paso individual. Para obtener más información, consulta Cómo ver los resultados de la compilación.

  4. Para confirmar que se implementó un flujo de trabajo de etapa de pruebas, en la consola de Google Cloud, ve a la página Flujos de trabajo:

    Ir a Workflows

    Deberías ver un flujo de trabajo llamado workflows-gitops-staging en la lista.

  5. Para implementar el flujo de trabajo de la etapa de pruebas en producción, combina la rama staging con el siguiente comando: 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, luego, combina los staging a la rama main.

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

    Ir a Workflows

    Deberías ver un flujo de trabajo llamado workflows-gitops-main en la lista.

¿Qué sigue?