1. Ringkasan
Di lab ini, Anda akan men-deploy aplikasi .Net ke Cloud Run menggunakan Cloud Deploy. Anda akan mem-build image container dengan Cloud Build tanpa menggunakan Dockerfile. Anda akan menyiapkan pipeline dengan tiga lingkungan target dengan Cloud Deploy dan melakukan langkah-langkah untuk mempromosikan rilis melalui lingkungan. Terakhir, Anda akan menyetujui rilis untuk di-deploy ke lingkungan produksi.
Apa yang dimaksud dengan Cloud Build?
Dengan Cloud Build, Anda dapat mem-build software dengan cepat di semua bahasa pemrograman.
Apa yang dimaksud dengan Cloud Deploy?
Cloud Deploy adalah layanan continuous delivery yang terkelola sepenuhnya. Dengan Cloud Deploy, Anda dapat membuat pipeline deployment untuk GKE, Anthos, dan Cloud Run.
What is Cloud Run?
Dengan Cloud Run, Anda dapat men-deploy aplikasi dalam container yang skalabel dan ditulis dalam bahasa apa pun (termasuk Go, Python, Java, Node.js, .NET, dan Ruby) di platform yang terkelola sepenuhnya.
Apa itu Skaffold?
Skaffold adalah alat command line yang memungkinkan pengembangan berkelanjutan untuk aplikasi native Kubernetes. Cloud Deploy menggunakan Skaffold untuk operasi render dan deployment.
Yang akan Anda pelajari
Di lab ini, Anda akan mempelajari cara melakukan hal-hal berikut:
- Membuat pipeline Cloud Deploy
- Membuat image container untuk aplikasi .Net dengan Cloud Build tanpa menggunakan Dockerfile
- Men-deploy aplikasi ke Cloud Run dengan Cloud Deploy
- Mempromosikan rilis Cloud Deploy
Prasyarat
- Di lab ini, Anda dianggap telah memahami Konsol Cloud dan lingkungan shell.
2. Penyiapan dan Persyaratan
Penyiapan Project Cloud
- Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.
- Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API. Anda dapat memperbaruinya kapan saja.
- Project ID bersifat unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (umumnya diidentifikasi sebagai
PROJECT_ID
). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri dan melihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan akan tetap ada selama durasi project. - Sebagai informasi, ada nilai ketiga, Project Number, yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
- Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini seharusnya tidak memerlukan banyak biaya, bahkan mungkin tidak sama sekali. Guna mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus seluruh project. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.
Penyiapan Lingkungan
Aktifkan Cloud Shell dengan mengklik ikon di sebelah kanan kotak penelusuran.
Dari Cloud Shell, jalankan perintah berikut untuk menetapkan variabel lingkungan project:
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
--format='value(projectNumber)')
export REGION=us-central1
Aktifkan API:
gcloud services enable \
run.googleapis.com \
cloudbuild.googleapis.com \
clouddeploy.googleapis.com \
artifactregistry.googleapis.com
Buat repositori Artifact Registry untuk menyimpan image container aplikasi:
gcloud artifacts repositories create containers-repo \
--repository-format=docker \
--location=${REGION} \
--description="Containers repository"
3. Meninjau file konfigurasi
Meng-clone kode sumber aplikasi:
git clone https://github.com/gitrey/deploy-cloudrun-app-with-clouddeploy.git
cd deploy-cloudrun-app-with-clouddeploy
Tinjau konfigurasi 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
Tinjau file skaffold.yaml
yang menentukan tiga lingkungan, dan menggunakan Cloud Run sebagai layanan target.
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: {}
Tinjau file konfigurasi layanan.
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
Tinjau file cloudbuild.yaml
dengan langkah-langkah untuk mem-build image container dan membuat rilis 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. Membuat Pipeline Cloud Deploy
Ganti nilai _PROJECT_ID di clouddeploy.yaml:
sed -i "s/_PROJECT_ID/$PROJECT_ID/g" clouddeploy.yaml
Buat pipeline Cloud Deploy:
gcloud deploy apply \
--file=clouddeploy.yaml \
--region=${REGION} \
--project=${PROJECT_ID}
Tinjau pipeline yang dibuat di Cloud Deploy.
5. Mem-build Image penampung dan membuat rilis
Tambahkan izin Operator Cloud Deploy ke akun layanan 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
Buat image container dan rilis 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}
Tinjau rilis yang dibuat di Cloud Deploy. Tunggu hingga deployment ke lingkungan Dev selesai.
6. Mempromosikan rilis ke lingkungan QA dan PROD
Menggunakan Cloud Console atau Cloud Shell, promosikan rilis ke target berikutnya(qa-env).
Promosikan rilis dengan Cloud Shell, jalankan perintah gcloud untuk mempromosikan rilis.
gcloud beta deploy releases promote \
--release="release-${RELEASE_TIMESTAMP}" \
--delivery-pipeline=cloud-run-pipeline \
--region=${REGION} \
--quiet
Tunggu hingga deployment ke lingkungan QA selesai. Mempromosikan rilis ke target berikutnya(prod-env).
gcloud beta deploy releases promote \
--release="release-${RELEASE_TIMESTAMP}" \
--delivery-pipeline=cloud-run-pipeline \
--region=${REGION} \
--quiet
Buka Cloud Deploy di Cloud Console dan setujui rilis untuk deployment produksi.
Tinjau status pipeline Cloud Deploy dan metrik DORA yang tersedia ("jumlah deployment", "frekuensi deployment", "tingkat kegagalan deployment").
Metrik | Deskripsi |
Jumlah deployment | Jumlah total deployment yang berhasil dan gagal ke target akhir di pipeline pengiriman Anda. |
Frekuensi deployment | Seberapa sering pipeline pengiriman di-deploy ke target akhir di pipeline pengiriman Anda.Salah satu dari empat metrik utama yang ditentukan oleh program DevOps Research and Assessment (DORA). |
Tingkat kegagalan deployment | Persentase peluncuran yang gagal ke target akhir di pipeline pengiriman Anda. |
Tinjau aplikasi yang di-deploy di Cloud Run:
7. Selamat!
Selamat, Anda telah menyelesaikan codelab!
Yang telah kita bahas:
- Cara membuat pipeline Cloud Deploy
- Cara membuat image container untuk aplikasi .Net dengan Cloud Build
- Cara men-deploy aplikasi ke Cloud Run dengan Cloud Deploy
- Cara mempromosikan rilis Cloud Deploy
Pembersihan
Agar tidak dikenai biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.
Menghapus project
Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.