1. Panoramica
In questo lab eseguirai il deployment di un'applicazione .NET in Cloud Run utilizzando Cloud Deploy. Creerai un'immagine container con Cloud Build senza utilizzare Dockerfile. Configura una pipeline con tre ambienti di destinazione con Cloud Deploy ed esegui i passaggi per promuovere la release negli ambienti. Infine, dovrai approvare la release da eseguire nell'ambiente di produzione.
Che cos'è Cloud Build?
Con Cloud Build puoi creare software rapidamente in tutti i linguaggi di programmazione.
Che cos'è Cloud Deploy?
Cloud Deploy è un servizio di distribuzione continua completamente gestito. Con Cloud Deploy puoi creare pipeline di deployment per GKE, Anthos e Cloud Run.
Che cos'è Cloud Run?
Con Cloud Run puoi eseguire il deployment di applicazioni containerizzate scalabili scritte in qualsiasi linguaggio (tra cui Go, Python, Java, Node.js, .NET e Ruby) su una piattaforma completamente gestita.
Che cos'è Skaffold?
Skaffold è uno strumento a riga di comando che consente lo sviluppo continuo per le applicazioni native di Kubernetes. Cloud Deploy utilizza Skaffold per le operazioni di rendering e deployment.
Cosa imparerai a fare
In questo lab imparerai a:
- Crea la pipeline Cloud Deploy
- Creare un'immagine container per l'applicazione .NET con Cloud Build senza utilizzare Dockerfile
- Esegui il deployment dell'applicazione in Cloud Run con Cloud Deploy
- Promuovere le release di Cloud Deploy
Prerequisiti
- Questo lab presuppone familiarità con la console Cloud e gli ambienti shell.
2. Configurazione e requisiti
Configurazione del progetto cloud
- Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.
- Il nome del progetto è il nome visualizzato per i partecipanti al progetto. Si tratta di una stringa di caratteri non utilizzata dalle API di Google. Puoi aggiornarlo in qualsiasi momento.
- L'ID progetto è univoco per tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo essere stato impostato). La console Cloud genera automaticamente una stringa univoca; in genere non è importante quale sia. Nella maggior parte dei codelab, dovrai fare riferimento all'ID progetto (in genere identificato come
PROJECT_ID
). Se l'ID generato non ti piace, puoi generarne un altro casuale. In alternativa, puoi provare il tuo e vedere se è disponibile. Non può essere modificato dopo questo passaggio e rimarrà invariato per tutta la durata del progetto. - Per tua informazione, esiste un terzo valore, un Numero progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
- Successivamente, dovrai abilitare la fatturazione nella console Cloud per utilizzare le API/risorse Cloud. L'esecuzione di questo codelab non dovrebbe costare molto, se non del tutto. Per arrestare le risorse in modo da non generare costi oltre questo tutorial, puoi eliminare le risorse che hai creato o l'intero progetto. I nuovi utenti di Google Cloud possono partecipare al programma Prova senza costi di 300$.
Configurazione dell'ambiente
Attiva Cloud Shell facendo clic sull'icona a destra della barra di ricerca.
Da Cloud Shell, esegui il seguente comando per impostare le variabili di ambiente del progetto:
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
--format='value(projectNumber)')
export REGION=us-central1
Abilita le API:
gcloud services enable \
run.googleapis.com \
cloudbuild.googleapis.com \
clouddeploy.googleapis.com \
artifactregistry.googleapis.com
Crea un repository Artifact Registry per archiviare le immagini container dell'applicazione:
gcloud artifacts repositories create containers-repo \
--repository-format=docker \
--location=${REGION} \
--description="Containers repository"
3. Esamina i file di configurazione
Clona il codice sorgente dell'applicazione:
git clone https://github.com/gitrey/deploy-cloudrun-app-with-clouddeploy.git
cd deploy-cloudrun-app-with-clouddeploy
Esamina la configurazione della pipeline Cloud Deploy:
clouddeploy.yaml
apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
name: cloud-run-pipeline
description: application deployment pipeline
serialPipeline:
stages:
- targetId: dev-env
profiles: [dev]
- targetId: qa-env
profiles: [qa]
- targetId: prod-env
profiles: [prod]
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: dev-env
description: Cloud Run development service
run:
location: projects/_PROJECT_ID/locations/us-west1
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: qa-env
description: Cloud Run QA service
run:
location: projects/_PROJECT_ID/locations/us-central1
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: prod-env
description: Cloud Run PROD service
run:
location: projects/_PROJECT_ID/locations/us-south1
Esamina il file skaffold.yaml
che definisce tre ambienti e utilizza Cloud Run come servizio di destinazione.
skaffold.yaml
apiVersion: skaffold/v3alpha1
kind: Config
metadata:
name: cloud-run-app
profiles:
- name: dev
manifests:
rawYaml:
- deploy-dev.yaml
- name: qa
manifests:
rawYaml:
- deploy-qa.yaml
- name: prod
manifests:
rawYaml:
- deploy-prod.yaml
deploy:
cloudrun: {}
Esamina i file di configurazione del servizio.
deploy-dev.yaml
kind: Service
metadata:
name: app-dev
spec:
template:
spec:
containers:
- image: app
resources:
limits:
cpu: 1000m
memory: 128Mi
deploy-qa.yaml
kind: Service
metadata:
name: app-dev
spec:
template:
spec:
containers:
- image: app
deploy-prod.yaml
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: app-prod
spec:
template:
spec:
containers:
- image: app
Esamina il file cloudbuild.yaml
con i passaggi per creare un'immagine container e una release Cloud Deploy:
cloudbuild.yaml
steps:
- name: 'gcr.io/k8s-skaffold/pack'
entrypoint: 'pack'
args: ['build',
'--builder=gcr.io/buildpacks/builder',
'--publish', '${_REGION}-docker.pkg.dev/${PROJECT_ID}/containers-repo/app:$BUILD_ID']
id: Build and package .net app
- name: gcr.io/google.com/cloudsdktool/cloud-sdk:slim
args:
[
"deploy", "releases", "create", "release-$_RELEASE_TIMESTAMP",
"--delivery-pipeline", "cloud-run-pipeline",
"--region", "${_REGION}",
"--images", "app=${_REGION}-docker.pkg.dev/${PROJECT_ID}/containers-repo/app:$BUILD_ID"
]
entrypoint: gcloud
4. Crea la pipeline Cloud Deploy
Sostituisci il valore _PROJECT_ID in clouddeploy.yaml:
sed -i "s/_PROJECT_ID/$PROJECT_ID/g" clouddeploy.yaml
Crea la pipeline Cloud Deploy:
gcloud deploy apply \
--file=clouddeploy.yaml \
--region=${REGION} \
--project=${PROJECT_ID}
Esamina la pipeline creata in Cloud Deploy.
5. Crea l'immagine del contenitore e una release
Aggiungi le autorizzazioni di operatore Cloud Deploy all'account di servizio Cloud Build:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
--role=roles/clouddeploy.operator
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
--role=roles/iam.serviceAccountUser
Crea l'immagine container e la release Cloud Deploy:
export RELEASE_TIMESTAMP=$(date '+%Y%m%d-%H%M%S')
gcloud builds submit \
--config cloudbuild-plus.yaml \
--substitutions=_REGION=${REGION},_RELEASE_TIMESTAMP=${RELEASE_TIMESTAMP}
Rivedi la release creata in Cloud Deploy. Attendi il completamento del deployment nell'ambiente di sviluppo.
6. Promuovere la release negli ambienti QA e PROD
Utilizzando Cloud Console o Cloud Shell, promuovi la release al target successivo(qa-env).
Promuovi la release con Cloud Shell, esegui il comando gcloud per promuovere la release.
gcloud beta deploy releases promote \
--release="release-${RELEASE_TIMESTAMP}" \
--delivery-pipeline=cloud-run-pipeline \
--region=${REGION} \
--quiet
Attendi il completamento del deployment nell'ambiente QA. Promuovi la release al target successivo(prod-env).
gcloud beta deploy releases promote \
--release="release-${RELEASE_TIMESTAMP}" \
--delivery-pipeline=cloud-run-pipeline \
--region=${REGION} \
--quiet
Apri Cloud Deploy in Cloud Console e approva la release per il deployment in produzione.
Controlla lo stato della pipeline Cloud Deploy e le metriche DORA disponibili ("deployment count", "deployment frequency", "deployment failure rate").
Metrica | Descrizione |
Numero di deployment | Il numero totale di deployment riusciti e non riusciti nella destinazione finale della pipeline di distribuzione. |
Frequenza di deployment | La frequenza con cui la pipeline di distribuzione esegue il deployment nella destinazione finale della tua pipeline di distribuzione.Una delle quattro metriche chiave definite dal programma DORA (DevOps Research and Assessment). |
Percentuale di errori di deployment | La percentuale di implementazioni non riuscite nella destinazione finale della pipeline di distribuzione. |
Esamina le applicazioni di cui è stato eseguito il deployment in Cloud Run:
7. Complimenti!
Complimenti, hai completato il codelab.
Argomenti trattati:
- Come creare la pipeline di Cloud Deploy
- Come creare un'immagine container per l'applicazione .NET con Cloud Build
- Come eseguire il deployment dell'applicazione in Cloud Run con Cloud Deploy
- Come promuovere la release di Cloud Deploy
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.
Elimina il progetto
Il modo più semplice per eliminare la fatturazione è eliminare il progetto che hai creato per il tutorial.