Deployment su Cloud Run tramite Cloud Build

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.
Questa pagina spiega come eseguire automaticamente il deployment dei servizi Cloud Run e Cloud Run for Anthos utilizzando Cloud Build. Se non hai mai utilizzato Cloud Build, leggi prima le guide rapide e la panoramica della configurazione della build.

Cloud Run e Cloud Run for Anthos sono piattaforme di computing che ti consentono di eseguire container stateless in un ambiente serverless. Utilizzando Cloud Build, puoi eseguire il deployment delle immagini container da Container Registry e Artifact Registry a Cloud Run. Puoi eseguire il deployment di un'immagine esistente, creare ed eseguire il deployment di un'immagine o automatizzare il deployment.

Prima di iniziare

  • Abilita le API Cloud Build, Cloud Run, Container Registry, and Resource Manager.

    Abilita le API

  • Tieni a portata di mano il codice sorgente dell'applicazione. Il codice sorgente deve essere archiviato in un repository, ad esempio Cloud Source Repositories, GitHub o Bitbucket.

  • Per eseguire i comandi gcloud in questa pagina, installa Google Cloud CLI.

Autorizzazioni IAM richieste

Se l'immagine è archiviata nello stesso progetto Cloud in cui vuoi eseguire il deployment o se l'immagine è pubblica in Container Registry, devi disporre delle seguenti autorizzazioni IAM:

Cloud Run

Per eseguire il deployment in Cloud Run, concedi i ruoli Amministratore di Cloud Run e Account utente di servizio all'account di servizio Cloud Build:

  1. Apri la pagina delle impostazioni di Cloud Build in Google Cloud Console:

    Vai alla pagina delle impostazioni di Cloud Build

  2. Nel riquadro Autorizzazioni dell'account di servizio, imposta lo stato del ruolo Amministratore Cloud Run su Attivato:

    Screenshot della pagina Autorizzazioni account di servizio

  3. Nella finestra popup Ulteriori passaggi potrebbe essere necessario fare clic su CONCEDI L'ACCESSO A TUTTI GLI ACCOUNT DI SERVIZIO.

Cloud Run for Anthos

Per eseguire il deployment in Cloud Run for Anthos, concedi il ruolo di sviluppatore Kubernetes Engine all'account di servizio Cloud Build:

  1. Apri la pagina delle impostazioni di Cloud Build in Google Cloud Console:

    Vai alla pagina delle impostazioni di Cloud Build

  2. Nel riquadro Autorizzazioni dell'account di servizio, imposta lo stato del ruolo Sviluppatore Kubernetes Engine su ATTIVO:

    Screenshot della pagina Autorizzazioni account di servizio

Se l'immagine è archiviata in un progetto Cloud diverso da quello in cui vuoi eseguire il deployment, hai bisogno di autorizzazioni IAM aggiuntive come descritto in Deployment di immagini da altri progetti Google Cloud.

Creazione e deployment di un container

Cloud Build ti consente di creare l'immagine container, archiviare l'immagine creata in Container Registry ed eseguire il deployment dell'immagine in Cloud Run.

Per creare ed eseguire il deployment di un'immagine container:

  1. Nella directory radice del progetto, crea un file di configurazione denominato cloudbuild.yaml.

  2. Nel file di configurazione della build, aggiungi docker passaggi di build per creare l'immagine ed eseguirne il push in Container Registry, quindi aggiungi un passaggio di build gcloud per richiamare il comando gcloud run deploy per il deployment dell'immagine su Cloud Run:

    Cloud Run

    steps:
    # Build the container image
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'gcr.io/PROJECT_ID/IMAGE', '.']
    # Push the container image to Container Registry
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'gcr.io/PROJECT_ID/IMAGE']
    # Deploy container image to Cloud Run
    - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
      entrypoint: gcloud
      args: ['run', 'deploy', 'SERVICE-NAME', '--image', 'gcr.io/PROJECT_ID/IMAGE', '--region', 'REGION']
    images:
    - gcr.io/PROJECT_ID/IMAGE
    

    Dove:

    • SERVICE-NAME è il nome del servizio Cloud Run.
    • REGION è l'area geografica del servizio Cloud Run di cui esegui il deployment.
    • PROJECT_ID è il tuo ID progetto Google Cloud in cui è archiviata l'immagine.
    • IMAGE è il nome dell'immagine in Container Registry.

    Cloud Run for Anthos

    steps:
    # Build the container image
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'gcr.io/PROJECT_ID/IMAGE', '.']
    # Push the container image to Container Registry
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'gcr.io/PROJECT_ID/IMAGE']
    # Deploy container image to Cloud Run for Anthos
    - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
      entrypoint: gcloud
      args: ['run', 'deploy', 'SERVICE-NAME', '--image', 'gcr.io/PROJECT_ID/IMAGE', '--cluster', 'CLUSTER', '--cluster-location', 'CLUSTER_LOCATION', '--platform', 'gke']
    images:
    - gcr.io/PROJECT_ID/IMAGE
    

    Dove:

    • SERVICE-NAME è il nome del servizio Cloud Run.
    • CLUSTER è il nome del cluster Cloud Run for Anthos.
    • CLUSTER_LOCATION è la località del tuo cluster Cloud Run for Anthos.
    • PROJECT_ID è il tuo ID progetto Google Cloud in cui è archiviata l'immagine.
    • IMAGE è il nome dell'immagine in Container Registry.
  3. Passa alla directory radice del progetto ed esegui il comando seguente, dove REGION è una delle regioni di build supportate per eseguire la build:

     gcloud builds submit --region=REGION
    

Una volta completata l'operazione, viene visualizzato un messaggio con l'URL del servizio di cui è stato eseguito il deployment.

Deployment continuo

