Créer des applications Go

Cette page explique comment utiliser Cloud Build pour créer, tester et déployer des applications Go. Si vous débutez avec Cloud Build, commencez par lire les Guides de démarrage rapide et la Présentation de la configuration des compilations.

Avant de commencer

Dans les instructions de cette page, nous partons du principe que vous connaissez bien Go. En outre:

  • Activer les API Cloud Build, Cloud Run, and Artifact Registry.

    Activer les API

  • Pour exécuter les commandes gcloud sur cette page, installez le SDK Cloud.
  • Gardez votre projet Go à portée de main.
  • Si vous souhaitez conteneuriser votre application Go à l'aide de Cloud Build, vous aurez besoin d'un Dockerfile avec votre code source.
  • Si vous souhaitez stocker le conteneur créé dans Artifact Registry, créez un dépôt Docker dans Artifact Registry.
  • Si vous souhaitez stocker des journaux de test dans Cloud Storage, créez un bucket dans Cloud Storage.

Autorisations IAM requises

Pour obtenir des instructions sur l'attribution de ces rôles, consultez la section Attribuer un rôle à l'aide de la page IAM.

Configurer des compilations Go

L'image publique golang de Docker Hub permet de compiler à l'aide de modules Go. L'utilisation de cette image en tant qu'é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 décrit un exemple de fichier de configuration de compilation pour une application Go. Elle comporte des étapes de compilation permettant de créer l'application, d'ajouter des tests unitaires et, une fois les tests réussis, de procéder à la conteneurisation et au déploiement de l'application.

