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 de 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:
-
Activez les API Cloud Build, Cloud Run et Artifact Registry, si ce n'est pas déjà fait.
Rôles requis pour activer les API
Pour activer les API, vous devez disposer de l'autorisation
serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation grâce au rôle Propriétaire (roles/owner). Sinon, vous pouvez obtenir cette autorisation grâce au rôle Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin). Découvrez comment attribuer des rôles. - Pour exécuter les commandes
gcloudsur cette page, installez Google Cloud CLI. - Préparez votre projet Go.
- Disposer d'un dépôt Go dans Artifact Registry. Si vous n'en avez pas, créez-en un.
- Si vous souhaitez stocker les journaux de test dans Cloud Storage ou utiliser la gcloud CLI pour démarrer la compilation, créez un bucket dans Cloud Storage.
- Assurez-vous de connaître l'ID du compte de service d'exécution pour Cloud Run.
Créer un compte de service Cloud Build personnalisé
Créez un compte de service Cloud Build personnalisé en exécutant la commande suivante dans 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"
Remplacez PROJECT_ID par l'ID du projet Google Cloud . Si l'option est omise, le projet actuel est utilisé.
Vous utiliserez ce compte de service pour compiler et tester votre application Go.
Configurer les autorisations IAM
Pour configurer votre nouveau compte de service avec les autorisations requises pour compiler et déployer des applications Go, procédez comme suit :
-
Dans la console Google Cloud , accédez à la page Autorisations settings Cloud Build :
Accédez au menu Compte de service et sélectionnez votre compte de service
cloud-build-go.Définissez l'état des rôles suivants sur Activé :
- Administrateur Cloud Run (
roles/run.admin) : permet à Cloud Build de déployer de nouveaux services sur Cloud Run.- Dans le panneau "Attribuer le rôle Utilisateur du compte de service", sélectionnez votre compte de service d'exécution, puis cliquez sur Accorder l'autorisation. Cette configuration permet à votre compte de service Cloud Build personnalisé d'emprunter l'identité du compte de service d'exécution lorsqu'il interagit avec le service géré Cloud Run. Pour en savoir plus, consultez Configurer l'emprunt d'identité d'un compte de service Cloud Build pour les services gérés.
- Administrateur de l'espace de stockage (
roles/storage.admin) : permet de lire et d'écrire dans Cloud Storage. - Rédacteur Artifact Registry (
roles/artifactregistry.writer) : permet d'extraire des images d'Artifact Registry et d'y écrire des données. - Rédacteur de journaux (
roles/logging.logWriter) : permet d'écrire des entrées de journal dans Cloud Logging. - Éditeur Cloud Build (
roles/cloudbuild.builds.editor) : permet à votre compte de service d'exécuter des builds.
- Administrateur Cloud Run (
Configurer des compilations Go
L'image publique golang de Docker Hub permet de créer des modules Go.
L'utilisation de cette image comme étape de compilation dans votre fichier de configuration Cloud Build vous permet d'appeler des commandes go dans 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 surgolangpour 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 champargsd'une étape de compilation prend une liste d'arguments et la transmet à l'image à laquelle le champnamefait référence. Dans l'exemple suivant, le champargsutilise 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.logdans 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
goModulespour 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 projet Google Cloud contenant votre dépôt Artifact Registry.
- sourcePath : chemin d'accès au fichier
go.moddans l'espace de travail de compilation. - appPath : chemin d'accès à votre application packagée.
- version : numéro de version de votre application, au format numérique et avec des points (par exemple,
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 sécuriser votre pipeline d'intégration continue.
Pour activer la génération de la provenance, ajoutez
requestedVerifyOption: VERIFIEDà la sectionoptionsde votre fichier de configuration.Une fois votre 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 les journaux de test dans Cloud Storage en spécifiant l'emplacement d'un bucket existant et le chemin d'accès aux 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.xmlL'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' repositoryProjectId: '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 :
gcloud
Exécutez la commande suivante en utilisant
--substitutionspour spécifier les variables de substitution utilisées danscloudbuild.yaml:gcloud builds submit --region=us-west2 --config=cloudbuild.yaml \ --default-buckets-behavior=REGIONAL_USER_OWNED_BUCKET \ --service-account=projects/PROJECT_ID/serviceAccounts/cloud-build-go@PROJECT_ID.iam.gserviceaccount.com \ --substitutions=_AR_REPO_NAME="_AR_REPO_NAME",_BUCKET_NAME="_BUCKET_NAME",SHORT_SHA="SHORT_SHA"Remplacez les éléments suivants :
_AR_REPO_NAME: nom de votre dépôt Artifact Registry._BUCKET_NAME: nom de votre bucket Cloud Storage pour les journaux de test.SHORT_SHA: une courte chaîne de texte générique, telle que "manuel". Les valeursSHORT_SHAsont renseignées automatiquement pour les compilations appelées par des déclencheurs, mais ne sont pas fournies lors de l'envoi d'une compilation à l'aide de gcloud CLI.
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 celui de votre bucket Cloud Storage pour les journaux de test.
Étapes suivantes
- Découvrez comment effectuer des déploiements bleu-vert sur Compute Engine.
- Découvrez comment résoudre les erreurs de compilation.