Halaman ini menjelaskan cara menghubungkan host Bitbucket Cloud ke Cloud Build.
Sebelum memulai
Aktifkan Cloud Build, Secret Manager, dan Compute Engine API.
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan izin
serviceusage.services.enable. Jika Anda membuat project, kemungkinan Anda sudah memiliki izin ini melalui peran Pemilik (roles/owner). Jika tidak, Anda bisa mendapatkan izin ini melalui peran Admin Penggunaan Layanan (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran.
- Pastikan kode sumber berada di repositori Bitbucket Cloud.
- Pastikan repositori sumber Bitbucket Cloud memiliki
Dockerfileatau a file konfigurasi Cloud Build. - Instal Google Cloud CLI untuk menggunakan perintah
gcloud.
Izin IAM yang diperlukan
Untuk memastikan memiliki izin yang diperlukan untuk terhubung,
minta administrator Anda untuk memberikan peran IAM Cloud Build Connection Admin (cloudbuild.connectionAdmin)
kepada di akun pengguna Anda.
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.
Administrator Anda mungkin juga dapat memberikan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Membuat token akses Bitbucket Cloud
Buat dua token akses berikut di Bitbucket Cloud:
- Token akses admin - untuk menghubungkan dan memutuskan koneksi repositori.
- Token akses baca - untuk mengizinkan Cloud Build mengakses kode sumber Anda.
Untuk membuat token ini, ikuti langkah-langkah berikut:
Login ke Bitbucket Cloud.
Ikuti petunjuk Bitbucket Cloud untuk membuat token akses yang ditautkan ke repositori, project, atau ruang kerja.
Berikan izin berikut:
Token akses admin:
- Repositori: Baca dan Admin
- Permintaan Pull: Baca
- Webhook: Baca dan Tulis
Token akses baca:
- Repositori: Baca
Salin token Anda untuk digunakan dalam prosedur berikut.
Menghubungkan ke host Bitbucket Cloud
Konsol
Hubungkan Cloud Build ke host Bitbucket Cloud Anda dengan menyelesaikan langkah-langkah berikut:
Buka halaman Repositories di Google Cloud konsol.
Anda akan melihat halaman Repositories.
Di pemilih project, pilih projectAnda Google Cloud .
Di bagian atas halaman, pilih tab generasi ke-2.
Klik Create host connection untuk menghubungkan host baru ke Cloud Build.
Di panel kiri, pilih Bitbucket sebagai penyedia sumber Anda.
Di bagian Configure Connection, masukkan informasi berikut:
Region: Pilih region untuk koneksi Anda.
Nama: Masukkan nama untuk koneksi Anda.
Di bagian Host details, masukkan informasi berikut:
Pilih Bitbucket Cloud sebagai jenis host Anda.
Ruang kerja: Masukkan ID ruang kerja untuk repositori Bitbucket Cloud Anda.
Opsional: Jika Anda ingin mengelola kunci enkripsi yang digunakan untuk mengenkripsi token akses untuk repositori Bitbucket Cloud Anda, buka bagian Encryption dan pilih kunci Cloud Key Management Service. Untuk mengetahui informasi selengkapnya, lihat Mengaktifkan kunci enkripsi yang dikelola pelanggan untuk Secret Manager.
Di bagian Access tokens, masukkan hal berikut:
Token akses admin: Masukkan token akses admin yang Anda buat sebelumnya.
Token akses baca: Masukkan token akses baca Anda yang dibuat sebelumnya.
Klik Connect.
Koneksi baru akan muncul di halaman Repositories.
gcloud
Selesaikan langkah-langkah berikut untuk menyimpan kredensial Anda:
Simpan token akses Anda di Secret Manager di Google Cloud project Anda dengan menjalankan perintah berikut:
echo -n ADMIN_TOKEN | gcloud secrets create ADMIN_SECRET_NAME --data-file=- echo -n READ_TOKEN | gcloud secrets create READ_SECRET_NAME --data-file=-Dengan:
- ADMIN_TOKEN adalah token akses admin Anda.
- ADMIN_SECRET_NAME adalah nama yang ingin Anda berikan ke secret token akses admin Anda di Secret Manager.
- READ_TOKEN adalah token akses baca Anda.
- READ_SECRET_NAME adalah nama yang ingin Anda berikan ke secret token akses baca Anda di Secret Manager.
Buat secret webhook di Secret Manager dengan menjalankan perintah berikut, dengan WEBHOOK_SECRET_NAME adalah nama yang ingin Anda berikan ke secret webhook Anda:
echo -n ${ex.(random-uuid)} | gcloud secrets create WEBHOOK_SECRET_NAME --data-file=-Jika secret Anda tidak berada dalam project yang sama, berikan akses ke agen layanan Cloud Build Anda dengan menjalankan perintah berikut:
PN=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)") CLOUD_BUILD_SERVICE_ACCOUNT="service-${PN}@gcp-sa-cloudbuild.iam.gserviceaccount.com" gcloud secrets add-iam-policy-binding ADMIN_SECRET_NAME \ --member="serviceAccount:${CLOUD_BUILD_SERVICE_ACCOUNT}" \ --role="roles/secretmanager.secretAccessor" gcloud secrets add-iam-policy-binding READ_SECRET_NAME \ --member="serviceAccount:${CLOUD_BUILD_SERVICE_ACCOUNT}" \ --role="roles/secretmanager.secretAccessor" gcloud secrets add-iam-policy-binding WEBHOOK_SECRET_NAME \ --member="serviceAccount:${CLOUD_BUILD_SERVICE_ACCOUNT}" \ --role="roles/secretmanager.secretAccessor"Dengan:
- PROJECT_ID adalah Google Cloud project ID Anda.
- ADMIN_SECRET_NAME adalah nama secret token admin Anda.
- READ_SECRET_NAME adalah nama secret token baca Anda.
- WEBHOOK_SECRET_NAME adalah nama secret webhook Anda.
Hubungkan Cloud Build ke host Bitbucket Cloud Anda menggunakan perintah berikut:
gcloud builds connections create bitbucket-cloud CONNECTION_NAME \ --workspace=WORKSPACE_ID \ --project=PROJECT_ID \ --region=REGION \ --authorizer-token-secret-version=projects/PROJECT_ID/secrets/ADMIN_SECRET_NAME/versions/latest \ --read-authorizer-token-secret-version=projects/PROJECT_ID/secrets/READ_SECRET_NAME/versions/latest \ --webhook-secret-secret-version=projects/PROJECT_ID/secrets/WEBHOOK_SECRET_NAME/versions/1Dengan:
- CONNECTION_NAME adalah nama yang ingin Anda berikan ke koneksi ke host Bitbucket Cloud Anda.
- WORKSPACE_ID adalah ID Ruang Kerja untuk repositori Bitbucket Cloud Anda.
- PROJECT_ID adalah Google Cloud project ID Anda.
- REGION adalah region untuk koneksi host Anda.
- ADMIN_SECRET_NAME adalah nama secret token admin Anda.
- READ_SECRET_NAME adalah nama secret token akses baca Anda.
- WEBHOOK_SECRET_NAME adalah nama secret webhook Anda.
Terraform
Anda dapat menghubungkan host Bitbucket Cloud ke Cloud Build menggunakan Terraform.
Dalam contoh berikut, cuplikan kode melakukan hal berikut:
- Mengonfigurasi penyedia Google Terraform.
- Membuat secret Secret Manager untuk menyimpan token Bitbucket.
- Memberikan izin yang diperlukan ke agen layanan Cloud Build untuk mengakses secret.
Membuat koneksi Bitbucket Cloud.
// Configure the Terraform Google provider terraform { required_providers { google = {} } } provider "google" { project = "PROJECT_ID" region = "REGION" } // Create secrets and grant permissions to the Cloud Build service agent resource "google_secret_manager_secret" "admin-token-secret" { project = "PROJECT_ID" secret_id = "ADMIN_TOKEN_NAME" replication { auto {} } } resource "google_secret_manager_secret_version" "admin-token-secret-version" { secret = google_secret_manager_secret.admin-token-secret.id secret_data = "ADMIN_TOKEN_VALUE" } resource "google_secret_manager_secret" "read-token-secret" { project = "PROJECT_ID" secret_id = "READ_TOKEN_NAME" replication { auto {} } } resource "google_secret_manager_secret_version" "read-token-secret-version" { secret = google_secret_manager_secret.read-token-secret.id secret_data = "READ_TOKEN_VALUE" } resource "google_secret_manager_secret" "webhook-secret-secret" { project = "PROJECT_ID" secret_id = "WEBHOOK_SECRET_NAME" replication { auto {} } } resource "google_secret_manager_secret_version" "webhook-secret-secret-version" { secret = google_secret_manager_secret.webhook-secret-secret.id secret_data = "WEBHOOK_SECRET_VALUE" } data "google_iam_policy" "p4sa-secretAccessor" { binding { role = "roles/secretmanager.secretAccessor" members = ["serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com"] } } resource "google_secret_manager_secret_iam_policy" "policy-pak" { project = google_secret_manager_secret.admin-token-secret.project secret_id = google_secret_manager_secret.admin-token-secret.secret_id policy_data = data.google_iam_policy.p4sa-secretAccessor.policy_data } resource "google_secret_manager_secret_iam_policy" "policy-rpak" { project = google_secret_manager_secret.read-token-secret.project secret_id = google_secret_manager_secret.read-token-secret.secret_id policy_data = data.google_iam_policy.p4sa-secretAccessor.policy_data } resource "google_secret_manager_secret_iam_policy" "policy-whs" { project = google_secret_manager_secret.webhook-secret-secret.project secret_id = google_secret_manager_secret.webhook-secret-secret.secret_id policy_data = data.google_iam_policy.p4sa-secretAccessor.policy_data } // Create the connection and add the repository resource resource "google_cloudbuildv2_connection" "my-connection" { project = "PROJECT_ID" location = "REGION" name = "CONNECTION_NAME" bitbucket_cloud_config { workspace = "WORKSPACE_ID" authorizer_credential { user_token_secret_version = google_secret_manager_secret_version.admin-token-secret-version.id } read_authorizer_credential { user_token_secret_version = google_secret_manager_secret_version.read-token-secret-version.id } webhook_secret_secret_version = google_secret_manager_secret_version.webhook-secret-secret-version.id } depends_on = [ google_secret_manager_secret_iam_policy.policy-pak, google_secret_manager_secret_iam_policy.policy-rpak, google_secret_manager_secret_iam_policy.policy-whs ] }
Dengan:
- PROJECT_ID adalah Google Cloud project ID Anda.
- PROJECT_NUMBER adalah nomor project Anda. Google Cloud
- ADMIN_TOKEN_NAME adalah nama token Anda dengan akses cakupan
webhook,repository,repository:admin, danpullrequest. - ADMIN_TOKEN_VALUE adalah nilai ADMIN_TOKEN_NAME Anda.
- READ_TOKEN_NAME adalah nama token Anda dengan
repository:readcakupan. - READ_TOKEN_VALUE adalah nilai READ_TOKEN_NAME Anda.
- WEBHOOK_SECRET_NAME adalah nama secret webhook Anda.
- WEBHOOK_SECRET_VALUE adalah nilai WEBHOOK_SECRET_NAME Anda.
- REGION adalah region untuk koneksi Anda.
- CONNECTION_NAME adalah nama koneksi Anda.
- WORKSPACE_ID adalah ID Ruang Kerja untuk repositori Bitbucket Cloud Anda.
Mengganti token akses Bitbucket Cloud yang lama atau yang masa berlakunya telah habis
Jika masa berlaku token akses Bitbucket Cloud Anda habis, koneksi host Cloud Build Anda akan terputus dari repositori Bitbucket Cloud-nya. Akibatnya, Anda akan melihat error dalam situasi berikut:
Saat Anda mencoba menautkan koneksi Cloud Build repositori Bitbucket Cloud, pesan
Failed to fetch repositories to link. Check that Cloud Build is still authorized to access data from the selected connectionakan muncul.Di halaman Triggers, saat Anda mengklik Run, halaman Run trigger akan terbuka dan menampilkan pesan
Failed to list branches. You can still enter one manually.
Untuk mengganti token lama atau yang masa berlakunya telah habis untuk koneksi Anda, lakukan hal berikut:
Temukan secret yang terkait dengan koneksi host Anda:
Jalankan perintah berikut:
gcloud builds connections describe CONNECTION_PATH --region=REGIONDengan:
- CONNECTION_PATH adalah jalur koneksi host Bitbucket Cloud
Anda di Cloud Build, dalam format
projects/PROJECT_ID/locations/REGION/connections/CONNECTION_NAME. - REGION adalah region untuk koneksi Anda.
- CONNECTION_PATH adalah jalur koneksi host Bitbucket Cloud
Anda di Cloud Build, dalam format
Di output perintah, cari nilai kolom token pengguna Anda.
readAuthorizerCredential.userTokenSecretVersionmenampilkan nama Secret Manager dari tokenRead, danauthorizerCredential.userTokenSecretVersionmenampilkan nama Secret Manager dari tokenAdmin. Nama ini disimpan sebagai secret di Secret Manager.
Ganti setiap token akses di Bitbucket Cloud:
Buka repositori Bitbucket Cloud yang terhubung ke koneksi host Cloud Build Anda.
Ikuti petunjuk dalam dokumentasi Bitbucket untuk mengganti token akses. Saat Anda mengganti token, Bitbucket Cloud akan membuat token baru dengan kredensial baru dan membatalkan validitas token versi sebelumnya. Token yang diganti memiliki izin dan cakupan yang sama dengan token asli.
Salin ID token yang diganti.
Buat versi secret baru untuk setiap token:
Buka halaman Secret Manager di Google Cloud konsol:
Untuk setiap token yang Anda ganti, temukan nama secret yang Anda identifikasi di Langkah 1 dan klik Actions, lalu klik Add new version.
Di jendela Add new version , masukkan ID token yang diganti, lalu klik Add new version.
Langkah berikutnya
- Pelajari cara menghubungkan ke repositori Bitbucket Cloud.
- Pelajari cara melihat hasil build.
- Pelajari cara melakukan deployment biru/hijau di Compute Engine.