Pour compiler votre application Go :

  1. Dans le répertoire racine de votre projet, créez un fichier de configuration Cloud Build nommé cloudbuild.yaml.

  2. Compilation et test: 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 à une étape de compilation:

    • name: définissez la valeur de ce champ sur golang 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 champ args d'une étape de compilation prend une liste d'arguments et la transmet à l'image référencée par le champ name. Dans l'exemple suivant, le champ args utilise les arguments des éléments suivants:

      • Exécution de l'outil de mise en forme des journaux de test pour télécharger les résultats du journal de test
      • Impression de la sortie du journal
      • Enregistrement des résultats du test dans sponge.log...
      • Résultat des résultats dans sponge.log vers un fichier XML JUNIT. Le nom du fichier XML JUNIT est créé à 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
          entrypoint: /bin/bash
          args:
            - -c
            - |
              go get -u github.com/jstemmer/go-junit-report
              2>&1 go test -timeout 1m -v ./... | tee sponge.log
              /go/bin/go-junit-report -set-exit-code < sponge.log > ${SHORT_SHA}_test_log.xml
  3. Conteneuriser l'application: après avoir ajouté l'étape de compilation pour vous assurer que les tests sont réussis, vous pouvez créer l'application. Cloud Build fournit une image Docker prédéfinie que vous pouvez utiliser pour conteneuriser votre application Go. Pour conteneuriser votre application, ajoutez les champs suivants dans une étape de compilation:

    • name: définissez la valeur de ce champ sur gcr.io/cloud-builders/docker afin d'utiliser l'image Docker prédéfinie de Container Registry pour votre tâche.
    • args: ajoutez les arguments de la commande docker build en tant que valeurs de ce champ.

    L'étape de compilation suivante crée l'image myimage et lui ajoute un tag avec la version courte de votre ID de commit. L'étape de compilation utilise des substitutions pour l'ID de projet, le nom du dépôt et les valeurs SHA courtes. Par conséquent, ces valeurs sont automatiquement remplacées au moment de la compilation. Notez que vous devez créer ou disposer d'un dépôt Docker dans Artifact Registry pour stocker l'image.

    # Docker Build
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t',
             'us-central1-docker.pkg.dev/$PROJECT_ID/$_REPO_NAME/myimage:$SHORT_SHA', '.']
  4. Déploiement du conteneur dans Artifact Registry: vous pouvez stocker le conteneur créé dans Artifact Registry, qui est un service Google Cloud que vous pouvez utiliser pour stocker, gérer et sécuriser des artefacts de compilation. Pour ce faire, vous devez disposer d'un dépôt Docker existant dans Artifact Registry. Pour configurer Cloud Build afin de stocker l'image dans un dépôt Docker Artifact Registry, ajoutez une étape de compilation avec les champs suivants:

    • name: définissez la valeur de ce champ sur gcr.io/cloud-builders/docker pour utiliser l'image de compilateur docker officielle de Container Registry pour votre tâche.
    • args: ajoutez les arguments de la commande docker push en tant que valeurs de ce champ. Pour l'URL de destination, saisissez le dépôt Docker Artifact Registry dans lequel vous souhaitez stocker l'image.

    L'étape de compilation suivante envoie l'image que vous avez créée à l'étape précédente à Artifact Registry:

    # Docker push to Google Artifact Registry
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'us-central1-docker.pkg.dev/$PROJECT_ID/$_REPO_NAME/myimage:$SHORT_SHA']
  5. Déployer le conteneur sur Cloud Run: pour déployer l'image sur Cloud Run, ajoutez une étape de compilation avec les champs suivants:

    • name: définissez la valeur de ce champ sur google/cloud-sdk pour utiliser l'image du SDK Cloud afin d'appeler la commande gcloud pour déployer l'image sur Cloud Run.
    • args: ajoutez les arguments de la commande gcloud run deploy en tant que valeurs de ce champ.

    L'étape de compilation suivante déploie l'image créée précédemment sur Cloud Run:

    # Deploy to Cloud Run
    - name: 'gcr.io/cloud-builders/gcloud'
      args: ['run', 'deploy', 'helloworld',
             '--image=us-central1-docker.pkg.dev/$PROJECT_ID/$_REPO_NAME/myimage:$SHORT_SHA',
             '--region', 'us-central1', '--platform', 'managed']
  6. 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 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 suivant montre le fichier de configuration de compilation complet pour toutes les étapes décrites ci-dessus:

    steps:
      # Run tests and save to file
      - name: golang
        entrypoint: /bin/bash
        args:
          - -c
          - |
            go get -u github.com/jstemmer/go-junit-report
            2>&1 go test -timeout 1m -v ./... | tee sponge.log
            /go/bin/go-junit-report -set-exit-code < sponge.log > ${SHORT_SHA}_test_log.xml
    
      # Docker Build
      - name: 'gcr.io/cloud-builders/docker'
        args: ['build', '-t',
               'us-central1-docker.pkg.dev/$PROJECT_ID/$_REPO_NAME/myimage:$SHORT_SHA', '.']
    
      # Docker push to Google Artifact Registry
      - name: 'gcr.io/cloud-builders/docker'
        args: ['push', 'us-central1-docker.pkg.dev/$PROJECT_ID/$_REPO_NAME/myimage:$SHORT_SHA']
    
      # Deploy to Cloud Run
      - name: 'gcr.io/cloud-builders/gcloud'
        args: ['run', 'deploy', 'helloworld',
               '--image=us-central1-docker.pkg.dev/$PROJECT_ID/$_REPO_NAME/myimage:$SHORT_SHA',
               '--region', 'us-central1', '--platform', 'managed']
    
    # Save test logs to Google Cloud Storage
    artifacts:
      objects:
        location: gs://$_BUCKET_NAME/
        paths:
          - ${SHORT_SHA}_test_log.xml
    # Store images in Google Artifact Registry
    images:
      - us-central1-docker.pkg.dev/$PROJECT_ID/$_REPO_NAME/myimage:$SHORT_SHA
  7. Démarrez la compilation à l'aide de l'outil gcloud ou de déclencheurs de compilation. Vous devez spécifier le nom du dépôt Artifact Registry lors du démarrage de la compilation.

    Pour spécifier le dépôt Artifact Registry lors du démarrage de la compilation à l'aide de l'outil gcloud:

    gcloud builds submit --config=cloudbuild.yaml \
        --substitutions=_REPO_NAME="REPO_NAME"
    

    Remplacez REPO_NAME par le nom de votre dépôt Artifact Registry.

    Pour spécifier le dépôt Artifact Registry lors de la compilation avec des déclencheurs de compilation, spécifiez le nom de votre dépôt Artifact Registry dans le champ Variables de substitution lors de la création du déclencheur de compilation

Étape suivante