Menghubungkan ke host GitLab Enterprise Edition

Halaman ini menjelaskan cara menghubungkan host GitLab Enterprise Edition ke Cloud Build.

Sebelum memulai

  • Enable the Cloud Build and Secret Manager APIs.

    Enable the APIs

Persyaratan host

  • Jika Anda belum menginstal instance Server Edisi GitLab Enterprise, lihat panduan penginstalan dari GitLab Enterprise Edition untuk mengetahui petunjuknya.

    Saat mengikuti petunjuk penginstalan instance Server Edisi GitLab Enterprise, perhatikan hal-hal berikut:

    • Anda harus mengonfigurasi host untuk menangani protokol HTTPS. Host yang dikonfigurasi dengan protokol HTTP tidak didukung.

    • Anda harus mengonfigurasi host dengan URL yang sama dengan yang digunakan untuk menjangkau host dari Google Cloud. Untuk mempelajari lebih lanjut, lihat dokumentasi GitLab untuk mengonfigurasi URL eksternal.

Izin IAM yang diperlukan

Untuk menghubungkan host GitLab Enterprise Edition Anda, berikan peran Cloud Build Connection Admin (roles/cloudbuild.connectionAdmin) ke akun pengguna Anda.

Untuk menambahkan peran yang diperlukan ke akun pengguna, lihat Mengonfigurasi akses ke resource Cloud Build. Untuk mempelajari lebih lanjut peran IAM yang terkait dengan Cloud Build, lihat peran dan izin IAM.

Jika instance GitLab Enterprise Edition Anda dihosting di jaringan pribadi, lihat Membuat repositori dari GitLab Enterprise Edition di jaringan pribadi untuk mempelajari peran IAM tambahan yang diperlukan sebelum koneksi host.

Menghubungkan ke host GitLab Enterprise Edition

Sebelum membuat koneksi host untuk instance GitLab Enterprise Edition, Anda harus membuat token akses pribadi di GitLab Enterprise Edition dengan menyelesaikan langkah-langkah berikut:

  1. Login ke instance GitLab Enterprise Edition Anda.

  2. Di halaman GitLab Enterprise Edition untuk instance Anda, klik avatar Anda di pojok kanan atas.

  3. Klik Edit profil.

  4. Di sidebar kiri, pilih Access tokens.

    Anda akan melihat halaman Token Akses Pribadi.

  5. Buat token akses dengan cakupan api untuk digunakan dalam menghubungkan dan memutuskan sambungan repositori.

  6. Buat token akses dengan cakupan read_api untuk memastikan repositori Cloud Build dapat mengakses kode sumber di repositori.

Konsol

Untuk menghubungkan host GitLab Enterprise Edition Anda ke Cloud Build:

  1. Buka halaman Repositories di Konsol Google Cloud.

    Buka halaman Repositori

    Anda akan melihat halaman Repositories.

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

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

  4. Klik Create host connection untuk menghubungkan host baru ke Cloud Build.

  5. Di panel kiri, pilih GitLab sebagai penyedia sumber.

  6. Di bagian Configure Connection, masukkan informasi berikut:

    1. Region: Pilih region untuk koneksi Anda.

    2. Nama: Masukkan nama untuk koneksi Anda.

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

    1. Penyedia GitLab: Pilih GitLab Enterprise Edition yang dikelola sendiri sebagai penyedia Anda.

    2. URL Host: Masukkan URL host untuk koneksi Anda. Contoh, https://my-gle-server.net.

    3. Sertifikat CA: Klik Jelajahi untuk mengupload sertifikat yang ditandatangani sendiri.

    4. Di bagian Jenis koneksi, pilih salah satu opsi berikut:

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

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

      3. Di bagian Layanan Direktori Layanan, pilih lokasi untuk layanan Anda:

        • Dalam project your-project
        • Di project lain
        • Masukkan secara manual
        1. Jika Anda memilih In another project atau Enter manually, masukkan informasi berikut:

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

          • Region: Kolom ini memilih sebelumnya region koneksi Anda. Region yang ditetapkan 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.

  8. Di bagian Personal access tokens, masukkan informasi berikut:

    1. Token akses API: Masukkan token dengan akses cakupan api. Token ini digunakan untuk menghubungkan dan memutuskan koneksi repositori.

    2. Membaca token akses API: Masukkan token dengan akses cakupan read_api. Pemicu Cloud Build menggunakan token ini untuk mengakses kode sumber di repositori.

  9. Klik Connect.

    Setelah mengklik tombol Connect, token akses pribadi Anda disimpan dengan aman di Secret Manager. Setelah koneksi host, Cloud Build juga membuat rahasia webhook atas nama Anda. Anda dapat melihat dan mengelola rahasia di halaman Secret Manager. Anda dapat melihat dan mengelola secret Anda di halaman Secret Manager.

Anda telah berhasil membuat koneksi GitLab Enterprise Edition.

gcloud

