Halaman ini menjelaskan cara menghubungkan host GitLab Enterprise Edition ke Cloud Build.
Sebelum memulai
Aktifkan Cloud Build dan Secret Manager 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.
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 protokolHTTPtidak 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 untuk 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:
Login ke instance GitLab Enterprise Edition Anda.
Di halaman GitLab Enterprise Edition untuk instance Anda, klik avatar Anda di pojok kanan atas.
Klik Edit profil.
Di sidebar kiri, pilih Token akses.
Anda akan melihat halaman Token Akses Pribadi.
Buat token akses dengan cakupan
apiuntuk digunakan dalam menghubungkan dan memutuskan koneksi repositori.Buat token akses dengan cakupan
read_apiuntuk memastikan repositori Cloud Build dapat mengakses kode sumber di repositori.
Konsol
Untuk menghubungkan host GitLab Enterprise Edition ke Cloud Build:
Buka halaman Repositori di Google Cloud konsol.
Anda akan melihat halaman Repositori.
Di bagian atas halaman, pilih tab 2nd gen.
Di pemilih project di panel atas, pilih project Anda Google Cloud .
Klik Buat koneksi host untuk menghubungkan host baru ke Cloud Build.
Di panel kiri, pilih GitLab sebagai penyedia sumber Anda.
Di bagian Konfigurasi Koneksi, masukkan informasi berikut:
Region: Pilih region untuk koneksi Anda.
Nama: Masukkan nama untuk koneksi Anda.
Di bagian Detail host, pilih atau masukkan informasi berikut:
Host GitLab: Pilih GitLab Enterprise Edition yang dikelola sendiri.
URL Host: Masukkan URL host untuk koneksi Anda. Misalnya,
https://my-gle-server.net.
Opsional: Jika Anda ingin mengelola kunci enkripsi yang digunakan untuk mengenkripsi token akses untuk repositori GitLab Enterprise Edition, buka bagian Enkripsi dan pilih kunci Cloud Key Management Service. Untuk mengetahui informasi selengkapnya, lihat Mengaktifkan kunci enkripsi yang dikelola pelanggan untuk Secret Manager.
Di bagian Jaringan, di bagian Jenis koneksi, 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:
Sertifikat CA: Klik Browse untuk mengupload sertifikat yang ditandatangani sendiri.
Di bagian Layanan Direktori Layanan, pilih lokasi untuk layanan Anda:
- Di project CURRENT_PROJECT
- Di project lain
- Masukkan secara manual
Masukkan informasi berikut:
Project: Jika Anda memilih Di project lain atau Masukkan secara manual, 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.
Namespace: Pilih namespace layanan Anda.
Layanan: Pilih nama layanan di namespace Anda.
Di bagian Token akses pribadi, masukkan informasi berikut:
Token akses API: Masukkan token dengan akses cakupan
api. Token ini digunakan untuk menghubungkan dan memutuskan koneksi repositori.Token akses API baca: Masukkan token dengan akses cakupan
read_api. 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 koneksi host, Cloud Build juga akan membuat rahasia webhook atas nama Anda. Anda dapat melihat dan mengelola rahasia di halaman Secret Manager. Anda dapat melihat dan mengelola rahasia di halaman Secret Manager.
gcloud
Sebelum menghubungkan host GitLab Enterprise Edition ke Cloud Build, selesaikan langkah-langkah berikut untuk menyimpan kredensial Anda:
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=-Jika Anda menyimpan rahasia di project Google Cloud lain selain yang akan digunakan 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:
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_VERSIONDengan:
- CONNECTION_NAME adalah nama untuk koneksi Anda di Cloud Build.
- HOST_URI adalah URI instance GitLab Enterprise Edition Anda. Misalnya,
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 rahasia 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 Terraform lebih lanjut di Google Cloud.
Dalam contoh berikut, cuplikan kode melakukan hal berikut:
- Mengonfigurasi penyedia Terraform untuk Google Cloud resource
- Membuat rahasia untuk menyimpan token akses pribadi GitLab Enterprise Edition Anda
- Memberikan izin yang diperlukan ke agen layanan Cloud Build untuk mengakses rahasia
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: project ID Anda Google Cloud .GITLAB_PAT_API: token akses pribadi Anda dengan aksesapi.GITLAB_API_TOKEN: token akses pribadi Anda.GITLAB_PAT_READ: token akses pribadi Anda dengan aksesread_api.WEBHOOK_SECRET: nama rahasia yang berisi nilai rahasia webhook Anda.WEBHOOK_SECRET_VALUE: nilai rahasia webhook Anda.PROJECT_NUMBER: nomor Google Cloud project Anda. Anda dapat menemukan nomor project di halaman Selamat Datang di Google Cloud konsol 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 Anda 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 yang masa berlakunya telah habis
Jika masa berlaku token akses GitLab Enterprise Edition Anda habis, koneksi host Cloud Build akan terputus dari repositori GitLab Enterprise Edition. Akibatnya, Anda akan melihat error dalam situasi berikut:
Saat Anda mencoba menautkan koneksi Cloud Build repositori GitLab Enterprise Edition, pesan
Failed to fetch repositories to link. Check that Cloud Build is still authorized to access data from the selected connectionakan muncul.Di halaman Pemicu, saat Anda mengklik Jalankan, halaman Jalankan pemicu akan terbuka dan menampilkan
Failed to list branches. You can still enter one manuallypesan.
Untuk mengganti token lama atau yang masa berlakunya telah habis untuk koneksi Anda, lakukan hal berikut:
Temukan rahasia yang terkait dengan koneksi host Anda:
Jalankan perintah berikut:
gcloud builds connections describe CONNECTION_PATH --region=REGIONDengan:
- CONNECTION_PATH adalah jalur koneksi host GitLab Enterprise Edition
Anda di Cloud Build, dalam format
projects/PROJECT_ID/locations/REGION/connections/CONNECTION_NAME. - REGION adalah region untuk koneksi Anda.
- CONNECTION_PATH adalah jalur koneksi host GitLab Enterprise Edition
Anda di Cloud Build, dalam format
Di output perintah, cari nilai kolom token pengguna Anda.
readAuthorizerCredential.userTokenSecretVersionmenampilkan nama Secret Manager dari tokenread_api, danauthorizerCredential.userTokenSecretVersionmenampilkan nama Secret Manager dari tokenapi. Nama ini disimpan sebagai rahasia di Secret Manager.
Ganti setiap token akses di GitLab Enterprise Edition:
Buka repositori GitLab Enterprise Edition yang terhubung ke koneksi host Cloud Build Anda.
Ikuti petunjuk dalam dokumentasi GitLab untuk mengganti token akses. Saat Anda mengganti token, GitLab Enterprise Edition akan membuat token baru dengan kredensial baru dan membatalkan versi token sebelumnya. Token yang diganti memiliki izin dan cakupan yang sama dengan token asli.
Salin ID token yang diganti.
Buat versi rahasia baru untuk setiap token:
Buka halaman Secret Manager di Google Cloud konsol:
Untuk setiap token yang Anda ganti, temukan nama rahasia yang Anda identifikasi di Langkah 1, klik Tindakan, lalu klik Tambahkan versi baru.
Di jendela Tambahkan versi baru , masukkan ID token yang diganti, lalu klik Tambahkan versi baru.
Langkah berikutnya
- Pelajari cara menghubungkan repositori GitLab Enterprise Edition.
- Pelajari cara mem-build dan men-deploy workload Anda ke Google Cloud menggunakan komponen CI/CD yang dikelola Google di pipeline GitLab Anda. Lihat GitLab di Google Cloud.