Esegui il deployment di un flusso di lavoro da un repository Git utilizzando Cloud Build

Puoi utilizzare un trigger di Cloud Build per avviare automaticamente una build e implementare un flusso di lavoro da un repository Git. Puoi configurare l'attivatore per eseguire il deployment del flusso di lavoro in caso di qualsiasi modifica al repository di origine o solo quando la modifica soddisfa determinati criteri.

Questo approccio può aiutarti a gestire il ciclo di vita del deployment. Ad esempio, puoi eseguire il deployment delle modifiche a un flusso di lavoro in un ambiente di staging, eseguire test su quell'ambiente e poi implementare queste modifiche in modo incrementale nell'ambiente di produzione.

Prima di iniziare

Queste istruzioni presuppongono che tu disponga del ruolo Editor di Cloud Build (roles/cloudbuild.builds.editor) nel tuo Google Cloud progetto per poter creare trigger. Inoltre, è necessario un flusso di lavoro in un repository di origine come GitHub o Bitbucket.

Console

  1. Abilita le API Cloud Build e Workflows.

    Abilita le API

  2. Concedi il ruolo Amministratore flussi di lavoro (roles/workflows.admin) all'account di servizio Cloud Build:

    1. Nella console Google Cloud, vai alla pagina IAM.

      Vai a IAM

    2. Seleziona il progetto.

    3. Nella riga dell'account di servizio Cloud Build (PROJECT_NUMBER@cloudbuild.gserviceaccount.com), fai clic su Modifica entità.

    4. Fai clic su Aggiungi un altro ruolo.

    5. Nell'elenco Ruolo, seleziona il ruolo Amministratore flussi di lavoro.

    6. Fai clic su Salva.

  3. Concedi il ruolo Utente account di servizio (roles/iam.serviceAccountUser) all'account di servizio predefinito Compute Engine all'account di servizio Cloud Build. Dopo aver abilitato l'API Compute Engine, l'account di servizio predefinito Compute Engine è PROJECT_NUMBER-compute@developer.gserviceaccount.com.

    1. Nella console Google Cloud, vai alla pagina Account di servizio.

      Vai a Service account

    2. Seleziona il progetto.

    3. Fai clic sull'indirizzo email dell'account di servizio predefinito Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com).

    4. Fai clic sulla scheda Autorizzazioni.

    5. Fai clic sul pulsante Concedi accesso.

    6. Per aggiungere un nuovo principale, inserisci l'indirizzo email del tuo account di servizio (SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com).

    7. Nell'elenco Seleziona un ruolo, seleziona il ruolo Account di servizio > Utente account di servizio.

    8. Fai clic su Salva.

gcloud

  1. Abilita le API Cloud Build e Workflows.

    gcloud services enable cloudbuild.googleapis.com \
      workflows.googleapis.com
    
  2. Concedi il ruolo Amministratore flussi di lavoro (roles/workflows.admin) all'account di servizio Cloud Build:

    PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format='value(projectNumber)')
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
      --role=roles/workflows.admin
    

    Sostituisci PROJECT_ID con l'ID del tuo Google Cloud progetto.

  3. Concedi il ruolo Utente account di servizio (roles/iam.serviceAccountUser) all'account di servizio predefinito Compute Engine all'account di servizio Cloud Build. Dopo aver abilitato l'API Compute Engine, l'account di servizio predefinito Compute Engine è PROJECT_NUMBER-compute@developer.gserviceaccount.com.

    gcloud iam service-accounts add-iam-policy-binding \
      $PROJECT_NUMBER-compute@developer.gserviceaccount.com \
      --member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
      --role=roles/iam.serviceAccountUser
    

Connettiti al repository di origine

Devi connettere Cloud Build al tuo repository di origine in modo che possa automatizzare le build in risposta a eventi che si verificano nel repository.

