En esta página, se explica cómo usar Cloud Build para compilar y probar tus aplicaciones de Go, subir tus artefactos a Artifact Registry, generar información de procedencia y guardar tus registros de prueba en Cloud Storage.
Antes de comenzar
En las instrucciones de esta página se supone que estás familiarizado con Go. Además, ten en cuenta la siguiente información:
-
Habilita las APIs de Cloud Build, Cloud Run y Artifact Registry.
Roles necesarios para habilitar las APIs
Para habilitar las APIs, necesitas el rol de IAM de administrador de Service Usage (
roles/serviceusage.serviceUsageAdmin), que contiene el permisoserviceusage.services.enable. Obtén más información para otorgar roles. - Para ejecutar los comandos de
gcloudde esta página, instala Google Cloud CLI. - Deja tu proyecto de Go listo.
- Ten un repositorio de Go en Artifact Registry. Si no tienes uno, crea uno nuevo.
- Si deseas almacenar registros de prueba en Cloud Storage, crea un bucket en Cloud Storage.
- Asegúrate de conocer el ID de la cuenta de servicio del entorno de ejecución para Cloud Run.
Crea una cuenta de servicio personalizada de Cloud Build
Para crear una cuenta de servicio personalizada de Cloud Build, ejecuta el siguiente comando en Google Cloud CLI:
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 de Go.
Configura los permisos de IAM
Para configurar tu nueva cuenta de servicio con los permisos necesarios para compilar e implementar aplicaciones de Go, haz lo siguiente:
-
En la Google Cloud consola, ve a la settings página Permisos de Cloud Build:
Ve al menú Cuenta de servicio y selecciona tu cuenta de servicio
cloud-build-go.Configura el estado de los siguientes roles como Habilitado:
- Administrador de Cloud Run (
roles/run.admin): Permite que Cloud Build implemente servicios nuevos en Cloud Run.- En el panel Asignar rol de usuario de cuenta de servicio, selecciona tu cuenta de servicio del entorno de ejecución y, luego, haz clic en Otorgar permiso. Esta configuración permite que tu cuenta de servicio personalizada de Cloud Build suplante la identidad de la cuenta de servicio del entorno de ejecución cuando interactúa con el servicio administrado de Cloud Run. Para obtener más información, consulta Configura la identidad temporal como cuenta de servicio de Cloud Build para los servicios administrados.
- Administrador de almacenamiento (
roles/storage.admin): Permite leer y escribir desde 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 que las entradas de registro se escriban en Cloud Logging. - Editor de Cloud Build (
roles/cloudbuild.builds.editor): Permite que tu cuenta de servicio ejecute compilaciones.
- Administrador de Cloud Run (
Configura compilaciones de Go
La imagen pública
golang de Docker Hub
es compatible con la compilación mediante módulos de Go.
Usar esta imagen como un paso de compilación en el archivo de configuración de Cloud Build te permite invocar comandos go dentro de la imagen. Los argumentos que se pasan a este paso de compilación
se pasan directamente a la herramienta de golang, lo que te permite ejecutar cualquier comando de 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 app de Go desde el repositorio de Git cloud-build-samples. El archivo de configuración de compilación tiene pasos para compilar la app, agregar pruebas de unidades y, después de pasar las pruebas, implementar la app.
Para compilar la aplicación de Go de ejemplo, sigue estos pasos:
Configura pruebas de unidades: Si definiste pruebas de unidades en tu aplicación, puedes configurar Cloud Build para que ejecute las pruebas. Para ello, agrega los siguientes campos en un paso de compilación:
name: Configura el valor de este campo comogolangpara usar la imagen de golang de Docker Hub en tu tarea.entrypoint: Configura el valor de este campo como/bin/bash. Esto te permite ejecutar comandos bash de varias líneas directamente desde el paso de compilación.args: En el campoargsde un paso de compilación, se toma una lista de argumentos y se los pasa a la imagen a la que se hace referencia en el camponame. En el siguiente ejemplo, el campoargstoma los argumentos para lo siguiente:- Ejecutar el generador de registros de prueba para descargar el resultado del registro de prueba.
- Imprimir el resultado del registro.
- Guardar resultados de pruebas en
sponge.log. Generar los resultados en
sponge.logen un archivo en formato XML JUNIT. El nombre del archivo XML JUNIT se construye con la versión corta del ID de confirmación asociado con tu compilación. Los pasos de compilación posteriores guardarán los registros de este archivo 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
Sube a Artifact Registry: En tu archivo de configuración, usa el campo
goModulespara especificar la ruta de acceso 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'Reemplaza los siguientes valores:
- repositoryName: Es el nombre de tu repositorio de Go en Artifact Registry.
- location: Es la ubicación de tu repositorio en Artifact Registry.
- projectId: Es el ID del Google Cloud proyecto que contiene tu repositorio de Artifact Registry.
- sourcePath: Es la ruta de acceso al archivo
go.moden el espacio de trabajo de la compilación. - appPath: Es la ruta de acceso a tu aplicación empaquetada.
- version: Es el número de versión de tu aplicación, con el formato de números y puntos como
v1.0.1.
Opcional: Habilita la generación de procedencia
Cloud Build puede generar metadatos de procedencia de compilación verificables de Niveles de cadena de suministro para artefactos de software (SLSA) para ayudar a proteger tu canalización de integración continua.
Para habilitar la generación de procedencia, agrega
requestedVerifyOption: VERIFIEDa laoptionssección en tu archivo de configuración.Una vez que se complete la compilación, podrás ver los detalles del repositorio en Artifact Registry.
También puedes ver los metadatos de procedencia de la compilación y validar la procedencia.
Guarda registros de prueba en Cloud Storage: Puedes configurar Cloud Build para almacenar cualquier registro de prueba en Cloud Storage si especificas una ubicación de bucket existente y una ruta de acceso a los registros de prueba.
En el siguiente paso de compilación, se almacenan los registros de prueba que guardaste en el archivo XML JUNIT en un bucket 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 para 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 gcloud CLI 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 en Crea un activador de compilación. En el campo Variables de sustitución, también debes proporcionar el nombre de tu repositorio de Artifact Registry y el nombre de tu bucket de Cloud Storage para los registros de prueba.
¿Qué sigue?
- Obtén información para realizar implementaciones azul-verde en Compute Engine.
- Obtén más información para solucionar errores de compilación.