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.
Rôles requis pour activer les API
Pour activer les API, vous avez besoin du rôle IAM Administrateur d'utilisation du service (
roles/serviceusage.serviceUsageAdmin), qui contient l'autorisationserviceusage.services.enable. Découvrez comment attribuer des rôles. - Pour exécuter les
gcloudcommandes sur cette page, installez Google Cloud CLI. - Préparez votre projet Go.
- Créez 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, 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_NAME"
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 Google Cloud console, accédez à la settings page Permissions (Autorisations) de Cloud Build :
Accédez au menu Service account (Compte de service) et sélectionnez votre compte de service
cloud-build-go.Définissez l'état des rôles suivants sur Enabled (Activé) :
- Administrateur Cloud Run (
roles/run.admin) : permet à Cloud Build de déployer de nouveaux services sur Cloud Run.- Dans le panneau "Assign Service Account User Role" (Attribuer un rôle d'utilisateur de compte de service), sélectionnez votre compte de service d'exécution, puis cliquez sur Grant Permission (Accorder une 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. - 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 compilations.
- Administrateur Cloud Run (
Configurer des compilations Go
L'image publique
golang 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 exécuter 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 : l'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.moddans l'espace de travail de la compilation - appPath : chemin d'accès à votre application empaquetée
- version : numéro de version de votre application, au format numérique et avec 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, ou Niveaux de la chaîne d'approvisionnement pour les artefacts logiciels) vérifiables pour sécuriser votre pipeline d'intégration continue.
Pour activer la génération de provenance, ajoutez
requestedVerifyOption: VERIFIEDà la sectionoptionsde 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 de la compilation 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.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 :
Google Cloud CLI
gcloud builds submit --region=us-west2 --config=cloudbuild.yaml \
--substitutions=_AR_REPO_NAME="AR_REPO_NAME"
Déclencheurs de compilation
Suivez les étapes de la section Créer un déclencheur de compilation. Dans le champ Substitution variables (Variables de substitution), vous devez également fournir 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.