Menghubungkan ke host Pusat Data Bitbucket

Halaman ini menjelaskan cara menghubungkan host Bitbucket Data Center ke Cloud Build. Menghubungkan ke host Bitbucket Data Center mengintegrasikan repositori Bitbucket Data Center Anda dengan Cloud Build. Dengan cara ini, Anda dapat mengonfigurasi pemicu build untuk membangun repositori dari Pusat Data Bitbucket dan membangun repositori dari Pusat Data Bitbucket di jaringan pribadi.

Sebelum memulai

  • Enable the Cloud Build and Secret Manager APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

Izin IAM yang diperlukan

Untuk mendapatkan izin yang diperlukan untuk terhubung ke host Bitbucket Data Center Anda, 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 Pusat Data Bitbucket Anda dihosting di jaringan pribadi, lihat Membangun repositori dari Pusat Data Bitbucket di jaringan pribadi untuk mempelajari peran IAM tambahan yang diperlukan untuk mengonfigurasi koneksi host.

Membuat token akses pribadi

Sebelum membuat koneksi host untuk instance Pusat Data Bitbucket, buat token akses pribadi di Pusat Data Bitbucket dengan melakukan hal berikut:

  1. Login ke instance Bitbucket Data Center Anda.

  2. Ikuti petunjuk untuk membuat token akses HTTP untuk akun pengguna Anda.

    1. Buat token akses dengan cakupan admin repositori untuk digunakan saat menghubungkan dan memutuskan hubungan repositori.

    2. Buat token akses dengan cakupan repository read untuk memastikan repositori Cloud Build dapat mengakses kode sumber di repositori.

  3. Simpan nilai token Anda dengan aman. Anda akan menggunakannya untuk menghubungkan ke repositori Bitbucket Data Center.

Menghubungkan ke host Pusat Data Bitbucket

Konsol

Untuk menghubungkan host Bitbucket Data Center ke Cloud Build:

  1. Buka halaman Repositori di Google Cloud konsol.

    Buka halaman Repositori

  2. Di bagian atas halaman, pilih tab Generasi ke-2.

  3. Di pemilih project di panel atas, pilih Google Cloud project Anda.

  4. Klik Buat koneksi host untuk menghubungkan host baru ke Cloud Build.

  5. Di panel kiri, pilih Bitbucket sebagai penyedia sumber Anda.

  6. Di bagian Configure Connection, masukkan informasi berikut:

    1. Region: Pilih region untuk koneksi Anda. Anda harus menentukan wilayah. Koneksi Anda tidak dapat ada secara global.

    2. Name: Masukkan nama untuk koneksi Anda.

  7. Di bagian Host details, pilih atau masukkan informasi berikut:

    1. Host Bitbucket: Pilih Pusat Data Bitbucket sebagai host Anda.

    2. URL host: Masukkan URL host Bitbucket Data Center Anda.

  8. Di bagian Networking, pilih salah satu opsi berikut:

    1. Internet publik: Pilih opsi ini jika instance Anda dapat diakses menggunakan internet publik.

    2. Jaringan pribadi: Pilih opsi ini jika instance Anda dihosting di jaringan pribadi.

      1. 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.

      2. Di bagian Layanan Service Directory, pilih lokasi layanan Anda. Anda dapat menerima project ID yang telah diisi otomatis atau menentukan project lain.

        1. Pilih project layanan Anda. Anda dapat menerima project yang telah diisi sebelumnya, memilih Dalam project lain untuk menjelajah, atau memilih Masukkan secara manual.

          Jika Anda memilih Masukkan secara manual, lalu masukkan informasi berikut:

          • Project: Masukkan atau pilih project ID Anda dari menu drop-down. Google Cloud

          • Region: Kolom ini telah memilih region koneksi Anda. Region yang ditentukan untuk layanan Anda harus cocok dengan region yang terkait dengan koneksi Anda.

        2. Namespace: Pilih namespace layanan Anda.

        3. Layanan: Pilih nama layanan di namespace Anda.

  9. Di bagian Token akses HTTP, masukkan informasi berikut:

    1. Token akses admin: Masukkan token dengan akses cakupan admin repositori. Token ini digunakan untuk menghubungkan dan memutuskan hubungan repositori.

    2. Token akses baca: Masukkan token dengan akses cakupan baca repositori. Pemicu Cloud Build menggunakan token ini untuk mengakses kode sumber di repositori.

  10. Klik Hubungkan.

    Setelah mengklik tombol Connect, token akses pribadi Anda akan disimpan dengan aman di Secret Manager. Setelah terhubung ke host Bitbucket Data Center, Cloud Build akan membuat rahasia webhook atas nama Anda. Anda dapat melihat dan mengelola secret di halaman Secret Manager.

