Cette page explique comment utiliser Cloud Build pour compiler et tester vos applications Go, importer vos artefacts dans Artifact Registry, générer des informations sur la provenance et enregistrer vos journaux de test dans Cloud Storage.
Avant de commencer
Les instructions de cette page partent du principe que vous connaissez bien Go. Notez en outre les points suivants:
-
Enable the Cloud Build, Cloud Run, and Artifact Registry APIs.
- Pour exécuter les commandes
gcloud
sur cette page, installez Google Cloud CLI. - Gardez à portée de main votre projet Go.
- disposer d'un dépôt Go dans Artifact Registry ; Si vous n'en avez pas, créez un dépôt.
- Si vous souhaitez stocker les journaux de test dans Cloud Storage, créez un bucket dans Cloud Storage.
Configurer le compte de service
Les exemples de ce document utilisent un compte de service spécifié par l'utilisateur. Pour créer le compte de service utilisé par Cloud Build, exécutez la commande suivante dans la 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"
Le compte de service Compute par défaut (utilisé par Cloud Run) doit être autorisé à agir en tant que nouveau compte de service. Commencez par déterminer le nom du compte de service Compute dans votre projet:
gcloud iam service-accounts list --filter="email:-compute@developer.gserviceaccount.com"
Ensuite, attribuez le rôle Utilisateur du compte de service (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"
Remplacez COMPUTE_SERVICE_ACCOUNT_EMAIL
par l'adresse e-mail du compte de service de calcul par défaut imprimée par la commande précédente.
Configurer les autorisations IAM
Assurez-vous de disposer des autorisations nécessaires:
Pour obtenir les autorisations nécessaires pour effectuer des builds dans Cloud Build, demandez à votre administrateur de vous accorder le rôle IAM Compte de service Cloud Build (roles/cloudbuild.builds.builder
) sur votre compte de service de compilation.
Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.
Pour obtenir les autorisations nécessaires pour stocker des artefacts compilés dans Artifact Registry, demandez à votre administrateur de vous accorder le rôle IAM Rédacteur Artifact Registry (roles/artifactregistry.writer
) sur votre compte de service de compilation.
Pour obtenir les autorisations nécessaires pour stocker des journaux de test dans Logging, demandez à votre administrateur de vous accorder le rôle IAM Créateur d'objets de stockage (roles/storage.objectCreator
) sur votre compte de service de compilation.
Pour obtenir les autorisations nécessaires pour déployer l'application sur Cloud Run, demandez à votre administrateur de vous accorder le rôle IAM Développeur Cloud Run (roles/run.developer
) sur votre compte de service de compilation.
Configurer des compilations Go
L'image golang
publique de Docker Hub est compatible avec la compilation utilisant des modules Go.
Utiliser cette image comme étape de compilation dans votre fichier de configuration Cloud Build vous permet d'appeler des commandes go
au sein de l'image. Les arguments transmis à cette étape de compilation sont directement transmis à l'outil golang
, ce qui vous permet d'exécuter n'importe quelle commande go
dans cette image.
Cette section explique comment créer un exemple de fichier de configuration de compilation pour une application Go à partir du dépôt Git cloud-build-samples. Le fichier de configuration de compilation comporte des étapes pour compiler l'application, ajouter des tests unitaires et, une fois les tests réussis, déployer l'application.
Pour compiler l'exemple d'application Go:
Configurer des tests unitaires: si vous avez défini des tests unitaires dans votre application, vous pouvez configurer Cloud Build pour qu'il exécute les tests en ajoutant les champs suivants dans une étape de compilation:
name
: définissez la valeur de ce champ surgolang
pour utiliser l'image golang de Docker Hub pour votre tâche.entrypoint
: définissez la valeur de ce champ sur/bin/bash
. Cela vous permet d'exécuter des commandes bash multilignes directement à partir de l'étape de compilation.args
: Le champargs
d'une étape de compilation prend une liste d'arguments et la transmet à l'image à laquelle le champname
fait référence. Dans l'exemple suivant, le champargs
utilise les arguments pour:- Exécuter l'outil de mise en forme du journal de test pour télécharger la sortie du journal de test
- Affichage de la sortie du journal.
- Enregistrement des résultats du test dans
sponge.log
. Génération des résultats dans
sponge.log
dans un fichier XML JUnit Le nom du fichier XML JUnit est construit à l'aide de la version courte de l'ID de commit associé à votre compilation. Une étape de compilation ultérieure enregistrera les journaux de ce fichier dans 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
Importer dans Artifact Registry: dans votre fichier de configuration, utilisez le champ
goModules
pour spécifier le chemin d'accès à votre application et votre dépôt Go dans Artifact Registry:# Upload Go module to artifact registry artifacts: goModules: repositoryName: 'repositoryName' repositoryLocation: 'location' repositoryProjectId: 'projectId' sourcePath: 'sourcePath' modulePath: 'appPath' moduleVersion: 'version'
Remplacez les valeurs suivantes :
- repositoryName: nom de votre dépôt Go dans Artifact Registry.
- location: emplacement de votre dépôt dans Artifact Registry.
- projectId: ID du Google Cloud projet contenant votre dépôt Artifact Registry.
- sourcePath: chemin d'accès au fichier
go.mod
dans l'espace de travail de la compilation. - appPath: chemin d'accès à votre application empaquetée.
- version: numéro de version de votre application, mis en forme avec des chiffres et des points, comme
v1.0.1
.
Facultatif: Activer la génération de provenance
Cloud Build peut générer des métadonnées de provenance de compilation SLSA (Supply chain Levels for Software Artifacts) vérifiables pour vous aider à sécuriser votre pipeline d'intégration continue.
Pour activer la génération de provenance, ajoutez
requestedVerifyOption: VERIFIED
à la sectionoptions
de votre fichier de configuration.Une fois la compilation terminée, vous pouvez afficher les détails du dépôt dans Artifact Registry.
Vous pouvez également afficher les métadonnées de provenance du build et valider la provenance.
Enregistrer les journaux de test dans Cloud Storage: vous pouvez configurer Cloud Build pour stocker tous les journaux de test dans Cloud Storage en spécifiant un emplacement de bucket et un chemin d'accès existants vers les journaux de test.
L'étape de compilation suivante stocke les journaux de test que vous avez enregistrés dans le fichier XML JUnit dans un bucket Cloud Storage:
# Save test logs to Google Cloud Storage artifacts: objects: location: gs://$_BUCKET_NAME/ paths: - ${SHORT_SHA}_test_log.xml
L'extrait de code suivant montre le fichier de configuration de compilation complet pour les étapes précédentes:
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'
Démarrez la compilation à l'aide de la gcloud CLI ou créez un déclencheur de compilation:
Google Cloud CLI
gcloud builds submit --region=us-west2 --config=cloudbuild.yaml \
--substitutions=_AR_REPO_NAME="AR_REPO_NAME"
Déclencheurs de compilation
Suivez la procédure décrite dans Créer un déclencheur de compilation. Dans le champ Variables de substitution, vous devez également indiquer le nom de votre dépôt Artifact Registry et le nom de votre bucket Cloud Storage pour les journaux de test.
Étape suivante
- Découvrez comment effectuer des déploiements bleu-vert sur Compute Engine.
- Découvrez comment résoudre les erreurs de compilation.