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:
-
Enable the Cloud Build, Cloud Run, and Artifact Registry APIs.
- Para ejecutar los comandos de
gcloud
de esta página, instala Google Cloud CLI. - Ten a mano tu proyecto de Go.
- Tener un repositorio de Go en Artifact Registry Si no tienes uno, crea un repositorio nuevo.
- Si deseas almacenar registros de prueba en Cloud Storage, crea un bucket en Cloud Storage.
Configura la cuenta de servicio
En los ejemplos de este documento, se usa una cuenta de servicio especificada por el usuario. Para crear la cuenta de servicio que usa 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_ID"
La cuenta de servicio de procesamiento predeterminada (que usa Cloud Run) necesita permiso para actuar como la cuenta de servicio nueva. Primero, determina el nombre de la cuenta de servicio de procesamiento en tu proyecto:
gcloud iam service-accounts list --filter="email:-compute@developer.gserviceaccount.com"
A continuación, otorga el rol Usuario de cuenta de servicio (roles/iam.serviceAccountUser
):
gcloud iam service-accounts add-iam-policy-binding \
COMPUTE_SERVICE_ACCOUNT_EMAIL \
--member="serviceAccount:cloud-build-go@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/iam.serviceAccountUser"
Reemplaza COMPUTE_SERVICE_ACCOUNT_EMAIL
por la dirección de correo electrónico predeterminada de la cuenta de servicio de procesamiento que imprimió el comando anterior.
Configura los permisos de IAM
Asegúrate de tener los permisos que necesitas:
Para obtener los permisos que necesitas para realizar compilaciones en Cloud Build, pídele a tu administrador que te otorgue el rol de IAM de cuenta de servicio de Cloud Build (roles/cloudbuild.builds.builder
) en tu cuenta de servicio de compilación.
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.
Para obtener los permisos que necesitas para almacenar artefactos compilados en Artifact Registry, pídele a tu administrador que te otorgue el rol de IAM Escritor de Artifact Registry (roles/artifactregistry.writer
) en tu cuenta de servicio de compilación.
Para obtener los permisos que necesitas para almacenar registros de prueba en Logging, pídele a tu administrador que te otorgue el rol de IAM Creador de objetos de almacenamiento (roles/storage.objectCreator
) en tu cuenta de servicio de compilación.
Para obtener los permisos que necesitas para implementar la aplicación en Cloud Run,
pídele a tu administrador que te otorgue el rol de IAM de
desarrollador de Cloud Run (roles/run.developer
) en tu cuenta de servicio de compilación.
Configura compilaciones de Go
La imagen golang
pública 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 GitHub 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 que se aprueben las pruebas, implementar la app.
Para compilar la aplicación de ejemplo de Go, 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
: Establece el valor de este campo engolang
para usar la imagen de Golang de Docker Hub en tu tarea.entrypoint
: Establece el valor de este campo en/bin/bash
. Esto te permite ejecutar comandos de Bash de varias líneas directamente desde el paso de compilación.args
: En el campoargs
de 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 campoargs
toma los argumentos de 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
. Genera los resultados en
sponge.log
en un archivo XML JUNIT. El nombre del archivo en formato XML de 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
Subir a Artifact Registry: En tu archivo de configuración, usa el campo
goModules
para 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.mod
en 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 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 los 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: VERIFIED
a la secciónoptions
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 la procedencia de la compilación y validar la procedencia.
Guardar 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.xml
En 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' repositoryProject_id: '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 Crea un activador de compilación. En el campo Variables de sustitución, también debes proporcionar el nombre del repositorio de Artifact Registry y el nombre del 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.