gcloud

  1. Simpan token Anda di Secret Manager.

  2. 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=-
    
  3. Jika Anda menyimpan rahasia 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 Pusat Data Bitbucket ke Cloud Build.

  1. Jalankan perintah berikut untuk membuat koneksi Bitbucket Data Center:

    gcloud builds connections create bitbucket-data-center 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 Pusat Data Bitbucket Anda di Cloud Build.
    • HOST_URI adalah URI instance Pusat Data Bitbucket 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 Pusat Data Bitbucket 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 Pusat Data Bitbucket.

    // 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_data_center_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.
  • READ_TOKEN_NAME adalah nama token Anda dengan cakupan repository:read.
  • READ_TOKEN_VALUE adalah nilai READ_TOKEN_NAME.
  • WEBHOOK_SECRET_NAME adalah nama rahasia webhook Anda.
  • WEBHOOK_SECRET_VALUE adalah nilai WEBHOOK_SECRET_NAME.
  • REGION adalah region untuk koneksi Anda.
  • CONNECTION_NAME adalah nama untuk koneksi host Pusat Data Bitbucket di Cloud Build.
  • BITBUCKET_URI adalah URI instance Pusat Data Bitbucket Anda.

Mengganti token akses Pusat Data Bitbucket yang lama atau sudah tidak berlaku

Jika token akses Pusat Data Bitbucket Anda berakhir, koneksi host Cloud Build Anda akan terputus dari repositori Pusat Data Bitbucket-nya. Akibatnya, Anda akan melihat error dalam situasi berikut:

  • Saat Anda mencoba menautkan koneksi Cloud Build repositori Bitbucket Data Center, pesan Failed to fetch repositories to link. Check that Cloud Build is still authorized to access data from the selected connection akan muncul.

  • Di halaman Pemicu, saat Anda mengklik Jalankan, halaman Jalankan pemicu akan terbuka dan menampilkan pesan Failed to list branches. You can still enter one manually

Untuk mengganti token lama atau yang sudah habis masa berlakunya untuk koneksi Anda, lakukan hal berikut:

  1. Temukan rahasia yang terkait dengan koneksi host Anda:

    1. Jalankan perintah berikut:

      gcloud builds connections describe CONNECTION_PATH --region=REGION
      

      Dengan:

      • CONNECTION_PATH adalah jalur koneksi host Bitbucket Data Center Anda di Cloud Build, dalam format projects/PROJECT_ID/locations/REGION/connections/CONNECTION_NAME.
      • REGION adalah region untuk koneksi Anda.
    2. Di output perintah, cari nilai kolom token pengguna Anda. readAuthorizerCredential.userTokenSecretVersion menampilkan nama Secret Manager untuk token Read, dan authorizerCredential.userTokenSecretVersion menampilkan nama Secret Manager untuk token Admin. Nama ini disimpan sebagai secret di Secret Manager.

  2. Ganti setiap token akses di Pusat Data Bitbucket:

    1. Buka repositori Pusat Data Bitbucket yang terhubung ke koneksi host Cloud Build Anda.

    2. Ikuti petunjuk dalam dokumentasi Bitbucket untuk mengganti token akses. Saat Anda merotasi token, Bitbucket Data Center akan membuat token baru dengan kredensial baru dan membatalkan validasi token versi sebelumnya. Token yang dirotasi memiliki izin dan cakupan yang sama dengan token asli.

    3. Salin ID token yang dirotasi.

  3. Buat versi rahasia baru untuk setiap token:

    1. Buka halaman Secret Manager di konsol Google Cloud :

      Buka halaman Secret Manager

    2. Untuk setiap token yang Anda ganti, temukan nama rahasia yang Anda identifikasi di Langkah 1, lalu klik Actions, kemudian klik Add new version.

    3. Di jendela Add new version, masukkan ID token yang dirotasi, lalu klik Add new version.

Untuk mengetahui informasi selengkapnya, lihat Token akses dan Meningkatkan keamanan di Bitbucket: Memperkenalkan masa berlaku untuk token akses dalam dokumentasi Bitbucket Data Center.

Langkah berikutnya