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. Configurerai una pipeline con tre ambienti di destinazione con Cloud Deploy e seguirai i passaggi per promuovere il rilascio attraverso gli ambienti. Infine, approverai il deployment della release 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 pipeline Cloud Deploy
- Crea l'immagine container per l'applicazione .Net con Cloud Build senza utilizzare Dockerfile
- Esegui il deployment dell'applicazione in Cloud Run con Cloud Deploy
- Promuovi le release di Cloud Deploy
Prerequisiti
- Questo lab presuppone la conoscenza della console Cloud e degli 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 progetto è il nome visualizzato dei partecipanti del progetto. Si tratta di una stringa di caratteri non utilizzata dalle API di Google. Puoi aggiornarla in qualsiasi momento.
- L'ID progetto è univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo essere stato impostato). La console Cloud genera automaticamente una stringa univoca; di solito non ti importa cosa sia. Nella maggior parte dei codelab, dovrai fare riferimento all'ID progetto (in genere è identificato come
PROJECT_ID
). Se l'ID generato non ti soddisfa, puoi generarne un altro casuale. In alternativa, puoi provarne una personalizzata per verificare se è disponibile. Non può essere modificato dopo questo passaggio e rimarrà per tutta la durata del progetto. - Per informazione, c'è un terzo valore, un numero di 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 risorse/API Cloud. Eseguire questo codelab non dovrebbe costare molto. Per arrestare le risorse in modo da non incorrere in fatturazione oltre questo tutorial, puoi eliminare le risorse che hai creato o eliminare l'intero progetto. I nuovi utenti di Google Cloud sono idonei 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 questo 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 il repository Artifact Registry per archiviare le immagini container delle applicazioni:
gcloud artifacts repositories create containers-repo \
--repository-format=docker \
--location=${REGION} \
--description="Containers repository"
3. Rivedi 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
Rivedi la configurazione della pipeline di 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 la 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 pipeline Cloud Deploy
Sostituisci il valore di _PROJECT_ID in clouddeploy.yaml:
sed -i "s/_PROJECT_ID/$PROJECT_ID/g" clouddeploy.yaml
Crea una pipeline di Cloud Deploy:
gcloud deploy apply \
--file=clouddeploy.yaml \
--region=${REGION} \
--project=${PROJECT_ID}
Esamina la pipeline creata in Cloud Deploy.
5. Crea l'immagine container e crea una release
Aggiungi le autorizzazioni dell'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}
Esamina la release creata in Cloud Deploy. Attendi il completamento del deployment nell'ambiente di sviluppo.
6. Promuovi il rilascio negli ambienti QA e PROD
Utilizzando la console Cloud o Cloud Shell, promuovi la release al target successivo(qa-env).
Promuovi la release con Cloud Shell ed esegui il comando gcloud per promuoverla.
gcloud beta deploy releases promote \
--release="release-${RELEASE_TIMESTAMP}" \
--delivery-pipeline=cloud-run-pipeline \
--region=${REGION} \
--quiet
Attendi il completamento del deployment nell'ambiente di 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 nella console Cloud e approva la release per il deployment in produzione.
Esamina lo stato della pipeline di Cloud Deploy e le metriche DORA disponibili ("conteggio dei deployment", "frequenza di deployment", "tasso di errore del deployment").
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 viene distribuita nel target finale della 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 nel target 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:
- Creare una pipeline di Cloud Deploy
- Come creare un'immagine container per un'applicazione .Net con Cloud Build
- 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 è quello di eliminare il progetto che hai creato per il tutorial.