Sebelum menghubungkan host GitLab Enterprise Edition ke Cloud Build, selesaikan langkah-langkah berikut untuk menyimpan kredensial Anda:

  1. Simpan token Anda di Secret Manager.

  2. Buat rahasia webhook di Secret Manager dengan menjalankan perintah berikut:

     cat /proc/sys/kernel/random/uuid | tr -d '\n' | gcloud secrets create my-gle-webhook-secret --data-file=-
    
  3. Jika Anda menyimpan secret di project Google Cloud selain di project yang akan digunakan untuk membuat koneksi host, masukkan perintah berikut untuk memberi project Anda akses 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 keterangan:

    • PROJECT_ID adalah ID project Google Cloud Anda.
    • CLOUD_BUILD_SERVICE_AGENT adalah akun layanan Cloud Build Anda.

Kini Anda dapat melanjutkan untuk menghubungkan host GitLab Enterprise Edition ke Cloud Build.

Selesaikan langkah berikut:

  1. Masukkan perintah berikut untuk membuat koneksi GitLab Enterprise Edition:

    gcloud builds connections create gitlab CONNECTION_NAME \
      --host-uri=HOST_URI \
      --project=PROJECT_ID \
      --region=REGION \
      --authorizer-token-secret-version=projects/PROJECT_ID/secrets/API_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
    

    Dengan keterangan:

    • CONNECTION_NAME adalah nama koneksi Anda.
    • HOST_URI adalah URI instance GitLab Enterprise Edition Anda. Contoh, https://my-gle-server.net.
    • PROJECT_ID adalah ID project Google Cloud Anda.
    • REGION adalah region untuk koneksi Anda.
    • API_TOKEN adalah nama token Anda dengan cakupan api.
    • READ_TOKEN adalah nama token Anda dengan cakupan read_api.
    • SECRET_VERSION adalah versi rahasia Anda.
    • WEBHOOK_SECRET adalah rahasia webhook Anda.

Anda telah berhasil membuat koneksi GitLab Enterprise Edition.

Terraform

Anda dapat menghubungkan host GitLab Enterprise Edition ke Cloud Build menggunakan Terraform.

Pada contoh berikut, cuplikan kode melakukan hal berikut:

  • Mengonfigurasi penyedia Terraform Google
  • Membuat rahasia untuk menyimpan token akses pribadi GitLab Enterprise Edition Anda
  • Memberikan izin yang diperlukan kepada Agen Layanan Cloud Build untuk mengakses secret
  • Membuat koneksi GitLab Enterprise Edition

    // Configure the Terraform Google provider
    terraform {
      required_providers {
        google = {}
      }
    }
    
    // Create secrets and grant permissions to the service sgent
    resource "google_secret_manager_secret" "api-pat-secret" {
        project = "PROJECT_ID"
        secret_id = "GITLAB_PAT_API"
    
        replication {
            automatic = true
         }
     }
    
     resource "google_secret_manager_secret_version" "api-pat-secret-version" {
         secret = google_secret_manager_secret.api-pat-secret.id
         secret_data = "GITLAB_API_TOKEN"
     }
    
     resource "google_secret_manager_secret" "read-pat-secret" {
         project = "PROJECT_ID"
         secret_id = "GITLAB_PAT_READ"
    
         replication {
             automatic = true
         }
    }
    
    resource "google_secret_manager_secret_version" "read-pat-secret-version" {
        secret = google_secret_manager_secret.pat-secret.id
        secret_data = "GITLAB_API_TOKEN"
    }
    
    resource "google_secret_manager_secret" "webhook-secret-secret" {
        project = "PROJECT_ID"
        secret_id = "WEBHOOK_SECRET"
    
        replication {
            automatic = true
        }
    }
    
    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" "serviceagent-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.private-key-secret.project
      secret_id = google_secret_manager_secret.private-key-secret.secret_id
      policy_data = data.google_iam_policy.serviceagent-secretAccessor.policy_data
    }
    
    resource "google_secret_manager_secret_iam_policy" "policy-rpak" {
      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.serviceagent-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.serviceagent-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"
    
        gitlab_config {
            authorizer_credential {
                user_token_secret_version = google_secret_manager_secret_version.pat-secret-version.id
            }
            read_authorizer_credential {
                 user_token_secret_version = google_secret_manager_secret_version.pat-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 ID project Google Cloud Anda.
  • GITLAB_PAT_API adalah token akses pribadi Anda dengan akses api.
  • GITLAB_API_TOKEN adalah token akses pribadi Anda.
  • GITLAB_PAT_READ adalah token akses pribadi Anda dengan akses read_api.
  • WEBHOOK_SECRET adalah nama rahasia yang berisi nilai rahasia webhook Anda.
  • WEBHOOK_SECRET_VALUE adalah nilai rahasia webhook Anda.
  • REGION adalah region untuk koneksi Anda.
  • CONNECTION_NAME adalah nama koneksi GitLab Enterprise Edition Anda.
  • URI adalah URI koneksi Anda. Contoh, https://my-gitlab-enterprise-server.net. Anda telah berhasil membuat koneksi GitLab Enterprise Edition.

Langkah selanjutnya