Crea e testa le applicazioni Go

Questa pagina spiega come utilizzare Cloud Build per creare e testare le applicazioni Go, caricare gli artefatti in Artifact Registry, generare informazioni sulla provenienza e salvare i log di test in Cloud Storage.

Prima di iniziare

Le istruzioni riportate in questa pagina presuppongono che tu abbia familiarità con Go. Inoltre:

  • Enable the Cloud Build, Cloud Run, and Artifact Registry APIs.

    Enable the APIs

  • Per eseguire i comandi gcloud in questa pagina, installa Google Cloud CLI.
  • Tieni a portata di mano il progetto Go.
  • Avere un repository Go in Artifact Registry. Se non ne hai uno, crea un nuovo repository.
  • Se vuoi archiviare i log di test in Cloud Storage, crea un bucket in Cloud Storage.

Configura il account di servizio

Gli esempi in questo documento utilizzano un account di servizio specificato dall'utente. Per creare il account di servizio utilizzato da Cloud Build, esegui questo comando in 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"

L'account di servizio Compute predefinito (utilizzato da Cloud Run) deve disporre dell'autorizzazione per agire come il nuovo service account. Innanzitutto, determina il nome delaccount di serviziot di Compute nel tuo progetto:

gcloud iam service-accounts list --filter="email:-compute@developer.gserviceaccount.com"

Successivamente, concedi il ruolo Utente service account (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"

Sostituisci COMPUTE_SERVICE_ACCOUNT_EMAIL con l'indirizzo email del account di servizio Compute predefinito stampato dal comando precedente.

Configura le autorizzazioni IAM

Assicurati di disporre delle autorizzazioni necessarie:

Per ottenere le autorizzazioni necessarie per eseguire build in Cloud Build, chiedi all'amministratore di concederti il ruolo IAM Service Account Cloud Build (roles/cloudbuild.builds.builder) sul tuo account di servizio di build. Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Per ottenere le autorizzazioni necessarie per archiviare gli artefatti compilati in Artifact Registry, chiedi all'amministratore di concederti il ruolo IAM Artifact Registry Writer (roles/artifactregistry.writer) sul tuo account di servizio di build.

Per ottenere le autorizzazioni necessarie per archiviare i log di test in Logging, chiedi all'amministratore di concederti il ruolo IAM Storage Object Creator (roles/storage.objectCreator) account di servizioe account di build.

Per ottenere le autorizzazioni necessarie per eseguire il deployment dell'applicazione su Cloud Run, chiedi all'amministratore di concederti il ruolo IAM Cloud Run Developer (roles/run.developer) sul tuo account di servizio di build.

Configurare le build Go

L'immagine golang pubblica di Docker Hub supporta la creazione utilizzando i moduli Go. L'utilizzo di questa immagine come passaggio di build nel file di configurazione di Cloud Build consente di richiamare i comandi go all'interno dell'immagine. Gli argomenti passati a questo passaggio di build vengono passati direttamente allo strumento golang, consentendoti di eseguire qualsiasi comando go in questa immagine.

Questa sezione mostra come creare un file di configurazione della build di esempio per un'app Go dal repository Git cloud-build-samples. Il file di configurazione della build contiene i passaggi per creare l'app, aggiungere test delle unità e, dopo il superamento dei test, per eseguire il deployment dell'app.

Per creare l'applicazione Go di esempio:

  1. Configura i test unitari: se hai definito test unitari nella tua applicazione, puoi configurare Cloud Build per eseguire i test aggiungendo i seguenti campi in un passaggio di build:

    • name: imposta il valore di questo campo su golang per utilizzare l'immagine golang da Docker Hub per l'attività.
    • entrypoint: imposta il valore di questo campo su /bin/bash. In questo modo puoi eseguire comandi bash su più righe direttamente dal passaggio di build.
    • args: il campo args di un passaggio di build accetta un elenco di argomenti e li passa all'immagine a cui fa riferimento il campo name. Nel seguente esempio, il campo args accetta gli argomenti per:

      • Esecuzione del formatter dei log di test per scaricare l'output dei log di test.
      • Stampa dell'output del log.
      • Salvataggio dei risultati del test in sponge.log.
      • Output dei risultati in sponge.log in un file XML JUNIT. Il nome del file XML JUNIT viene creato utilizzando la versione breve dell'ID commit associato alla build. Un passaggio di build successivo salverà i log in questo file in 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
        
  2. Carica su Artifact Registry: nel file di configurazione, utilizza il campo goModules per specificare il percorso dell'applicazione e il repository Go in Artifact Registry:

    # Upload Go module to artifact registry
    artifacts:
      goModules:
        - repositoryName: 'repositoryName'
          repositoryLocation: 'location'
          repositoryProjectId: 'projectId'
          sourcePath: 'sourcePath'
          modulePath: 'appPath'
          moduleVersion: 'version'
    

    Sostituisci i seguenti valori:

    • repositoryName: il nome del repository Go in Artifact Registry.
    • location: la posizione del repository in Artifact Registry.
    • projectId: l'ID del progetto Google Cloud che contiene il repository Artifact Registry.
    • sourcePath: il percorso del file go.mod nello spazio di lavoro della build.
    • appPath: il percorso dell'applicazione pacchettizzata.
    • version: il numero di versione della tua applicazione, formattato in numeri e punti come v1.0.1.
  3. (Facoltativo) Attivare la generazione della provenienza

    Cloud Build può generare metadati di provenienza della build Supply chain Levels for Software Artifacts (SLSA) verificabili per proteggere la pipeline di integrazione continua.

    Per attivare la generazione della provenienza, aggiungi requestedVerifyOption: VERIFIED alla sezione options del file di configurazione.

    Una volta completata la build, puoi visualizzare i dettagli del repository in Artifact Registry.

    Puoi anche visualizzare i metadati di provenienza della build e convalidare la provenienza.

  4. Salva i log di test in Cloud Storage: puoi configurare Cloud Build per archiviare tutti i log di test in Cloud Storage specificando un percorso e una posizione del bucket esistenti per i log di test.

    Il seguente passaggio di build archivia i log dei test salvati nel file XML JUNIT in un bucket Cloud Storage:

    # Save test logs to Google Cloud Storage
    artifacts:
      objects:
        location: gs://$_BUCKET_NAME/
        paths:
          - ${SHORT_SHA}_test_log.xml
    

    Il seguente snippet mostra il file di configurazione della build completo per i passaggi precedenti:

      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'
    
  5. Avvia la build utilizzando gcloud CLI o crea un trigger di build:

Google Cloud CLI

 gcloud builds submit --region=us-west2 --config=cloudbuild.yaml \
     --substitutions=_AR_REPO_NAME="AR_REPO_NAME"

Trigger di build

Segui i passaggi descritti in Creare un trigger di build. Nel campo Variabili di sostituzione, devi fornire anche il nome del repository Artifact Registry e il nome del bucket Cloud Storage per i log di test.

Passaggi successivi