Per collegarti a GitHub o Bitbucket:

  1. Nella console Google Cloud, vai alla pagina Trigger di Cloud Build:

    Vai ai trigger

  2. Se necessario, seleziona il progetto e fai clic su Apri.

  3. Nell'elenco Regione, seleziona la regione in cui vuoi creare l'attivatore.

  4. Fai clic su Connetti repository.

  5. Seleziona il repository di origine in cui hai archiviato il codice sorgente.

    Ad esempio: GitHub (App GitHub di Cloud Build)

  6. Fai clic su Continua.

  7. Autenticati nel repository di origine con il tuo nome utente e la tua password.

    Se accedi a GitHub, ti viene chiesto di autorizzare l'app GitHub di Google Cloud Build ad accedere al tuo account GitHub per procedere.

  8. Nell'elenco dei repository disponibili, seleziona quello che ti interessa e poi fai clic su OK.

    Per i repository esterni come GitHub e Bitbucket, devi disporre delle autorizzazioni a livello di proprietario per il progetto Google Cloud in cui stai lavorando.

  9. Leggi il disclaimer e seleziona la casella di controllo accanto per indicare che accetti i termini.

  10. Fai clic su Connetti.

  11. Per continuare a creare un trigger di build per automatizzare le build per il codice sorgente nel repository, fai clic su Crea un trigger. In caso contrario, fai clic su Fine.

Crea un file di configurazione Cloud Build

Un file di configurazione della build definisce i campi necessari quando si utilizza un trigger di compilazione per avviare una build. Crea il file di configurazione nella directory principale del progetto e scrivilo utilizzando YAML o JSON.

Ad esempio, il seguente file di configurazione esegue il deployment ed esegue un flusso di lavoro di test, quindi utilizza uno script per controllare l'output. Se il test viene superato, il flusso di lavoro viene eseguito:

steps:
# Deploy the test workflow with the commit sha
- id: 'deploy-test-workflow'
  name: 'gcr.io/cloud-builders/gcloud'
  args: ['workflows', 'deploy', '$_WORKFLOW_NAME-$BRANCH_NAME-$SHORT_SHA', '--source', 'gitops/workflow.yaml']

# Run the test workflow and capture the output
- id: 'run-test-workflow'
  name: 'gcr.io/cloud-builders/gcloud'
  entrypoint: 'bash'
  args: ['-c', 'gcloud workflows run $_WORKFLOW_NAME-$BRANCH_NAME-$SHORT_SHA > /workspace/testoutput.log']

# Delete the test workflow
- id: 'delete-test-workflow'
  name: 'gcr.io/cloud-builders/gcloud'
  args: ['workflows', 'delete', '$_WORKFLOW_NAME-$BRANCH_NAME-$SHORT_SHA', '--quiet']

# Check the test output
- id: 'check-test-workflow'
  name: 'gcr.io/cloud-builders/gcloud'
  entrypoint: 'bash'
  args: ['gitops/test-$BRANCH_NAME.sh']

# Deploy the workflow
- id: 'deploy-workflow'
  name: 'gcr.io/cloud-builders/gcloud'
  args: ['workflows', 'deploy', '$_WORKFLOW_NAME-$BRANCH_NAME', '--source', 'gitops/workflow.yaml']

Le variabili di sostituzione $BRANCH_NAME e $SHORT_SHA vengono compilate da Cloud Build quando viene attivata una build da un repository Git. Rappresentano rispettivamente il nome del ramo e i primi sette caratteri dell'ID commit associato alla build.

La variabile di sostituzione $_WORKFLOW_NAME consente di riutilizzare un file di configurazione con valori di variabile diversi. Puoi specificarne il valore quando crei l'attivatore della compilazione.

Per ulteriori informazioni, consulta la pagina Creare un file di configurazione build.

Creare un trigger di build

Puoi automatizzare il deployment del flusso di lavoro creando un trigger Cloud Build.

