Menghubungkan ke host GitLab Enterprise Edition

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

Sebelum memulai

  • Aktifkan Cloud Build dan Secret Manager API, jika ada yang belum diaktifkan.

    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.

    Aktifkan API

Persyaratan host

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

    Saat mengikuti petunjuk untuk menginstal instance Server GitLab Enterprise Edition, perhatikan 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 yang digunakan untuk menjangkau host Anda dari Google Cloud. Untuk mempelajari lebih lanjut, lihat dokumentasi GitLab tentang mengonfigurasi URL eksternal.

Izin IAM yang diperlukan

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

Untuk menambahkan peran yang diperlukan ke akun pengguna Anda, 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 Membangun 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 Token akses.

    Anda akan melihat halaman Personal Access Tokens.

  5. Buat token akses dengan cakupan api untuk digunakan dalam menghubungkan dan memutuskan hubungan 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 ke Cloud Build:

  1. Buka halaman Repositori di Google Cloud konsol.

    Buka halaman Repositori

    Anda akan melihat halaman Repositories.

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

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

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

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

  6. Di bagian Configure Connection, masukkan informasi berikut:

    • Region: Pilih region untuk koneksi Anda.

    • Name: Masukkan nama untuk koneksi Anda.

  7. Di bagian Detail host, pilih atau masukkan informasi berikut:

    • Host GitLab: Pilih Self-managed GitLab Enterprise Edition.

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

  8. Opsional: Jika Anda ingin mengelola kunci enkripsi yang digunakan untuk mengenkripsi token akses untuk repositori GitLab Enterprise Edition, buka bagian Encryption dan pilih kunci Cloud Key Management Service. Untuk mengetahui informasi selengkapnya, lihat Mengaktifkan kunci enkripsi yang dikelola pelanggan untuk Secret Manager.

  9. Di bagian Networking, di bagian Connection type, 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, konfigurasikan hal berikut:

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

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

        • Dalam project CURRENT_PROJECT
        • Dalam project lain
        • Masukkan secara manual
      3. Masukkan informasi berikut:

        • Project: Jika Anda memilih Pada project lain atau Masukkan secara manual, masukkan atau pilih ID project Google Cloud Anda 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.

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

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

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

  11. Klik Hubungkan.

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

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 secret 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 lain daripada yang akan Anda gunakan untuk membuat koneksi host, masukkan 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 GitLab Enterprise Edition ke Cloud Build.

Selesaikan langkah-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:

    • CONNECTION_NAME adalah nama untuk koneksi Anda di Cloud Build.
    • HOST_URI adalah URI instance GitLab Enterprise Edition Anda. Contoh, https://my-gle-server.net.
    • PROJECT_ID adalah Google Cloud project ID 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 secret Anda.
    • WEBHOOK_SECRET adalah rahasia webhook Anda.

Anda kini telah berhasil membuat koneksi GitLab Enterprise Edition.

Terraform

Anda dapat menghubungkan host GitLab Enterprise Edition ke Cloud Build menggunakan Terraform. Pelajari lebih lanjut Terraform di Google Cloud.

