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:
-
Enable the Cloud Build, Cloud Run, and Artifact Registry APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. - Para ejecutar los comandos
gcloudde esta página, instala Google Cloud CLI. - Ten listo tu proyecto de Go.
- Tener un repositorio de Go en Artifact Registry. Si no tienes uno, crea un repositorio.
- Si quieres almacenar los registros de pruebas en Cloud Storage, crea un segmento en Cloud Storage.
- Asegúrate de que conoces el ID de la cuenta de servicio de entorno de ejecución de Cloud Run.
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:
-
En la Google Cloud consola, ve a la página Permisos de settings Cloud Build:
Ve al menú Cuenta de servicio y selecciona tu cuenta de servicio
cloud-build-go.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.- En el panel Asignar rol Usuario de cuenta de servicio, selecciona tu cuenta de servicio de tiempo de ejecución y, a continuación, haz clic en Otorgar permiso. Esta configuración permite que tu cuenta de servicio de Cloud Build personalizada suplante a la cuenta de servicio de tiempo de ejecución al interactuar con el servicio gestionado de Cloud Run. Para obtener más información, consulta el artículo sobre cómo configurar la suplantación de identidad de la cuenta de servicio de Cloud Build en servicios gestionados.
- 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.
- Administrador de Cloud Run (
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:
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 valorgolanga este campo para usar la imagen de Go de Docker Hub en tu tarea.entrypoint: asigna el valor/bin/basha este campo. De esta forma, puedes ejecutar comandos bash de varias líneas directamente desde el paso de compilación.args: el campoargsde un paso de compilación toma una lista de argumentos y los transfiere a la imagen a la que hace referencia el camponame. En el siguiente ejemplo, el campoargstoma 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.logen 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
Subir a Artifact Registry: en el archivo de configuración, usa el campo
goModulespara 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.moden 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.
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: VERIFIEDa la secciónoptionsde 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.
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.xmlEn 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'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
- Consulta cómo realizar implementaciones azul-verde en Compute Engine.
- Consulta cómo solucionar errores de compilación.