Per creare un attivatore di compilazione per il file di configurazione nella sezione precedente:

  1. Nella console Google Cloud, vai alla pagina Trigger di Cloud Build:

    Vai ai trigger

  2. Fai clic su Crea trigger.

  3. Nel campo Nome, inserisci un nome per l'attivatore.

  4. In Evento, seleziona l'evento per richiamare l'attivatore.

    Ad esempio: push su un branch

  5. In Origine, seleziona il repository e il nome del ramo o del tag che attiverà l'attivatore. Puoi utilizzare un'espressione regolare per specificare una corrispondenza con un ramo o un tag.

    Ad esempio: GoogleCloudPlatform/workflows-demos (repository) e ^main$|^staging$ (corrisponde ai branch main e staging)

  6. Espandi la sezione Mostra i filtri dei file inclusi e ignorati e specifica il tuo flusso di lavoro come file incluso in modo che, quando viene modificato, venga invocata una compilazione.

    Ad esempio: gitops/workflow.yaml

  7. In Configurazione, seleziona File di configurazione di Cloud Build (YAML o JSON) come tipo e Repository come posizione.

  8. Nel campo Posizione file di configurazione Cloud Build, specifica la posizione del file.

    Ad esempio: gitops/cloudbuild.yaml

  9. Se vuoi, per aggiungere una variabile di sostituzione, fai clic su Aggiungi variabile e specifica una combinazione di chiave e valore.

    Ad esempio: _WORKFLOW_NAME (variabile) e workflows-gitops (valore)

  10. Per salvare il trigger di build, fai clic su Crea.

Quando vengono eseguite modifiche in un flusso di lavoro nel ramo specificato del repository Git, Cloud Build viene attivato automaticamente per eseguire il deployment del flusso di lavoro.

Per saperne di più, consulta Creare e gestire i trigger di build.

Testa l'trigger di build

Puoi testare l'attivatore di compilazione e il file di configurazione delle sezioni precedenti.

  1. Nel ramo staging del repository Git, modifica workflow.yaml e cambia Hello World in Bye World:

    main:
      steps:
        - init:
            assign:
              - message: "Hello World"
        - returnResult:
            return: ${message}
  2. Esegui il commit e il push della modifica nel ramo staging.

    git add workflow.yaml
    git commit -m "Update workflow.yaml in staging"
    git push
    

    Il trigger di Cloud Build viene eseguito e avvia una build.

  3. Per confermare il buon esito della compilazione, nella console Google Cloud vai alla pagina Cronologia di compilazione:

    Vai a Cronologia build

    Al termine di una build, Cloud Build fornisce uno stato complessivo per la build e per ogni singolo passaggio di build. Per ulteriori informazioni, consulta Visualizzare i risultati della compilazione.

  4. Per verificare che un flusso di lavoro di staging sia stato implementato, nella console Google Cloud, vai alla pagina Workflows:

    Vai a Flussi di lavoro

    Dovresti vedere un flusso di lavoro denominato workflows-gitops-staging.

  5. Per eseguire il deployment del flusso di lavoro di staging in produzione, unisci il ramo staging al ramo main:

    git checkout main
    git merge staging
    git push
    

    Tieni presente che, poiché test-main.sh si aspetta Hello World nell'output del flusso di lavoro, la compilazione non andrà a buon fine:

    RESULT_EXPECTED="result: '\"Hello World\"'"
    RESULT_ACTUAL=$(grep "result: " $FILE)
    if [[ $RESULT_EXPECTED == $RESULT_ACTUAL ]]; then
      echo "Result test passed"
    else
      echo "Result test failed. Expected: $RESULT_EXPECTED Actual: $RESULT_ACTUAL"; exit 1;
    fi
  6. Per eseguire correttamente il deployment di un flusso di lavoro di produzione, nel ramo staging, modifica nuovamente workflow.yaml e ripristina la stringa Hello World.

  7. Esegui il commit e il push della modifica nel ramo staging, quindi unisci il ramo staging al ramo main.

  8. Per verificare che un flusso di lavoro di produzione sia stato implementato, nella console Google Cloud, vai alla pagina Workflows:

    Vai a Flussi di lavoro

    Dovresti vedere un flusso di lavoro denominato workflows-gitops-main.

Passaggi successivi