Puoi automatizzare il deployment del tuo software su Cloud Run e Cloud Run for Anthos creando trigger Cloud Build. Puoi configurare i tuoi trigger per creare ed eseguire il deployment delle immagini ogni volta che aggiorni il codice sorgente.

Per automatizzare il deployment:

  1. Nella root del repository, aggiungi un file di configurazione denominato cloudbuild.yaml con i passaggi per creare l'immagine, eseguirne il push in Container Registry e richiamare il comando gcloud run deploy:

    Cloud Run

     steps:
     # Build the container image
     - name: 'gcr.io/cloud-builders/docker'
       args: ['build', '-t', 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA', '.']
     # Push the container image to Container Registry
     - name: 'gcr.io/cloud-builders/docker'
       args: ['push', 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA']
     # Deploy container image to Cloud Run
     - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
       entrypoint: gcloud
       args:
       - 'run'
       - 'deploy'
       - 'SERVICE-NAME'
       - '--image'
       - 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA'
       - '--region'
       - 'REGION'
     images:
     - 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA'
    

    Dove:

    • SERVICE-NAME è il nome del servizio Cloud Run.
    • REGION è l'area geografica del servizio Cloud Run di cui esegui il deployment.

    Cloud Run for Anthos

     steps:
     # build the container image
     - name: 'gcr.io/cloud-builders/docker'
       args: ['build', '-t', 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA', '.']
     # push the container image to Container Registry
     - name: 'gcr.io/cloud-builders/docker'
       args: ['push', 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA']
     # Deploy container image to Cloud Run for Anthos
     - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
       entrypoint: gcloud
       args:
       - 'run'
       - 'deploy'
       - 'SERVICE-NAME'
       - '--image'
       - 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA'
       - '--cluster'
       - 'CLUSTER'
       - '--cluster-location'
       - 'CLUSTER_LOCATION'
       - '--platform'
       - 'gke'
     images:
     - 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA'
    

    Dove:

    • SERVICE-NAME è il nome del servizio Cloud Run.
    • CLUSTER è il nome del cluster Cloud Run for Anthos.
    • CLUSTER_LOCATION è la località del tuo cluster Cloud Run for Anthos.

    L'utilizzo della variabile di sostituzione $COMMIT_SHA viene completato da Cloud Build quando viene attivato da un repository Git.

  2. Crea un trigger di build con il file di configurazione creato nel passaggio precedente:

    1. Apri la pagina Attivatori:

      Vai alla pagina Attivatori

    2. Fai clic su Crea trigger.

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

    4. In Area geografica, seleziona l'area geografica per l'attivatore.

    5. In Evento, seleziona l'evento del repository per avviare il trigger.

    6. In Origine, seleziona il tuo repository e il nome del ramo o del tag che avvierà il trigger. Per saperne di più su come specificare i rami da creare automaticamente, consulta la sezione Creazione di un trigger di build.

    7. In Configurazione, seleziona File di configurazione di Cloud Build (YAML o JSON).

    8. Nel campo Posizione file di configurazione Cloud Build, digita cloudbuild.yaml dopo /.

    9. Fai clic su Crea per salvare il trigger di build.

  3. Hai finito! D'ora in poi, ogni volta che esegui il push nel tuo repository, vengono richiamati automaticamente una build e un deployment nel tuo servizio.

Ogni volta che esegui il push di nuovo codice nel repository, attiverai automaticamente una build e ne eseguirai il deployment nel servizio Cloud Run.

Per ulteriori informazioni sulla creazione di trigger di Cloud Build, consulta Creazione e gestione dei trigger di build.

Utilizzo di autorizzazioni IAM minime

Quando un container viene sottoposto a deployment in un servizio Cloud Run, viene eseguito con l'identità dell'account di servizio runtime di questo servizio Cloud Run. Dato che Cloud Build può eseguire il deployment di nuovi container automaticamente, Cloud Build deve essere in grado di agire come account di servizio di runtime del tuo servizio Cloud Run.

Per concedere l'accesso limitato a Cloud Build al deployment di un servizio Cloud Run:

Console

  1. Vai alla pagina Account di servizio di Google Cloud Console:

    Vai agli account di servizio

  2. Fai clic sull'indirizzo email dell'account di servizio Cloud Run del tuo servizio Cloud Run (per impostazione predefinita, è PROJECT_NUMBER-compute@developer.gserviceaccount.com).

  3. Fai clic sulla scheda Autorizzazioni.

  4. Fai clic su Concedi l'accesso.

  5. Inserisci l'account di servizio Cloud Build (PROJECT_NUMBER@cloudbuild.gserviceaccount.com)

  6. Nel menu a discesa Seleziona un ruolo, seleziona il ruolo Account di servizio > Utente account di servizio.

  7. Fai clic su Salva.

gcloud

Utilizza il comando gcloud iam service-accounts add-iam-policy-binding, dove PROJECT_NUMBER è l'ID numerico del tuo progetto:

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"

Sostituisci PROJECT_NUMBER con l'ID numerico del tuo progetto.

Se utilizzi Cloud Run utilizzando un'identità di servizio personalizzata, sostituisci PROJECT_NUMBER-compute@developer.gserviceaccount.com con l'indirizzo del tuo account di servizio.

Per ulteriori informazioni, consulta la pagina sulle autorizzazioni di deployment.

Esempi di codice

Di seguito sono riportati alcuni repository di esempio, ognuno dei quali contiene un'applicazione di esempio e un file di configurazione della build per eseguire il deployment dell'applicazione in Cloud Run:

  • deploy-prebuilt: Un esempio di codice che mostra come eseguire il deployment di un'immagine predefinita in Cloud Run.
  • run-example-builddeploy: esempio di codice che mostra come creare ed eseguire il deployment di un'immagine in Cloud Run.

Passaggi successivi