Crea e testa le applicazioni Go

Questa pagina spiega come utilizzare Cloud Build per compilare e testare le applicazioni Go, caricare gli elementi in Artifact Registry, generare informazioni sull'origine e salvare i log di test in Cloud Storage.

Prima di iniziare

Le istruzioni riportate in questa pagina presuppongono che tu abbia dimestichezza 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 l'account di servizio

Gli esempi in questo documento utilizzano un account di servizio specificato dall'utente. Per creare l'account di servizio utilizzato da Cloud Build, esegui il seguente 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 avere l'autorizzazione per agire come nuovo account di servizio. Per prima cosa, determina il nome dell'account di servizio per l'elaborazione nel tuo progetto:

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

Poi, concedi il ruolo Utente account di servizio (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 predefinito dell'account di servizio Compute 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 Account di servizio Cloud Build (roles/cloudbuild.builds.builder) nel tuo account di servizio di compilazione. Per saperne di più sulla concessione dei ruoli, consulta Gestire 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 elementi costruiti in Artifact Registry, chiedi all'amministratore di concederti il ruolo IAM Writer Artifact Registry (roles/artifactregistry.writer) nel tuo account di servizio di compilazione.

Per ottenere le autorizzazioni necessarie per archiviare i log di test in Logging, chiedi all'amministratore di concederti il ruolo IAM Creatore oggetti archiviazione (roles/storage.objectCreator) nel tuo account di servizio di compilazione.

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

Configura le build Go

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

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

Per compilare l'applicazione Go di esempio:

  1. Configura i test di unità: se hai definito test di unità nella tua applicazione, puoi configurare Cloud Build per eseguirli aggiungendo i seguenti campi in un passaggio di compilazione:

    • 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 compilazione.
    • args: il campo args di un passaggio di compilazione prende un elenco di argomenti e li passa all'immagine a cui fa riferimento il campo name. Nell'esempio riportato di seguito, il campo args accetta gli argomenti per:

      • Esegui il programma di formattazione dei log di test per scaricare l'output del log di test.
      • Stampa dell'output del log.
      • Salvataggio dei risultati del test in sponge.log.
      • Eseguire l'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 compilazione. Un passaggio di compilazione 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 in 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 tuo repository in Artifact Registry.
    • projectId: l'ID del progetto che contiene il repository Artifact Registry. Google Cloud
    • sourcePath: il percorso del file go.mod nello spazio di lavoro della compilazione.
    • appPath: il percorso dell'applicazione pacchettizzata.
    • version: il numero di versione dell'applicazione, formattato in numeri e puntini come v1.0.1.
  3. (Facoltativo) Attivare la generazione della provenienza

    Cloud Build può generare metadati verificabili per l'origine della compilazione Supply Chain Levels for Software Artifacts (SLSA) per contribuire a proteggere la pipeline di integrazione continua.

    Per attivare la generazione dell'origine, aggiungi requestedVerifyOption: VERIFIED alla sezione options del file di configurazione.

    Al termine della build, puoi visualizzare i dettagli del repository in Artifact Registry.

    Puoi anche visualizzare i metadati dell'origine della compilazione e convalidare l'origine.

  4. Salva i log di test in Cloud Storage: puoi configurare Cloud Build per archiviare i log di test in Cloud Storage specificando la posizione e il percorso di un bucket esistente per i log di test.

    Il seguente passaggio di compilazione memorizza i log di 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
    

    Lo snippet seguente 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'
          repositoryProject_id: 'projectId'
          sourcePath: 'sourcePath'
          modulePath: 'appPath'
          moduleVersion: 'version'
    
  5. Avvia la compilazione utilizzando l'interfaccia a riga di comando gcloud o crea un trigger di compilazione:

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 compilazione. Nel campo Voci di sostituzione, devi anche fornire il nome del repository Artifact Registry e il nome del bucket Cloud Storage per i log di test.

Passaggi successivi