Tutorial ini menunjukkan cara menggunakan runner GitHub yang dihosting sendiri di kumpulan pekerja untuk menjalankan alur kerja yang ditentukan di repositori GitHub Anda, dan menskalakan kumpulan pekerja Anda dengan Penskalaan Otomatis Metrik Eksternal Cloud Run (CREMA).
Tentang runner GitHub yang dihosting sendiri
Dalam alur kerja GitHub Actions, runner adalah mesin yang menjalankan tugas. Misalnya, pelari dapat meng-clone repositori Anda secara lokal, menginstal software pengujian, lalu menjalankan perintah yang mengevaluasi kode Anda.
Anda dapat menggunakan runner yang dihosting sendiri untuk menjalankan GitHub Actions di instance kumpulan pekerja Cloud Run. Tutorial ini menunjukkan cara menskalakan kumpulan pelari secara otomatis berdasarkan jumlah tugas yang sedang berjalan dan yang belum dijadwalkan.
Tujuan
Dalam tutorial ini, Anda akan:
Tambahkan runner GitHub yang dihosting sendiri untuk mendukung repositori GitHub, dan buat secret Secret Manager untuk menyimpan token dan secret dengan aman.
Deploy pool pekerja Cloud Run ke Cloud Run dan gunakan pool pekerja untuk menerima tugas dari tindakan GitHub.
Deploy layanan CREMA autoscaler untuk menskalakan kumpulan pekerja Anda.
Uji layanan CREMA Anda dengan memverifikasi log.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih sebagai berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Sebelum memulai
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
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.
-
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 Cloud Run, Secret Manager, Parameter Manager, Artifact Registry, and Cloud Build 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. - Instal dan lakukan inisialisasi gcloud CLI.
- Perbarui komponen:
gcloud components update
- Tetapkan variabel konfigurasi berikut untuk CREMA yang digunakan dalam tutorial ini:
Ganti PROJECT_ID dengan ID project Google Cloud Anda.PROJECT_ID=PROJECT_ID CREMA_SERVICE_ACCOUNT_NAME=crema-service-account@$PROJECT_ID.iam.gserviceaccount.com CREMA_REPO_NAME=crema AR_REGION=us-central1
- Anda akan dikenai biaya untuk layanan penskalaan Cloud Run berdasarkan seberapa sering Anda memicu penskalaan. Untuk mengetahui informasi selengkapnya, perkirakan biaya dengan kalkulator harga.
-
Administrator Repositori Artifact Registry (
roles/artifactregistry.repoAdmin) -
Editor Cloud Build (
roles/cloudbuild.builds.editor) -
Admin Cloud Run (
roles/run.admin) -
Buat Akun Layanan (
roles/iam.serviceAccountCreator) -
Secret Manager Admin (
roles/secretmanager.admin) -
Pengguna Akun Layanan (
roles/iam.serviceAccountUser) -
Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer) -
Storage Admin (
roles/storage.admin) -
Parameter Manager Admin (
roles/parametermanager.admin)
Peran yang diperlukan
Untuk mendapatkan izin yang Anda perlukan untuk menyelesaikan tutorial, minta administrator Anda untuk memberi Anda peran IAM berikut di project Anda:
Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Anda memerlukan izin untuk mengedit setelan di repositori GitHub guna mengonfigurasi runner yang dihosting sendiri. Repositori dapat dimiliki pengguna, atau repositori yang dimiliki organisasi.
GitHub merekomendasikan penggunaan runner yang dihosting sendiri dengan repositori pribadi saja.
Membuat akun layanan kustom
Tutorial ini menggunakan akun layanan kustom dengan izin minimum yang diperlukan untuk menggunakan resource yang disediakan. Untuk menyiapkan akun layanan, lakukan hal berikut:
gcloud iam service-accounts create crema-service-account \
--display-name="CREMA Service Account"
Menambahkan runner GitHub yang dihosting sendiri
Untuk menambahkan runner GitHub yang dihosting sendiri, ikuti petunjuk dalam menambahkan runner yang dihosting sendiri di dokumentasi GitHub.
Mengidentifikasi repositori GitHub
Dalam tutorial ini, variabel GITHUB_REPO mewakili nama repositori. Ini adalah bagian nama yang Anda temukan setelah nama domain untuk repositori pengguna pribadi dan repositori organisasi. Contoh:
- Jika URL domain Anda adalah
https://github.com/myuser/myrepo, GITHUB_REPO adalahmyuser/myrepo. - Jika URL domain Anda adalah
https://github.com/mycompany/ourrepo, GITHUB_REPO adalahmycompany/ourrepo.
Buat token akses
Buat token akses GitHub untuk menambahkan dan menghapus pelari secara dinamis dengan berinteraksi dengan repositori yang Anda pilih. Untuk membuat token akses di GitHub dan menyimpannya di Secret Manager, ikuti langkah-langkah berikut:
- Pastikan Anda login ke akun GitHub Anda.
- Buka halaman Settings > Developer Settings > Personal Access Tokens > Tokens (classic) GitHub.
- Klik Buat token baru, lalu pilih Buat token baru (klasik).
- Untuk cakupan token, centang kotak repo.
- Klik Generate token.
- Salin token yang dihasilkan.
Untuk mengetahui informasi selengkapnya tentang token akses, lihat Persyaratan autentikasi dalam dokumentasi GitHub.
Buat secret untuk token akses Anda menggunakan Secret Manager
Ambil token rahasia yang Anda buat di langkah sebelumnya, lalu simpan di Secret Manager. Untuk menyetel izin akses, ikuti langkah-langkah berikut:
Buat secret di Secret Manager:
echo -n "GITHUB_TOKEN" | gcloud secrets create github_runner_token --data-file=-Ganti GITHUB_TOKEN dengan nilai yang Anda salin dari GitHub.
Beri
roles/secretmanager.secretAccessorke akun layanan kustom Anda untuk mengakses secret yang baru dibuat:gcloud secrets add-iam-policy-binding github_runner_token \ --member "serviceAccount:$CREMA_SERVICE_ACCOUNT_NAME" \ --role "roles/secretmanager.secretAccessor"
Men-deploy kumpulan pekerja
Buat kumpulan pekerja Cloud Run untuk memproses tindakan GitHub. Pool ini akan menggunakan image berdasarkan image actions/runner yang dibuat GitHub. Untuk men-deploy kumpulan pekerja, ikuti langkah-langkah berikut:
Clone repositori contoh ke komputer lokal Anda untuk mengambil contoh kode yang akan digunakan:
git clone https://github.com/GoogleCloudPlatform/cloud-run-samplesUbah ke direktori yang memuat kode contoh Cloud Run:
cd cloud-run-samples/github-runner/worker-pool-containerDeploy kumpulan pekerja:
gcloud beta run worker-pools deploy WORKER_POOL_NAME \ --region us-central1 \ --source . \ --instances 1 \ --set-env-vars GITHUB_REPO=GITHUB_REPO \ --set-secrets GITHUB_TOKEN=github_runner_token:latest \ --service-account $CREMA_SERVICE_ACCOUNT_NAME \ --memory 2Gi \ --cpu 4Ganti kode berikut:
- WORKER_POOL_NAME: nama kumpulan pekerja
- WORKER_POOL_LOCATION: region worker pool
- GITHUB_REPO: nama repositori GitHub
Jika ini adalah pertama kalinya Anda menggunakan deployment sumber Cloud Run di project ini, Cloud Run akan meminta Anda untuk membuat repositori Artifact Registry default.
Memahami contoh kode
Kumpulan pekerja dikonfigurasi dengan Dockerfile yang didasarkan pada image actions/runner yang dibuat GitHub:
Skrip helper ini berjalan saat container dimulai, mendaftarkan dirinya ke repositori yang dikonfigurasi sebagai instance sementara, menggunakan token yang Anda buat.
Menggunakan kumpulan pekerja untuk menerima tugas dari tindakan GitHub
Instance kumpulan pekerja Anda siap menerima tugas dari GitHub Actions.
Jika repo Anda belum memiliki tindakan GitHub, ikuti petunjuk di panduan memulai untuk membuat alur kerja pertama Anda.
Jika repo Anda memiliki tindakan GitHub, verifikasi bahwa Anda telah menyelesaikan penyiapan runner yang dihosting sendiri dengan memanggil tindakan GitHub di repositori Anda.
Jika tindakan GitHub Anda tidak menggunakan runner yang dihosting sendiri, ubah
tugas tindakan GitHub Anda dari nilai runs-on menjadi self-hosted.
Setelah mengonfigurasi tindakan untuk menggunakan runner yang dihosting sendiri, jalankan tindakan.
Konfirmasi bahwa tindakan berhasil diselesaikan di antarmuka GitHub.
Men-deploy layanan CREMA autoscaler
Anda men-deploy satu pekerja di kumpulan asli, yang memungkinkan pemrosesan satu tindakan dalam satu waktu. Bergantung pada penggunaan Continuous Integration (CI), Anda mungkin perlu menskalakan pool untuk menangani lonjakan pekerjaan yang harus dilakukan.
Setelah men-deploy kumpulan pekerja dengan peluncur GitHub yang aktif, konfigurasi penskalaan otomatis CREMA untuk menyediakan instance pekerja berdasarkan status tugas dalam antrean tindakan.
Implementasi ini memproses peristiwa
workflow_job. Saat Anda membuat tugas alur kerja, tugas tersebut akan menskalakan kumpulan pekerja, dan setelah tugas selesai, tugas tersebut akan menskalakannya kembali. Penskalaan tidak akan melampaui jumlah maksimum instance yang Anda konfigurasi, dan akan diskalakan ke nol saat semua tugas yang sedang berjalan telah selesai.
Anda dapat menyesuaikan CREMA berdasarkan workload Anda.
Mengonfigurasi penskala otomatis
Tutorial ini menggunakan Parameter Manager untuk menyimpan file konfigurasi YAML untuk CREMA.
Buat parameter di Pengelola Parameter untuk menyimpan versi parameter untuk CREMA:
PARAMETER_ID=crema-config PARAMETER_REGION=global gcloud parametermanager parameters create $PARAMETER_ID --location=$PARAMETER_REGION --parameter-format=YAMLBuat file YAML,
my-crema-config.yamldi direktori induk untuk menentukan konfigurasi penskala otomatis:apiVersion: crema/v1 kind: CremaConfig metadata: name: gh-demo spec: pollingInterval: 10 triggerAuthentications: - metadata: name: github-trigger-auth spec: gcpSecretManager: secrets: - parameter: personalAccessToken id: github_runner_token version: latest scaledObjects: - spec: scaleTargetRef: name: projects/PROJECT_ID/locations/us-central1/workerpools/WORKER_POOL_NAME triggers: - type: github-runner name: GITHUB_RUNNER metadata: owner: REPOSITORY_OWNER runnerScope: repo repos: REPOSITORY_NAME targetWorkflowQueueLength: 1 authenticationRef: name: github-trigger-auth advanced: horizontalPodAutoscalerConfig: behavior: scaleDown: stabilizationWindowSeconds: 10 policies: - type: Pods value: 100 periodSeconds: 10 scaleUp: stabilizationWindowSeconds: 10 policies: - type: Pods value: 2 periodSeconds: 10Ganti kode berikut:
- PROJECT_ID: Google Cloud project ID
- WORKER_POOL_NAME: nama pool pekerja yang Anda deploy
- GITHUB_RUNNER: nama runner GitHub yang Anda konfigurasi
- REPOSITORY_OWNER: pemilik repositori GitHub
- REPOSITORY_NAME: nama repositori GitHub
Upload file YAML lokal Anda sebagai versi parameter baru:
LOCAL_YAML_CONFIG_FILE=my-crema-config.yaml PARAMETER_VERSION=1 gcloud parametermanager parameters versions create $PARAMETER_VERSION \ --location=$PARAMETER_REGION \ --parameter=$PARAMETER_ID \ --payload-data-from-file=$LOCAL_YAML_CONFIG_FILE
Memberikan izin tambahan ke akun layanan kustom Anda
Untuk menskalakan kumpulan worker yang Anda tentukan dalam konfigurasi YAML, berikan izin berikut pada akun layanan kustom:
Beri akun layanan CREMA Anda izin untuk membaca dari Parameter Manager:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CREMA_SERVICE_ACCOUNT_NAME" \ --role="roles/parametermanager.parameterViewer"Berikan peran
roles/run.developerkepada akun layanan CREMA Anda di kumpulan pekerja:WORKER_POOL_NAME=WORKER_POOL_NAME WORKER_POOL_REGION=us-central1 gcloud beta run worker-pools add-iam-policy-binding $WORKER_POOL_NAME \ --region=$WORKER_POOL_REGION \ --member="serviceAccount:$CREMA_SERVICE_ACCOUNT_NAME" \ --role="roles/run.developer"Ganti WORKER_POOL_NAME dengan nama kumpulan worker.
Beri akun layanan CREMA Anda izin untuk menulis metrik:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CREMA_SERVICE_ACCOUNT_NAME" \ --role="roles/monitoring.metricWriter"Berikan peran pengguna akun layanan kepada akun layanan CREMA Anda:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CREMA_SERVICE_ACCOUNT_NAME" \ --role="roles/iam.serviceAccountUser"
Men-deploy layanan untuk menskalakan beban kerja Anda
Untuk men-deploy layanan guna menskalakan kumpulan pekerja, jalankan perintah berikut dengan image container yang telah dibuat sebelumnya:
SERVICE_NAME=my-crema-service
SERVICE_REGION=us-central1
CREMA_CONFIG_PARAM_VERSION=projects/$PROJECT_ID/locations/$PARAMETER_REGION/parameters/$PARAMETER_ID/versions/$PARAMETER_VERSION
IMAGE=us-central1-docker.pkg.dev/cloud-run-oss-images/crema-v1/autoscaler:1.0
gcloud beta run deploy $SERVICE_NAME \
--image=${IMAGE} \
--region=${SERVICE_REGION} \
--service-account="${CREMA_SERVICE_ACCOUNT_NAME}" \
--no-allow-unauthenticated \
--no-cpu-throttling \
--base-image=us-central1-docker.pkg.dev/serverless-runtimes/google-22/runtimes/java21 \
--labels=created-by=crema \
--set-env-vars="CREMA_CONFIG=${CREMA_CONFIG_PARAM_VERSION},OUTPUT_SCALER_METRICS=True"
Buat nilai rahasia webhook
Untuk membuat nilai rahasia guna mengakses webhook GitHub, lakukan hal berikut:
Buat secret Secret Manager untuk mengelola akses ke webhook GitHub Anda.
echo -n "WEBHOOK_SECRET" | gcloud secrets create github_webhook_secret --data-file=-Ganti WEBHOOK_SECRET dengan nilai string arbitrer.
Berikan akses ke secret untuk akun layanan penskala otomatis:
gcloud secrets add-iam-policy-binding github_webhook_secret \ --member "serviceAccount:$CREMA_SERVICE_ACCOUNT_NAME" \ --role "roles/secretmanager.secretAccessor"
Membuat webhook GitHub
Untuk membuat webhook GitHub, ikuti langkah-langkah berikut:
- Pastikan Anda login ke akun GitHub Anda.
- Buka repositori GitHub Anda.
- Klik Setelan.
- Di bagian Code and automation, klik Webhooks.
- Klik Tambahkan webhook.
Masukkan:
- Di Payload URL, masukkan URL layanan CREMA Cloud Run yang Anda deploy,
my-crema-service. - Untuk Jenis konten, pilih application/json.
- Untuk Secret, masukkan nilai WEBHOOK_SECRET yang Anda buat sebelumnya.
- Untuk SSL verification, pilih Enable SSL verification.
- Untuk Peristiwa mana yang ingin Anda gunakan untuk memicu webhook ini?, pilih Izinkan saya memilih setiap peristiwa.
- Dalam pemilihan peristiwa, pilih Tugas alur kerja. Batalkan pilihan opsi lainnya.
- Klik Tambahkan webhook.
- Di Payload URL, masukkan URL layanan CREMA Cloud Run yang Anda deploy,
Menguji layanan CREMA Anda
Untuk memverifikasi bahwa layanan penskalaan otomatis Anda berfungsi dengan benar, periksa tab Log layanan Cloud Run.
Anda akan melihat log berikut di log layanan Anda setiap kali metrik diperbarui:
Setiap pesan log diberi label dengan komponen yang memancarkannya.
[INFO] [METRIC-PROVIDER] Starting metric collection cycle
[INFO] [METRIC-PROVIDER] Successfully fetched scaled object metrics ...
[INFO] [METRIC-PROVIDER] Sending scale request ...
[INFO] [SCALER] Received ScaleRequest ...
[INFO] [SCALER] Current instances ...
[INFO] [SCALER] Recommended instances ...
Pembersihan
Agar tidak menimbulkan biaya tambahan pada akun Google Cloud Anda, hapus semua resource yang Anda deploy dengan tutorial ini.
Menghapus project
Jika Anda membuat project baru untuk tutorial ini, hapus project tersebut. Jika Anda menggunakan project yang ada dan perlu mempertahankannya tanpa perubahan yang Anda tambahkan dalam tutorial ini, hapus resource yang Anda buat untuk tutorial.
Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.
Untuk menghapus project:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Menghapus resource tutorial
Hapus layanan Cloud Run yang Anda deploy dalam tutorial ini. Layanan Cloud Run tidak menimbulkan biaya hingga menerima permintaan.
Untuk menghapus layanan Cloud Run, jalankan perintah berikut:
gcloud run services delete SERVICE-NAME
Ganti SERVICE-NAME dengan nama layanan Anda.
Anda juga dapat menghapus layanan Cloud Run dari konsolGoogle Cloud .
Hapus konfigurasi region default
gcloudyang Anda tambahkan selama penyiapan tutorial:gcloud config unset run/regionHapus konfigurasi project:
gcloud config unset projectHapus resource Google Cloud lain yang dibuat dalam tutorial ini:
Langkah berikutnya
- Pelajari lebih lanjut kumpulan pekerja Cloud Run.
- Pelajari demo, tutorial, dan contoh Cloud Run lainnya.
- Deploy layanan CREMA Anda menggunakan image container kustom yang Anda buat dari kode sumber dengan Cloud Build.