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, runner 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 pada instance kumpulan pekerja Cloud Run. Tutorial ini menunjukkan cara menskalakan kumpulan runner secara otomatis berdasarkan jumlah tugas yang berjalan dan tidak terjadwal.
Tujuan
Dalam tutorial ini, Anda akan:
Menambahkan runner GitHub yang dihosting sendiri untuk mendukung repositori GitHub, dan membuat secret Secret Manager untuk menyimpan token dan secret secara aman.
Men-deploy kumpulan pekerja Cloud Run ke Cloud Run dan menggunakan kumpulan pekerja untuk menerima tugas dari GitHub Actions.
Men-deploy layanan CREMA autoscaler untuk menskalakan kumpulan pekerja Anda.
Menguji layanan CREMA Anda dengan memverifikasi log.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloud yang dapat ditagih berikut Google Cloud:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Sebelum memulai
- Login keakun Anda. Google Cloud 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.
-
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.
Aktifkan Cloud Run, Secret Manager, Parameter Manager, Artifact Registry, dan Cloud Build API.
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (
roles/serviceusage.serviceUsageAdmin), yang berisi izinserviceusage.services.enable. Pelajari cara memberikan peran.- 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 Google Cloud project 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 frekuensi Anda memicu penskalaan. Untuk mengetahui informasi selengkapnya, perkirakan biaya dengan kalkulator harga.
Peran yang diperlukan
Untuk mendapatkan izin yang Anda perlukan untuk menyelesaikan tutorial, minta administrator Anda untuk memberi Anda peran IAM berikut di project Anda:
- Administrator Repositori Artifact Registry (
roles/artifactregistry.repoAdmin) - Editor Cloud Build (
roles/cloudbuild.builds.editor) - Admin Cloud Run (
roles/run.admin) - Create Service Accounts (
roles/iam.serviceAccountCreator) - Secret Manager Admin (
roles/secretmanager.admin) - Service Account User (
roles/iam.serviceAccountUser) - Pelanggan Service Usage (
roles/serviceusage.serviceUsageConsumer) - Storage Admin (
roles/storage.admin) - Parameter Manager Admin (
roles/parametermanager.admin)
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 hanya 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 yang dihosting sendiri runner 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.
Membuat token akses
Buat token akses GitHub untuk menambahkan dan menghapus runner 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 GitHub's Settings > Developer Settings > Personal Access Tokens > Tokens (classic).
- Klik Generate new token, lalu pilih Generate new token (classic).
- Untuk cakupan token, centang kotak repo.
- Klik Generate token.
- Salin token yang dibuat.
Untuk mengetahui informasi selengkapnya tentang token akses, lihat Persyaratan autentikasi dalam dokumentasi GitHub.
Membuat secret untuk token akses Anda menggunakan Secret Manager
Ambil token secret yang Anda buat pada langkah sebelumnya, dan simpan di Secret Manager. Untuk menetapkan 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 GitHub Actions. Kumpulan 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 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 kumpulan pekerja
- GITHUB_REPO: nama repo 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 GitHub Actions
Instance kumpulan pekerja Anda siap menerima tugas dari GitHub Actions.
Jika repo Anda belum memiliki GitHub Actions, ikuti petunjuk dalam panduan memulai untuk membuat alur kerja pertama Anda.
Jika repo Anda memiliki GitHub Actions, pastikan Anda telah menyelesaikan penyiapan runner yang dihosting sendiri dengan memanggil GitHub Action di repositori Anda.
Jika GitHub Action Anda tidak menggunakan runner yang dihosting sendiri, ubah
tugas GitHub Action Anda dari runs-on nilai menjadi self-hosted.
Setelah Anda dapat mengonfigurasi tindakan untuk menggunakan runner yang dihosting sendiri, jalankan tindakan tersebut.
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 kumpulan untuk menangani lonjakan pekerjaan yang harus dilakukan.
Setelah Anda men-deploy kumpulan pekerja dengan runner GitHub aktif, konfigurasikan autoscaler 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 meningkatkan skala kumpulan pekerja, dan setelah tugas selesai, tugas tersebut akan menurunkan skala lagi. Tindakan ini tidak akan menskalakan kumpulan di luar jumlah maksimum instance yang Anda konfigurasi, dan akan menskalakan ke nol saat semua tugas yang berjalan telah selesai.
Anda dapat mengadaptasi CREMA berdasarkan workload Anda.
Mengonfigurasi autoscaler
Tutorial ini menggunakan Parameter Manager untuk menyimpan file konfigurasi YAML untuk CREMA.
Buat parameter di Parameter Manager 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 autoscaler: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: ID Google Cloud project
- WORKER_POOL_NAME: nama kumpulan 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 pekerja 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"Beri akun layanan CREMA Anda peran
roles/run.developerdi kumpulan pekerja:WORKER_POOL_NAME=WORKER_POOL_NAME WORKER_POOL_REGION=us-central1 gcloud 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 pekerja.
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"Beri akun layanan CREMA Anda peran pengguna akun layanan:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CREMA_SERVICE_ACCOUNT_NAME" \ --role="roles/iam.serviceAccountUser"
Men-deploy layanan untuk menskalakan workload Anda
Untuk men-deploy layanan guna menskalakan kumpulan pekerja Anda, 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 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-24/runtimes/java25 \
--labels=created-by=crema \
--set-env-vars="CREMA_CONFIG=${CREMA_CONFIG_PARAM_VERSION},OUTPUT_SCALER_METRICS=True"
Menguji layanan CREMA Anda
Untuk memverifikasi bahwa layanan penskalaan otomatis Anda berfungsi dengan benar, periksa tab Logs 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
Untuk menghindari biaya tambahan ke Google Cloud akun 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 sudah 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:
- Di Google Cloud Konsol, buka halaman Manage resources.
- Pada daftar project, pilih project yang Anda ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Menghapus resource tutorial
Hapus layanan Cloud Run yang Anda deploy dalam tutorial ini. Layanan Cloud Run tidak dikenai biaya hingga menerima permintaan.
Untuk menghapus layanan Cloud Run Anda, jalankan perintah berikut:
gcloud run services delete SERVICE-NAME
Ganti SERVICE-NAME dengan nama layanan Anda.
Anda juga dapat menghapus layanan Cloud Run dari Google Cloud konsol.
Hapus konfigurasi region default
gcloudyang Anda tambahkan selama penyiapan tutorial:gcloud config unset run/regionHapus konfigurasi project:
gcloud config unset projectHapusresource lain yang dibuat dalam tutorial ini: Google Cloud
Langkah berikutnya
- Pelajari kumpulan pekerja Cloud Run lebih lanjut.
- Jelajahi demo, tutorial, dan contoh Cloud Run lainnya.
- Deploy layanan CREMA Anda menggunakan image container kustom yang Anda buat dari kode sumber dengan Cloud Build.