Men-deploy Aplikasi Cloud Run dengan Cloud Deploy

1. Ringkasan

Di lab ini, Anda akan men-deploy aplikasi .Net ke Cloud Run menggunakan Cloud Deploy. Anda akan membangun image container dengan Cloud Build tanpa menggunakan Dockerfile. Anda akan menyiapkan pipeline dengan tiga lingkungan target dengan Cloud Deploy dan mengikuti langkah-langkah untuk mempromosikan rilis melalui lingkungan. Terakhir, Anda akan menyetujui rilis tersebut untuk di-deploy ke lingkungan produksi.

916a54f51af5ee54.pngS

Apa itu Cloud Build?

Dengan Cloud Build Anda dapat membangun software dengan cepat di semua bahasa pemrograman.

Apa itu 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) pada platform yang terkelola sepenuhnya.

Apa itu Skaffold?

Skaffold adalah alat command line yang memungkinkan pengembangan berkelanjutan untuk aplikasi berbasis Kubernetes. Cloud Deploy menggunakan Skaffold untuk operasi render dan deploy.

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

  1. 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.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 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 peduli tentang apa itu. Di sebagian besar codelab, Anda harus mereferensikan Project ID (biasanya diidentifikasi sebagai PROJECT_ID). Jika Anda tidak menyukai ID yang dihasilkan, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri dan lihat 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.
  1. 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. Untuk 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.

eb0157a992f16fa3.png

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

Mengaktifkan 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

29c2533441779de0.pngS

Menggandakan 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 yang 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: {}

Meninjau 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 yang berisi langkah-langkah untuk membangun 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. Membangun image Container dan membuat rilis

Menambahkan 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 Konsol Cloud 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 UM (Uji Mutu) selesai. Promosikan 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 Konsol Cloud dan setujui rilis untuk deployment produksi.

4c838b60770e9691.pngS

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 dalam pipeline pengiriman Anda.

Frekuensi deployment

Seberapa sering pipeline pengiriman di-deploy hingga target akhir dalam 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:

d6372b5350f10875.png

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 menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource, atau simpan project dan hapus resource satu per satu.

Menghapus project

Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.

8. Langkah berikutnya