Dalam contoh berikut, cuplikan kode melakukan hal berikut:

  • Mengonfigurasi penyedia Terraform untuk Google Cloud resource
  • Membuat secret untuk menyimpan token akses pribadi GitLab Enterprise Edition Anda
  • Memberikan izin yang diperlukan ke 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 Cloud Build service agent
    resource "google_secret_manager_secret" "api-pat-secret" {
        project = "PROJECT_ID"
        secret_id = "GITLAB_PAT_API"
    
        replication {
            auto {}
         }
     }
    
     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 {
             auto {}
         }
    }
    
    resource "google_secret_manager_secret_version" "read-pat-secret-version" {
        secret = google_secret_manager_secret.read-pat-secret.id
        secret_data = "GITLAB_API_TOKEN"
    }
    
    resource "google_secret_manager_secret" "webhook-secret-secret" {
        project = "PROJECT_ID"
        secret_id = "WEBHOOK_SECRET"
    
        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" "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.api-pat-secret.project
      secret_id = google_secret_manager_secret.api-pat-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.read-pat-secret.project
      secret_id = google_secret_manager_secret.read-pat-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 {
            host_uri = "URI"
            authorizer_credential {
                user_token_secret_version = google_secret_manager_secret_version.api-pat-secret-version.id
            }
            read_authorizer_credential {
                 user_token_secret_version = google_secret_manager_secret_version.read-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
        ]
    }
    

Ganti kode berikut:

  • PROJECT_ID: Google Cloud Project ID Anda.
  • GITLAB_PAT_API: token akses pribadi Anda dengan akses api.
  • GITLAB_API_TOKEN: token akses pribadi Anda.
  • GITLAB_PAT_READ: token akses pribadi Anda dengan akses read_api.
  • WEBHOOK_SECRET: nama secret yang berisi nilai secret webhook Anda.
  • WEBHOOK_SECRET_VALUE: nilai rahasia webhook Anda.
  • PROJECT_NUMBER: nomor project Google Cloud Anda. Anda dapat menemukan nomor project di halaman Selamat Datang di konsol Google Cloud atau dengan menjalankan perintah berikut:

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'
    
  • REGION: region untuk koneksi Anda.

  • CONNECTION_NAME: nama untuk koneksi host GitLab Enterprise Edition di Cloud Build.

  • URI: URI koneksi Anda—misalnya, https://my-gitlab-enterprise-server.net.

Anda kini telah berhasil membuat koneksi GitLab Enterprise Edition.

Mengganti token akses GitLab Enterprise Edition yang lama atau sudah tidak berlaku

Ganti token akses Anda agar koneksi host Cloud Build dapat mempertahankan koneksinya ke repositori GitLab Enterprise Edition Anda. Jika token akses GitLab Enterprise Edition Anda berakhir masa berlakunya, koneksi host Cloud Build Anda akan terputus dari repositori GitLab Enterprise Edition-nya. Jika hal ini terjadi, Anda tidak dapat menonaktifkan koneksi atau menautkan repositori hingga Anda mengganti token yang sudah habis masa berlakunya. Selain itu, Anda akan melihat error dalam situasi berikut:

  • Halaman Detail koneksi untuk koneksi Anda menampilkan pesan error yang menyatakan Connection is disconnected due to an invalid or expired access token.

  • Jika Anda mencoba menautkan repositori ke koneksi yang memiliki token yang sudah tidak berlaku, Anda akan melihat pesan Token akses tidak valid. Mengklik Lihat koneksi akan mengarahkan Anda ke halaman Detail koneksi untuk koneksi dengan token yang sudah tidak berlaku.

Cloud Build memungkinkan Anda mengganti token akses dengan memasukkan nilai token baru dan menyimpannya di Secret Manager dalam versi secret terbaru untuk token tersebut. Untuk merotasi token akses Anda, lakukan hal berikut:

  1. Ganti setiap token akses di GitLab Enterprise Edition:

    1. Buka repositori GitLab Enterprise Edition yang terhubung ke koneksi host Cloud Build Anda.

    2. Ikuti petunjuk dalam dokumentasi GitLab untuk merotasi token akses. Saat Anda merotasi token, GitLab Enterprise Edition 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.

  2. Perbarui token akses Anda di Cloud Build:

    1. Buka halaman Detail koneksi untuk koneksi Anda.

    2. Pilih Perbarui token akses.

    3. Di menu Rotasi token, masukkan token baru Anda di kolom Token akses API dan Token akses baca.

    4. (Opsional): Jika Anda ingin koneksi selalu menggunakan versi terbaru secret untuk token, pilih Perbarui koneksi agar selalu menggunakan versi terbaru. Membiarkan opsi ini tidak dipilih dapat berguna jika koneksi Anda menggunakan nomor versi rahasia tertentu.

    5. Pilih Perbarui untuk menyimpan perubahan.

      Cloud Build menyimpan token akses baru sebagai versi terbaru secret Anda di Secret Manager.

Untuk mengetahui informasi selengkapnya, lihat Masa berlaku token akses di dokumentasi GitLab Enterprise Edition.

Langkah berikutnya