Tutorial ini menjelaskan cara menggunakan alur kerja GitHub Actions untuk men-deploy aplikasi web ASP.NET Model-View-Controller (MVC) yang menggunakan .NET ke Google Kubernetes Engine (GKE).
Tutorial ini ditujukan bagi developer dan engineer DevOps yang memiliki pengetahuan dasar tentang Microsoft .NET, GitHub Actions, dan GKE. Anda juga memerlukan akun GitHub untuk menjalankan tutorial ini.
Tujuan
Men-deploy aplikasi web ASP.NET Core yang menggunakan .NET 6.0 dan berjalan di Linux ke Google Kubernetes Engine.
Diagram berikut menunjukkan alur kerja GitHub Actions untuk men-deploy aplikasi web ASP.NET MVC ke Google Kubernetes Engine (GKE).

Tutorial ini menunjukkan cara menyelesaikan tugas berikut untuk mencapai tujuan Anda:
- Membuat repositori GitHub
- Mengonfigurasi autentikasi
- Men-deploy cluster GKE dan repositori Artifact Registry
- Membuat alur kerja GitHub Actions
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
- Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Artifact Registry and Google Kubernetes Engine APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Artifact Registry and Google Kubernetes Engine APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
Membuat repositori GitHub
Buat fork repositori dotnet-docs-samples di akun GitHub Anda.
Langkah ini diperlukan karena kita membangun dengan GitHub Actions.
- Buka repositori GitHub
dotnet-docs-samples. - Klik Fork.
Di halaman Create a new fork, tetapkan hal berikut:
- Pemilik - Akun GitHub Anda
- Nama repositori -
dotnet-docs-samples
Klik Buat fork.
Mengonfigurasi autentikasi
Siapkan project Google Cloud agar GitHub Actions dapat melakukan autentikasi dan mengakses resource di project Google Cloud .
Membuat pool dan penyedia federasi identitas workload
Untuk mengizinkan GitHub Actions melakukan autentikasi Google Cloud dan men-deploy ke GKE, gunakan workload identity federation. Dengan menggunakan workload identity federation, Anda dapat menghindari kebutuhan untuk menyimpan dan mengelola kunci akun layanan untuk workload GitHub Actions Anda.
Penggunaan workload identity federation memerlukan workload identity pool dan penyedia. Sebaiknya Anda menggunakan project khusus untuk mengelola workload identity pool dan penyedia workload. Dalam tutorial ini, untuk mempermudah, buat pool dan penyedia di project yang sama dengan cluster GKE Anda:
Buka konsol Google Cloud .
-
Di konsol Google Cloud , aktifkan Cloud Shell.
Di bagian bawah konsol Google Cloud , sesi Cloud Shell akan dimulai dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi pada sesi.
Buat workload identity pool baru:
gcloud iam workload-identity-pools create github-actions \ --location="global" \ --description="GitHub Actions tutorial" \ --display-name="GitHub Actions"Tambahkan GitHub Actions sebagai penyedia workload identity pool:
gcloud iam workload-identity-pools providers create-oidc github-actions-oidc \ --location="global" \ --workload-identity-pool=github-actions \ --issuer-uri="https://token.actions.githubusercontent.com/" \ --attribute-mapping="google.subject=assertion.sub" \ --attribute-condition="assertion.repository_owner=='ORGANIZATION'"Ganti
ORGANIZATIONdengan nama organisasi GitHub Anda.
Membuat akun layanan
Di Cloud Shell, buat akun layanan yang dapat digunakan GitHub Actions untuk memublikasikan image Docker dan men-deploy ke GKE:
SERVICE_ACCOUNT=$(gcloud iam service-accounts create github-actions-workflow \ --display-name "GitHub Actions workflow" \ --format "value(email)")
Berikan peran penulis Artifact Registry (
roles/artifactregistry.writer) ke akun layanan untuk mengizinkan tindakan GitHub melakukan push ke Artifact Registry:gcloud projects add-iam-policy-binding $(gcloud config get-value core/project) \ --member serviceAccount:$SERVICE_ACCOUNT \ --role roles/artifactregistry.writer
Berikan peran developer Google Kubernetes Engine (
roles/container.developer) ke akun layanan agar tindakan GitHub dapat melakukan push ke Artifact Registry:gcloud projects add-iam-policy-binding $(gcloud config get-value core/project) \ --member serviceAccount:$SERVICE_ACCOUNT \ --role roles/container.developer
Mengizinkan alur kerja GitHub Actions menggunakan akun layanan
Izinkan alur kerja GitHub Actions untuk meniru identitas dan menggunakan akun layanan:
Lakukan inisialisasi variabel lingkungan yang berisi subject yang digunakan oleh alur kerja GitHub Actions. Subjek mirip dengan nama pengguna yang secara unik mengidentifikasi repositori dan cabang GitHub:
SUBJECT=repo:
OWNER/dotnet-docs-samples:ref:refs/heads/mainGanti
OWNERdengan nama pengguna GitHub Anda.Memberikan izin kepada subjek untuk meniru identitas akun layanan:
PROJECT_NUMBER=$(gcloud projects describe $(gcloud config get-value core/project) --format='value(projectNumber)') gcloud iam service-accounts add-iam-policy-binding $SERVICE_ACCOUNT \ --role=roles/iam.workloadIdentityUser \ --member="principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/github-actions/subject/$SUBJECT"
Men-deploy cluster GKE dan repositori Artifact Registry
Buat repositori untuk image Docker:
gcloud artifacts repositories create clouddemo \ --repository-format=docker \ --location=us-central1
Izinkan akun layanan default Compute Engine mengakses repositori:
gcloud projects add-iam-policy-binding $(gcloud config get-value core/project) \ --member=serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/artifactregistry.reader
Membuat cluster:
gcloud container clusters create clouddemo-linux \ --enable-ip-alias \ --zone us-central1-a
Pemrosesan perintah ini mungkin membutuhkan waktu beberapa menit.
Dapatkan nama project dan nomor project cluster:
echo "Project ID: $(gcloud config get-value core/project)" echo "Project Number: $(gcloud projects describe $(gcloud config get-value core/project) --format=value\(projectNumber\))"
Anda memerlukan nilai ini nanti.
Membuat alur kerja GitHub Actions
Sekarang Anda dapat menggunakan GitHub Actions untuk menyiapkan continuous integration. Untuk setiap commit yang dikirim ke repositori Git, alur kerja GitHub Actions akan mem-build kode dan mengemas artefak build ke dalam container Docker. Container kemudian dipublikasikan ke Artifact Registry.
Repositori sudah berisi Dockerfile berikut:
Repositori ini juga berisi manifes Kubernetes:
Buat alur kerja GitHub Actions yang melakukan hal berikut:
- Lakukan autentikasi ke Google Cloud menggunakan workload identity federation dan akun layanan yang Anda buat sebelumnya.
- Bangun image Docker dan deploy ke Artifact Registry.
- Deploy image Docker ke GKE.
Untuk membuat alur kerja GitHub Actions, lakukan hal berikut:
- Di GitHub, buka fork repositori
dotnet-docs-samplesAnda. - Klik Tambahkan file > Buat file baru.
Di kolom teks Name your file, masukkan nama berikut:
.github/workflows/deploy-gke.yaml
Salin kode berikut ke dalam file:
name: Build and Deploy to GKE on: push: branches: - main env: PROJECT_ID:PROJECT_IDPROJECT_NUMBER:PROJECT_NUMBERCLUSTER: clouddemo-linux CLUSTER_ZONE: us-central1-a REPOSITORY: clouddemo REPOSITORY_REGION: us-central1 IMAGE: clouddemo jobs: build: runs-on: ubuntu-latest permissions: id-token: write contents: read steps: - name: Checkout uses: actions/checkout@v3 # # Authenticate to Google Cloud using workload identity federation # - id: 'auth' name: 'Obtain access token by using workload identity federation' uses: 'google-github-actions/auth@v0' with: create_credentials_file: true token_format: access_token workload_identity_provider: projects/${{ env.PROJECT_NUMBER }}/locations/global/workloadIdentityPools/github-actions/providers/github-actions-oidc service_account: github-actions-workflow@${{ env.PROJECT_ID }}.iam.gserviceaccount.com - name: Connect to Artifact Registry run: |- echo ${{ steps.auth.outputs.access_token }} | docker login -u oauth2accesstoken --password-stdin https://${{ env.REPOSITORY_REGION }}-docker.pkg.dev - name: Connect to GKE uses: google-github-actions/get-gke-credentials@v0 with: cluster_name: ${{ env.CLUSTER }} location: ${{ env.CLUSTER_ZONE }} # # Build the .NET code # - name: Build solution run: |- dotnet publish applications/clouddemo/netcore/CloudDemo.MvcCore.sln \ --configuration Release \ --framework net6.0 # # Build the Docker image and push it to Artifact Registry # - name: Create image tag run: echo "IMAGE_TAG=${{ env.REPOSITORY_REGION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.REPOSITORY }}/${{ env.IMAGE }}:$GITHUB_SHA" >> $GITHUB_ENV - name: Lock image version in deployment.yaml run: sed -i 's|CLOUDDEMO_IMAGE|${{ env.IMAGE_TAG }}|g' applications/clouddemo/netcore/deployment.yaml - name: Build Docker image run: docker build --tag "${{ env.IMAGE_TAG }}" applications/clouddemo/netcore - name: Publish Docker image to Google Artifact Registry run: docker push "${{ env.IMAGE_TAG }}" # # Deploy to GKE # - name: Deploy to GKE run: kubectl apply -f applications/clouddemo/netcore/deployment.yamlGanti nilai berikut:
PROJECT_ID: project ID project yang berisi cluster GKE.PROJECT_NUMBER: nomor project yang berisi cluster GKE.
Di bagian Commit file baru, masukkan pesan commit, misalnya,
Add workflow, lalu klik Commit file baru.Di menu, klik Tindakan dan tunggu hingga alur kerja selesai.
Alur kerja mungkin memerlukan waktu beberapa menit untuk diselesaikan.
Di konsol Google Cloud , muat ulang halaman Services & Ingress.
Buka tab Ingress.
Cari layanan Ingress untuk cluster clouddemo dan tunggu hingga statusnya berubah menjadi Ok. Proses ini dapat memerlukan waktu beberapa menit.
Buka link di kolom Frontend pada baris yang sama. Load balancer memerlukan waktu beberapa menit untuk tersedia, sehingga aplikasi CloudDemo mungkin tidak dimuat pada awalnya. Setelah load balancer siap, Anda akan melihat aplikasi CloudDemo dengan judul kustom, kali ini berjalan di cluster produksi.
Pembersihan
Setelah menyelesaikan tutorial, Anda dapat membersihkan resource yang dibuat sehingga resource tersebut berhenti menggunakan kuota dan dikenai biaya. Bagian berikut menjelaskan cara menghapus atau menonaktifkan resource ini.
Menghapus repositori GitHub
Untuk menghapus repositori GitHub, lihat Menghapus repositori. Menghapus repositori akan menyebabkan semua perubahan kode sumber hilang.
Menghapus project
Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.
Menghapus Google Cloud project:
gcloud projects delete PROJECT_ID
Langkah berikutnya
- Men-deploy, mengelola, dan menskalakan aplikasi dalam container di Kubernetes.
- Tinjau praktik terbaik dalam Google Cloud Framework yang Dirancang dengan Baik.
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.