Halaman ini menjelaskan cara menghubungkan host Bitbucket Cloud ke Cloud Build.
Sebelum memulai
-
Enable the Cloud Build, Secret Manager, and Compute Engine APIs.
- Pastikan kode sumber berada di repositori Bitbucket Cloud.
- Pastikan repositori sumber Cloud Bitbucket memiliki
Dockerfile
atau file konfigurasi Cloud Build. - Instal Google Cloud CLI untuk menggunakan perintah
gcloud
.
Izin IAM yang diperlukan
Untuk mendapatkan izin yang diperlukan agar dapat terhubung,
minta administrator untuk memberi Anda
peran IAM Cloud Build Connection Admin (cloudbuild.connectionAdmin
)
di akun pengguna Anda.
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan 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 workspace Anda.
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 konsol Google Cloud.
Anda akan melihat halaman Repositori.
Di pemilih project, pilih project Google Cloud Anda.
Di bagian atas halaman, pilih tab Generasi ke-2.
Klik Create host connection untuk menghubungkan host baru ke Cloud Build.
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, pilih Bitbucket Cloud sebagai jenis host Anda.
Ruang kerja: Masukkan ID ruang kerja untuk repositori Bitbucket Cloud Anda.
Token akses: Masukkan token akses admin yang dibuat sebelumnya.
Token akses baca: Masukkan token akses baca yang Anda buat sebelumnya.
Klik Connect.
Koneksi baru akan muncul di halaman Repositori.
gcloud
Selesaikan langkah-langkah berikut untuk menyimpan kredensial Anda:
Simpan token akses Anda di Secret Manager di project Google Cloud 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 keterangan:
- ADMIN_TOKEN adalah token akses admin Anda.
- ADMIN_SECRET_NAME adalah nama yang ingin Anda berikan ke secret token akses admin di Secret Manager.
- READ_TOKEN adalah token akses baca Anda.
- READ_SECRET_NAME adalah nama yang ingin Anda berikan ke secret token akses baca 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:
echo -n ${ex.(random-uuid)} | gcloud secrets create WEBHOOK_SECRET_NAME --data-file=-
Jika tidak semua secret Anda berada dalam project yang sama, berikan akses ke agen layanan Cloud Build 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 keterangan:
- PROJECT_ID adalah project ID Google Cloud 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/1
Dengan keterangan:
- CONNECTION_NAME adalah nama yang ingin Anda berikan ke koneksi ke host Bitbucket Cloud.
- WORKSPACE_ID adalah ID Workspace untuk repositori Bitbucket Cloud Anda.
- PROJECT_ID adalah project ID Google Cloud 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 kepada 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 keterangan:
- PROJECT_ID adalah project ID Google Cloud Anda.
- PROJECT_NUMBER adalah nomor project Google Cloud Anda.
- 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 cakupan
repository:read
. - 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 Workspace untuk repositori Bitbucket Cloud Anda.
Langkah selanjutnya
- Pelajari cara terhubung ke repositori Bitbucket Cloud.
- Pelajari cara melihat hasil build.
- Pelajari cara melakukan deployment blue/green di Compute Engine.