Questa pagina descrive come deploy di nuovi servizi e nuove revisioni in Cloud Run direttamente dal codice sorgente utilizzando un singolo comando gcloud CLI, gcloud run deploy
con il flag --source
. Per un example walkthrough di deployment di un servizio Hello World, consulta Approfondimenti sul deployment da sorgente.
Dietro le quinte, questo comando utilizza
i buildpack di Google Cloud
e Cloud Build per creare automaticamente
immagini container dal codice sorgente senza dover installare Docker sulla
macchina o configurare i buildpack o Cloud Build. In altre parole, il singolo comando
descritto sopra esegue l'operazione che altrimenti richiederebbe i comandi
gcloud builds submit
e
gcloud run deploy
.
Tieni presente che i deployment delle origini utilizzano Artifact Registry per archiviare i container compilati. Se il tuo progetto non ha già un repository Artifact Registry con il nome cloud-run-source-deploy
nella regione in cui esegui il deployment, questa funzionalità crea automaticamente un repository Artifact Registry con il nome cloud-run-source-deploy
.
Se nella directory del codice sorgente è presente un Dockerfile, il codice sorgente caricato viene compilato utilizzando quel Dockerfile. Se nella directory del codice sorgente non è presente alcun Dockerfile, i buildpack di Google Cloud rilevano automaticamente il linguaggio che stai utilizzando e recuperano le dipendenze del codice per creare un'immagine container pronta per la produzione utilizzando un'immagine di base sicura gestita da Google.
Per impostazione predefinita, le correzioni di sicurezza vengono applicate solo quando il servizio viene implementato. Quando attivi gli aggiornamenti automatici della sicurezza per un servizio, questo riceve le patch automaticamente senza tempi di inattività. Scopri di più sulla configurazione degli aggiornamenti della sicurezza.
Lingue supportate
Oltre alle origini con un Dockerfile, il deployment da sorgente supporta le seguenti lingue:
Scopri di più sulle versioni linguistiche supportate dai buildpack di Google Cloud.
Limitazioni di questa funzionalità
- Il deployment dall'origine utilizza Artifact Registry, pertanto questa funzionalità è disponibile solo nelle regioni supportate da Artifact Registry.
- Il deployment dal codice sorgente utilizzando
gcloud run deploy --source
è una funzionalità di comodità e non consente la personalizzazione completa della build. Per un maggiore controllo, crea l'immagine container utilizzando Cloud Build, ad esempio congcloud builds submit
, quindi esegui il deployment dell'immagine container utilizzando, ad esempio,gcloud run deploy --image
. - Il deployment da sorgente con i buildpack di Google Cloud imposta la data dell'ultima modifica
dei file di origine su 1° gennaio 1980. Questo è il comportamento predefinito dei buildpack
e è progettato per supportare
build riproducibili. A seconda del framework linguistico, questo può influire sulla memorizzazione nella cache lato browser dei file statici. Se
la tua applicazione è interessata da questo problema, Google consiglia di disattivare le intestazioni HTTP
etag
eLast-Modified
nell'applicazione. - Il deployment da sorgente con i buildpack di Google Cloud utilizza sempre
gcr.io/buildpacks/builder:latest
. Se la lingua o la configurazione del sistema operativo che preferisci non è disponibile inlatest
, utilizza un compilatore specifico per creare un'immagine dell'applicazione utilizzando il compilatore che preferisci. Puoi eseguire il deployment del servizio dal codice sorgente utilizzando Kotlin e altri linguaggi JVM come Java. Il linguaggio che utilizzi deve essere conforme alle seguenti regole:
- Puoi creare l'applicazione utilizzando Maven o Gradle.
- Il file di compilazione contiene tutti i plug-in necessari per le classi di prodotto.
Prima di iniziare
- Assicurati di aver configurato un nuovo progetto per Cloud Run come descritto nella pagina Configurazione.
Se il tuo progetto è soggetto a un criterio dell'organizzazione che limita le invocazioni non autenticate, dovrai accedere al servizio di cui è stato eseguito il deployment come descritto in Testare i servizi privati.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per eseguire il deployment dal codice sorgente, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:
-
Cloud Run Source Developer (
roles/run.sourceDeveloper
) -
Utente account di servizio (
roles/iam.serviceAccountUser
)
Per un elenco dei ruoli e delle autorizzazioni IAM associati a Cloud Run, consulta Ruoli IAM di Cloud Run e Autorizzazioni IAM di Cloud Run. Se il servizio Cloud Run interagisce con le API Google Cloud, come le librerie client di Cloud, consulta la guida alla configurazione dell'identità del servizio. Per ulteriori informazioni sulla concessione dei ruoli, consulta le autorizzazioni di deployment e gestisci l'accesso.
Concedi il ruolo dell'account di servizio Cloud Build all'account di servizio predefinito di Compute Engine
Abilita l'API Cloud Run Admin e l'API Cloud Build:
gcloud services enable run.googleapis.com \ cloudbuild.googleapis.com
Dopo aver attivato l'API Cloud Run Admin, l'account di servizio predefinito di Compute Engine viene creato automaticamente.
- Affinché Cloud Build possa compilare le tue origini, concedi il ruolo
Account di servizio Cloud Build
all'account di servizio predefinito di Compute Engine eseguendo quanto segue:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/cloudbuild.builds.builder
Sostituisci
PROJECT_NUMBER
con il numero del progetto Google Cloud ePROJECT_ID
con l'ID progetto Google Cloud. Per istruzioni dettagliate su come trovare l'ID progetto e il numero del progetto, consulta Creazione e gestione dei progetti.La propagazione del ruolo dell'account di servizio Cloud Build all'account di servizio predefinito di Compute Engine richiede un paio di minuti.
Deployment in corso…
Per eseguire il deployment dal codice sorgente:
Passa alla directory di origine. Tieni presente che la directory di origine non richiede un Dockerfile, ma se è presente, verrà utilizzato.
Crea ed esegui il deployment dell'applicazione:
gcloud run deploy SERVICE --source .
Sostituisci
SERVICE
con il nome che vuoi assegnare al servizio.Rispondi a eventuali richieste di installazione delle API richieste rispondendo
y
al prompt. Dovrai eseguire questa operazione una sola volta per un progetto. Rispondi alle altre richieste specificando la piattaforma e la regione, se non hai impostato i valori predefiniti come descritto nella pagina di configurazione.Attendi il completamento della compilazione e del deployment. Al termine, viene visualizzato un messaggio simile al seguente:
Service [my-app] revision [my-app-00000-xxx] has been deployed and is serving 100 percent of traffic. Service URL: https://my-app-texampleq-uc.a.run.app
Al momento del deployment, tieni presente che questa revisione del servizio gestisce il 100% del traffico.
Automatizzare la compilazione dal codice sorgente
Come best practice per evitare modifiche non versionate nel codice sorgente locale, Google consiglia di eseguire il deployment automaticamente quando le modifiche vengono inviate al repository Git. Per semplificare, puoi collegare e configurare il deployment continuo nel tuo servizio Cloud Run. Se colleghi i tuoi repository GitHub a Cloud Run, puoi configurare le build ed eseguire il deployment dei tuoi repository senza scrivere file Dockerfile o file di build.
Per configurare le build automatiche, imposta l'automazione come descritto nella pagina delle build continue, assicurandoti di scegliere l'opzione per la compilazione del codice sorgente con Buildpack.
Passaggi successivi
Dopo aver eseguito il deployment di un nuovo servizio, puoi:
- Implementazioni graduali, revisioni del rollback, migrazione del traffico
- Visualizzare i log di servizio
- Monitorare il rendimento dei servizi
- Impostare limiti di memoria
- Imposta le variabili di ambiente
- Modificare la concorrenza del servizio
- Gestire il servizio
- Gestire le revisioni del servizio
Puoi automatizzare le build e i deployment dei tuoi servizi Cloud Run utilizzando gli trigger di Cloud Build: