Compilar y probar aplicaciones de Go

En esta página se explica cómo usar Cloud Build para compilar y probar tus aplicaciones Go, subir tus artefactos a Artifact Registry, generar información de procedencia y guardar tus registros de pruebas en Cloud Storage.

Antes de empezar

En las instrucciones de esta página se presupone que tienes conocimientos de Go. Además:

Crear una cuenta de servicio de Cloud Build personalizada

Para crear una cuenta de servicio de Cloud Build personalizada, ejecuta el siguiente comando en la CLI de Google Cloud:

  gcloud iam service-accounts create cloud-build-go \
  --description="Build and test Go applications" \
  --display-name="Cloud Build Go" \
  --project="PROJECT_NAME"

Usarás esta cuenta de servicio para compilar y probar tu aplicación Go.

Configurar permisos de gestión de identidades y accesos

Para configurar tu nueva cuenta de servicio con los permisos necesarios para crear e implementar aplicaciones Go, haz lo siguiente:

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

    Ve a Permisos.

  2. Ve al menú Cuenta de servicio y selecciona tu cuenta de servicio cloud-build-go.

  3. Asigna el estado Habilitado a los siguientes roles:

    • Administrador de Cloud Run (roles/run.admin): permite a Cloud Build desplegar nuevos servicios en Cloud Run.
    • Administrador de almacenamiento (roles/storage.admin): permite leer y escribir en Cloud Storage.
    • Escritor de Artifact Registry (roles/artifactregistry.writer): permite extraer imágenes de Artifact Registry y escribir en él.
    • Escritor de registros (roles/logging.logWriter): permite escribir entradas de registro en Cloud Logging.
    • Editor de Cloud Build (roles/cloudbuild.builds.editor): permite que tu cuenta de servicio ejecute compilaciones.

Configurar compilaciones de Go

La imagen pública golangde Docker Hub admite la compilación con módulos Go. Si usas esta imagen como paso de compilación en tu archivo de configuración de Cloud Build, podrás invocar comandos de go en la imagen. Los argumentos transferidos a este paso de compilación se transfieren directamente a la herramienta golang, lo que te permite ejecutar cualquier comando go en esta imagen.

En esta sección se muestra cómo crear un archivo de configuración de compilación de ejemplo para una aplicación Go desde el repositorio de Git cloud-build-samples. El archivo de configuración de compilación incluye los pasos para compilar la aplicación, añadir pruebas unitarias y, una vez que se hayan superado las pruebas, implementar la aplicación.

Para compilar la aplicación de Go de ejemplo, haz lo siguiente:

  1. Configurar pruebas unitarias: si has definido pruebas unitarias en tu aplicación, puedes configurar Cloud Build para que las ejecute añadiendo los siguientes campos en un paso de compilación:

    • name: asigna el valor golang a este campo para usar la imagen de Go de Docker Hub en tu tarea.
    • entrypoint: asigna el valor /bin/bash a este campo. De esta forma, puedes ejecutar comandos bash de varias líneas directamente desde el paso de compilación.
    • args: el campo args de un paso de compilación toma una lista de argumentos y los transfiere a la imagen a la que hace referencia el campo name. En el siguiente ejemplo, el campo args toma los argumentos de:

      • Ejecutar el formateador de registros de pruebas para descargar el resultado del registro de pruebas.
      • Imprimir la salida del registro.
      • Guardando los resultados de la prueba en sponge.log.
      • Generar los resultados en sponge.log en un archivo XML de JUNIT. El nombre del archivo XML de JUNIT se crea con la versión corta del ID de la confirmación asociada a tu compilación. En un paso de compilación posterior, los registros de este archivo se guardarán en Cloud Storage.

        steps:
          # Run tests and save to file
          - name: golang:1.23
            entrypoint: /bin/bash
            args:
              - -c
              - |
                go install github.com/jstemmer/go-junit-report/v2@latest
                2>&1 go test -timeout 1m -v ./... | /go/bin/go-junit-report -set-exit-code -iocopy -out ${SHORT_SHA}_test_log.xml
        
  2. Subir a Artifact Registry: en el archivo de configuración, usa el campo goModules para especificar la ruta de tu aplicación y tu repositorio de Go en Artifact Registry:

    # Upload Go module to artifact registry
    artifacts:
      goModules:
        - repositoryName: 'repositoryName'
          repositoryLocation: 'location'
          repositoryProjectId: 'projectId'
          sourcePath: 'sourcePath'
          modulePath: 'appPath'
          moduleVersion: 'version'
    

    Sustituye los siguientes valores:

    • repositoryName: el nombre de tu repositorio de Go en Artifact Registry.
    • location: la ubicación de tu repositorio en Artifact Registry.
    • projectId: el ID del Google Cloud proyecto que contiene tu repositorio de Artifact Registry.
    • sourcePath: la ruta al archivo go.mod en el espacio de trabajo de la compilación.
    • appPath: la ruta a tu aplicación empaquetada.
    • version: el número de versión de tu aplicación, con el formato de números y puntos, como v1.0.1.
  3. Opcional: Habilitar la generación de procedencia

    Cloud Build puede generar metadatos de procedencia de compilación verificables de niveles de la cadena de suministro para artefactos de software (SLSA) para proteger tu flujo de integración continua.

    Para habilitar la generación de procedencia, añade requestedVerifyOption: VERIFIED a la sección options de tu archivo de configuración.

    Una vez que se haya completado la compilación, puedes ver los detalles del repositorio en Artifact Registry.

    También puedes ver los metadatos de procedencia de la compilación y validar la procedencia.

  4. Guardar registros de pruebas en Cloud Storage: puedes configurar Cloud Build para que almacene los registros de pruebas en Cloud Storage. Para ello, especifica la ubicación de un segmento y la ruta a los registros de pruebas.

    El siguiente paso de compilación almacena los registros de prueba que has guardado en el archivo XML de JUNIT en un segmento de Cloud Storage:

    # Save test logs to Google Cloud Storage
    artifacts:
      objects:
        location: gs://$_BUCKET_NAME/
        paths:
          - ${SHORT_SHA}_test_log.xml
    

    En el siguiente fragmento se muestra el archivo de configuración de compilación completo de los pasos anteriores:

      steps:
        # Run tests and save to file
        - name: golang:1.23
          entrypoint: /bin/bash
          args:
            - -c
            - |
              go install github.com/jstemmer/go-junit-report/v2@latest
              2>&1 go test -timeout 1m -v ./... | /go/bin/go-junit-report -set-exit-code -iocopy -out ${SHORT_SHA}_test_log.xml
    
      # Store golang modules in Google Artifact Registry
      artifacts:
        goModules:
          - repositoryName: 'repositoryName'
            repositoryLocation: 'location'
            repositoryProjectId: 'projectId'
            sourcePath: 'sourcePath'
            modulePath: 'appPath'
            moduleVersion: 'version'
    
  5. Inicia la compilación con la CLI de gcloud o crea un activador de compilación:

Google Cloud CLI

 gcloud builds submit --region=us-west2 --config=cloudbuild.yaml \
     --substitutions=_AR_REPO_NAME="AR_REPO_NAME"

Activadores de compilación

Sigue los pasos que se indican en Crear un activador de compilación. En el campo Variables de sustitución, también debe proporcionar el nombre de su repositorio de Artifact Registry y el nombre de su segmento de Cloud Storage para los registros de pruebas.

Siguientes pasos