Halaman ini menjelaskan cara menghubungkan host Bitbucket Server ke Cloud Build. Menghubungkan ke host Bitbucket Server mengintegrasikan repositori Bitbucket Server Anda dengan Cloud Build. Dengan begitu, Anda dapat mengonfigurasi pemicu build untuk membangun repositori dari Bitbucket Server dan membangun repositori dari Bitbucket Server di jaringan pribadi.
Sebelum memulai
Aktifkan Cloud Build, Secret Manager, dan Compute Engine 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.
- Siapkan kode sumber Anda di repositori Bitbucket Server.
- Memiliki
Dockerfileatau file konfigurasi Cloud Build di repositori sumber Bitbucket Server Anda. - Jika Anda belum menginstal instance Bitbucket Server, lihat Panduan penginstalan Bitbucket Server untuk mendapatkan petunjuk.
Izin IAM yang diperlukan
Untuk mendapatkan izin yang
diperlukan untuk terhubung ke host Bitbucket Server, minta administrator Anda untuk memberi Anda peran IAM Cloud Build Connection Admin (roles/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.
Jika instance Bitbucket Server Anda dihosting di jaringan pribadi, lihat Membangun repositori dari Bitbucket Server di jaringan pribadi untuk mempelajari peran IAM tambahan yang diperlukan untuk mengonfigurasi koneksi host.
Membuat token akses pribadi
Sebelum membuat koneksi host untuk instance Bitbucket Server, buat token akses pribadi di Bitbucket Server dengan melakukan langkah-langkah berikut:
Login ke instance Bitbucket Server Anda.
Ikuti petunjuk untuk membuat token akses HTTP untuk akun pengguna Anda.
Buat token akses dengan cakupan admin repositori untuk digunakan saat menghubungkan dan memutuskan hubungan repositori.
Buat token akses dengan cakupan repository read untuk memastikan repositori Cloud Build dapat mengakses kode sumber di repositori.
Simpan nilai token Anda dengan aman. Anda akan menggunakannya untuk menghubungkan ke repositori Bitbucket Server Anda.
Menghubungkan ke host Bitbucket Server
Konsol
Untuk menghubungkan host Bitbucket Server ke Cloud Build:
Buka halaman Repositori di Google Cloud konsol.
Di bagian atas halaman, pilih tab Generasi ke-2.
Di pemilih project di panel atas, pilih Google Cloud project Anda.
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. Anda harus menentukan wilayah. Koneksi Anda tidak dapat ada secara global.
Name: Masukkan nama untuk koneksi Anda.
Di bagian Detail host, pilih atau masukkan informasi berikut:
Host Bitbucket: Pilih Pusat Data Bitbucket sebagai host Anda.
URL Host: Masukkan URL host Anda.
Opsional: Jika Anda ingin mengelola kunci enkripsi yang digunakan untuk mengenkripsi token akses untuk repositori Bitbucket Server 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 Networking, pilih salah satu opsi berikut:
Internet publik: Pilih opsi ini jika instance Anda dapat diakses menggunakan internet publik.
Jaringan pribadi: Pilih opsi ini jika instance Anda dihosting di jaringan pribadi. Kemudian, konfigurasi hal berikut:
Sertifikat CA: Sertifikat yang ditandatangani sendiri. Klik Browse untuk membuka sertifikat dari komputer lokal Anda.
Ukuran sertifikat Anda tidak boleh lebih dari 10 KB dan harus dalam format PEM (
.pem,.cer,atau.crt). Jika Anda mengosongkan kolom ini, Cloud Build akan menggunakan sertifikat dari kumpulan sertifikat default.Di bagian Layanan Direktori Layanan, pilih lokasi untuk layanan Anda:
- Dalam project CURRENT_PROJECT
- Dalam project lain
- Masukkan secara manual
Masukkan informasi berikut:
Project: Jika Anda memilih Pada project lain atau Masukkan secara manual, masukkan atau pilih ID project Google Cloud dari menu drop-down.
Region: Kolom ini telah memilih region koneksi Anda. Region yang ditentukan untuk layanan Anda harus cocok dengan region yang terkait dengan koneksi Anda.
Namespace: Pilih namespace layanan Anda.
Layanan: Pilih nama layanan di namespace Anda.
Di bagian Token akses HTTP, masukkan informasi berikut:
Token akses admin: Masukkan token dengan akses cakupan admin repositori. Token ini digunakan untuk menghubungkan dan memutuskan hubungan repositori.
Token akses baca: Masukkan token dengan akses cakupan baca repositori. Pemicu Cloud Build menggunakan token ini untuk mengakses kode sumber di repositori.
Klik Hubungkan.
Setelah mengklik tombol Hubungkan, token akses pribadi Anda akan disimpan dengan aman di Secret Manager. Setelah terhubung ke host Bitbucket Server, Cloud Build akan membuat rahasia webhook untuk Anda. Anda dapat melihat dan mengelola secret di halaman Secret Manager.
gcloud
Buat secret webhook di Secret Manager dengan menjalankan perintah berikut, dengan WEBHOOK_SECRET adalah nama yang ingin Anda berikan ke secret webhook Anda:
cat /proc/sys/kernel/random/uuid | tr -d '\n' | gcloud secrets create WEBHOOK_SECRET --data-file=-Jika Anda menyimpan secret di project Google Cloud lain daripada project yang akan digunakan untuk membuat koneksi host, jalankan perintah berikut untuk memberikan akses project Anda ke agen layanan Cloud Build:
PN=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)") CLOUD_BUILD_SERVICE_AGENT="service-${PN}@gcp-sa-cloudbuild.iam.gserviceaccount.com" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:${CLOUD_BUILD_SERVICE_AGENT}" \ --role="roles/secretmanager.admin"Dengan:
- PROJECT_ID adalah Google Cloud project ID Anda.
Sekarang Anda dapat melanjutkan untuk menghubungkan host Bitbucket Server ke Cloud Build.
Jalankan perintah berikut untuk membuat koneksi Bitbucket Server:
gcloud builds connections create bitbucketserver CONNECTION_NAME \ --host-uri=HOST_URI \ --project=PROJECT_ID \ --region=REGION \ --authorizer-token-secret-version=projects/PROJECT_ID/secrets/ADMIN_TOKEN/versions/SECRET_VERSION \ --read-authorizer-token-secret-version=projects/PROJECT_ID/secrets/READ_TOKEN/versions/SECRET_VERSION \ --webhook-secret-secret-version=projects/PROJECT_ID/secrets/WEBHOOK_SECRET/versions/SECRET_VERSION ``` Where:- CONNECTION_NAME adalah nama untuk koneksi host Bitbucket Server Anda di Cloud Build.
- HOST_URI adalah URI instance Bitbucket Server Anda.
- PROJECT_ID adalah Google Cloud project ID Anda.
- REGION adalah region untuk koneksi Anda.
- ADMIN_TOKEN adalah nama token Anda dengan cakupan admin repositori.
- READ_TOKEN adalah nama token Anda dengan cakupan repository read.
- SECRET_VERSION adalah versi secret Anda.
- WEBHOOK_SECRET adalah rahasia webhook Anda.
Terraform
Anda dapat menghubungkan host Bitbucket Server 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 rahasia.
Membuat koneksi Bitbucket Server.
// 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 resource resource "google_cloudbuildv2_connection" "my-connection" { project = "PROJECT_ID" location = "REGION" name = "CONNECTION_NAME" bitbucket_server_config { host_uri = "BITBUCKET_URI" 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 Google Cloud Anda.
- ADMIN_TOKEN_NAME adalah nama token Anda dengan cakupan
repository:admin. - 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 rahasia webhook Anda.
- WEBHOOK_SECRET_VALUE adalah nilai WEBHOOK_SECRET_NAME Anda.
- REGION adalah region untuk koneksi Anda.
- CONNECTION_NAME adalah nama untuk koneksi host Bitbucket Server Anda di Cloud Build.
- BITBUCKET_URI adalah URI instance Pusat Data Bitbucket Anda.
Langkah berikutnya
- Pelajari cara menghubungkan repositori Bitbucket Server.
- Pelajari cara melakukan deployment biru-hijau di Compute Engine.