Membuat repositori virtual

Halaman ini menjelaskan cara membuat repositori virtual Artifact Registry.

Repositori virtual berfungsi sebagai titik akses tunggal untuk mendownload, menginstal, atau men-deploy artefak dalam format yang sama dari satu atau beberapa repositori upstream. Repositori upstream dapat berupa repositori standar atau jarak jauh Artifact Registry.

Mode repositori lainnya adalah:

  • Standar: Mode repositori default. Anda mengupload atau memublikasikan artefak seperti paket pribadi secara langsung ke repositori standar. Meskipun Anda dapat mendownload langsung dari setiap repositori standar, mengakses grup repositori dengan repositori virtual akan menyederhanakan konfigurasi alat.
  • Remote (khusus repositori paket bahasa): Cache pull-through untuk artefak di repositori publik seperti Maven Central atau PyPI. Library ini berfungsi sebagai proxy untuk repositori publik sehingga Anda dapat lebih mengontrol dependensi eksternal Anda.

Untuk informasi selengkapnya tentang cara kerja repositori virtual, lihat Ringkasan repositori virtual.

Sebelum memulai

Aktifkan Artifact Registry, termasuk mengaktifkan Artifact Registry API dan menginstal Google Cloud CLI versi terbaru.

Peran yang diperlukan

Untuk mendapatkan izin yang Anda perlukan untuk mengelola repositori, minta administrator untuk memberi Anda peran IAM berikut:

  • Buat repositori virtual dan berikan akses ke masing-masing repositori: Artifact Registry Repository Administrator (roles/artifactregistry.repoAdmin) pada project Google Cloud
  • Memberikan akses ke repositori pada level project: Project IAM Admin (roles/resourcemanager.projectIamAdmin) pada project Google Cloud
  • Berikan akses ke repositori pada level folder: Folder Admin (roles/resourcemanager.folderAdmin) di folder
  • Memberikan akses ke repositori di tingkat organisasi: Organization Admin (roles/resourcemanager.organizationAdmin) di organisasi Google Cloud

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Jika repositori upstream berada di project lain, administrator dalam project dengan repositori upstream harus memiliki izin untuk mengelola akses ke repositori tersebut.

Membuat repositori upstream

Sebelum menyiapkan repositori virtual, buat repositori upstream yang ingin Anda sediakan dengan repositori virtual.

  1. Buat repositori upstream di region Google Cloud yang sama dengan tempat Anda berencana membuat repositori virtual.

  2. Repositori virtual menggunakan Agen Layanan Artifact Registry untuk mengautentikasi ke repositori upstream. Anda harus memberi agen layanan akses baca ke repositori upstream.

    Anda dapat memberikan peran Artifact Registry Reader kepada agen layanan Artifact Registry di level project, sehingga Anda tidak perlu memberikan akses ke repositori upstream individual.

    Di setiap project dengan repositori upstream, jalankan perintah berikut:

    gcloud projects add-iam-policy-binding UPSTREAM_PROJECT_ID \
        --member serviceAccount:service-VIRTUAL-REPO-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com \
        --role roles/artifactregistry.reader
    

    Dari mana

    • UPSTREAM_PROJECT_ID adalah ID project Google Cloud dengan repositori upstream.
    • VIRTUAL_REPO_PROJECT_NUMBER adalah nomor project project Google Cloud untuk repositori virtual Anda.

    Atau, jika Anda ingin memberikan peran dengan cakupan yang lebih sempit kepada agen layanan, tambahkan izin artifactregistry.repositories.readViaVirtualRepository ke peran khusus, lalu berikan peran tersebut kepada agen layanan.

    Untuk mengetahui informasi selengkapnya tentang memberikan izin, lihat dokumentasi kontrol akses.

Membuat repositori virtual

Saat membuat repositori, Anda harus mengonfigurasi setelan berikut yang tidak dapat diubah setelah repositori dibuat:

  • Format artefak.
  • Mode repositori, jika beberapa mode tersedia untuk format yang dipilih.
  • Lokasi repositori.
  • Enkripsi dengan kunci yang dikelola Google atau kunci enkripsi yang dikelola pelanggan. Artifact Registry menggunakan kunci enkripsi yang dikelola Google secara default.

Artifact Registry menerapkan batasan kebijakan organisasi yang mengharuskan CMEK untuk mengenkripsi resource atau membatasi kunci Cloud KMS mana yang dapat digunakan untuk perlindungan CMEK.

Membuat repositori virtual menggunakan konsol Google Cloud

  1. Buka halaman Repositories di Konsol Google Cloud.

    Buka halaman Repositori

  2. Klik Create Repository.

  3. Tentukan nama repositori. Untuk setiap lokasi repositori dalam sebuah project, nama repositori harus unik.

  4. Pilih format repositori.

  5. Di bagian Repository mode, pilih Virtual.

  6. Pada bagian Virtual Repository Upstreams, klik Add Upstream untuk menambahkan repositori upstream.

    • Repositori upstream dapat berupa repositori standar, jarak jauh, atau virtual.
    • Repositori upstream harus berada di lokasi yang sama dengan repositori virtual, tetapi dapat berada di project Google Cloud yang berbeda.
    • Repositori upstream harus memiliki format artefak yang sama dengan repositori virtual.

    Tentukan prioritas dan nama kebijakan untuk setiap repositori upstream. Nilai prioritas yang lebih tinggi akan lebih diutamakan daripada nilai yang lebih rendah. Sisakan spasi di antara nilai prioritas sehingga ada fleksibilitas untuk menambahkan repositori upstream dengan prioritas yang ada di antara nilai yang sudah ada.

  7. Di bagian Location Type, pilih lokasi untuk repositori:

    1. Pilih jenis lokasi: Region atau Multi-Region. Daftar perubahan lokasi untuk mencerminkan pilihan Anda.

    2. Di daftar Region atau Multi-region, pilih lokasi.

    Untuk mengetahui informasi tentang jenis lokasi dan lokasi yang didukung, lihat Lokasi repositori

  8. Tambahkan deskripsi untuk repositori. Deskripsi membantu mengidentifikasi tujuan repositori dan jenis artefak yang ada di dalamnya.

    Jangan sertakan data sensitif karena deskripsi repositori tidak dienkripsi.

  9. Jika Anda ingin menggunakan label untuk mengatur repositori, klik Add Label dan masukkan pasangan nilai kunci untuk label tersebut. Anda dapat menambahkan, mengedit, atau menghapus label setelah membuat repositori.

  10. Di bagian Enkripsi, pilih mekanisme enkripsi untuk repositori.

    • Kunci yang dikelola Google - Enkripsi konten repositori dengan kunci enkripsi yang dikelola Google.
    • Kunci yang dikelola pelanggan - Enkripsi konten repositori dengan kunci yang Anda kontrol melalui Cloud Key Management Service. Untuk mengetahui petunjuk penyiapan kunci, lihat Menyiapkan CMEK untuk repositori.
  11. Klik Create.

Artifact Registry membuat repositori dan menambahkannya ke daftar repositori.

Setelah Anda membuat repositori:

Membuat repositori virtual menggunakan gcloud CLI

Untuk membuat repositori virtual, tentukan repositori upstream Anda dalam file kebijakan, lalu buat repositori menggunakan file kebijakan.

  1. Buat file kebijakan upstream dalam format JSON dengan setelan berikut:

    [{
    "id" : "POLICY_ID",
    "repository" : "UPSTREAM_REPOSITORY_RESOURCE_NAME",
    "priority" : PRIORITY
    }, {...}]
    
    • POLICY_ID adalah nama untuk kebijakan. Setiap repositori upstream dalam kebijakan harus memiliki ID kebijakan yang unik.
    • UPSTREAM_REPO_RESOURCE_NAME adalah nama repositori upstream dalam format:

      projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY
      
      • Repositori upstream dapat berupa repositori standar, jarak jauh, atau virtual.
      • Repositori upstream harus berada di lokasi yang sama dengan repositori virtual, tetapi dapat berada di project Google Cloud yang berbeda.
      • Repositori upstream harus memiliki format artefak yang sama dengan repositori virtual.
    • PRIORITY adalah bilangan bulat yang menunjukkan prioritas untuk repositori upstream. Nilai prioritas yang lebih tinggi lebih diutamakan daripada nilai yang lebih rendah.

    Contoh berikut menunjukkan file kebijakan bernama policies.json dengan empat repositori upstream. upstream1 memiliki nilai tertinggi untuk priority, jadi Artifact Registry akan menelusurinya terlebih dahulu. upstream-test memiliki nilai priority terendah, jadi Artifact Registry akan menelusurinya terakhir. upstream2 dan upstream3 memiliki prioritas yang sama. Jika Artifact Registry menemukan paket yang diminta dalam repositori yang memiliki prioritas yang sama, Artifact Registry dapat menyalurkan paket dari salah satu repositori.

    [{
    "id" : "upstream1",
    "repository" : "projects/myproject/locations/us-west1/repositories/python-repo1",
    "priority" : 100
    }, {
    "id" : "upstream2",
    "repository" : "projects/myproject/locations/us-west1/repositories/python-repo2",
    "priority" : 80
    }, {
    "id" : "upstream3",
    "repository" : "projects/myproject/locations/us-west1/repositories/python-repo2",
    "priority" : 80
    }, {
    "id" : "upstream-test",
    "repository" : "projects/myproject/locations/us-west1/repositories/python-test-repo",
    "priority" : 20
    }]
    

    Contoh ini juga menyisakan ruang di antara nilai prioritas. Kesenjangan ini memberikan fleksibilitas untuk menambahkan repositori upstream dengan prioritas yang berada di antara nilai-nilai yang ada. Misalnya, Anda dapat menambahkan repositori upstream-3 dengan prioritas 70 sehingga Artifact Registry menelusurinya sebelum upstream-test.

    Sebaiknya simpan file kebijakan upstream Anda di sistem kontrol sumber, sehingga Anda dapat menggunakannya kembali nanti untuk melakukan perubahan pada setelan repositori upstream dan melacak perubahan historis.

  2. Di direktori yang berisi file kebijakan upstream Anda, jalankan perintah berikut untuk membuat repositori virtual:

    gcloud artifacts repositories create VIRTUAL-REPOSITORY-NAME \
        --project=PROJECT_ID \
        --repository-format=FORMAT \
        --mode=virtual-repository \
        --location=LOCATION \
        --description="DESCRIPTION" \
        --upstream-policy-file=UPSTREAM_POLICY_FILE
    

    Ganti kode berikut:

    • VIRTUAL-REPOSITORY-NAME adalah nama repositori virtual.
    • PROJECT_ID adalah ID project tempat Anda membuat repositori virtual. Jika flag ini dihilangkan, project saat ini atau default akan digunakan.
    • FORMAT adalah format repositori. Nilai-nilai berikut tersedia:
      • apt (pratinjau pribadi)
      • docker
      • maven
      • npm
      • python
      • yum (pratinjau pribadi)
    • LOCATION adalah lokasi regional atau multi-regional untuk repositori. Anda dapat menghapus flag ini jika menetapkan default. Untuk melihat daftar lokasi yang didukung, jalankan perintah:

      gcloud artifacts locations list
      
    • DESCRIPTION adalah deskripsi opsional dari repositori. Jangan sertakan data sensitif karena deskripsi repositori tidak dienkripsi.

    • UPSTREAM_POLICY_FILE adalah jalur ke file kebijakan upstream.

    Misalnya, perintah berikut membuat repositori virtual bernama virtual-repo untuk paket Python di region us-west1 dengan setelan di policies.json.

    gcloud artifacts repositories create virtual-repo \
    --repository-format=python \
    --mode=virtual-repository \
    --location=us-west1 \
    --description="Python virtual repository" \
    --upstream-policy-file=policies.json
    

Artifact Registry membuat repositori virtual.

Membuat repositori virtual menggunakan Terraform

Gunakan resource google_artifact_registry_repository untuk membuat repositori. terraform-provider-google versi 5.0.0 atau yang lebih baru diperlukan.

Jika Anda baru menggunakan Terraform untuk Google Cloud, lihat halaman Mulai - Google Cloud di situs HashiCorp.

Contoh berikut menentukan penyedia, repositori virtual dengan nama resource Terraform my-repo, dan repositori upstream dengan nama resource Terraform my-repo-upstream.

Docker

provider "google" {
    project = "PROJECT-ID"
}
resource "google_artifact_registry_repository" "my-repo-upstream" {
  location      = "UPSTREAM_LOCATION"
  repository_id = "UPSTREAM_REPOSITORY_ID"
  description   = "UPSTREAM_REPOSITORY_DESCRIPTION"
  format        = "docker"
}

resource "google_artifact_registry_repository" "my-repo" {
  depends_on    = []
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "VIRTUAL_REPOSITORY_DESCRIPTION"
  format        = "docker"
  kms_key_name = "KEY"
  mode          = "VIRTUAL_REPOSITORY"
  virtual_repository_config {
    upstream_policies {
      id          = "UPSTREAM_REPOSITORY_ID"
      repository  = google_artifact_registry_repository.my-repo-upstream.id
      priority    = PRIORITY
    }
  }
}

Dari mana

  • PROJECT-ID adalah project ID Google Cloud.
  • UPSTREAM_LOCATION adalah lokasi repositori upstream. Perhatikan bahwa repositori dan upstream virtual harus berada di region atau multi-region yang sama.
  • UPSTREAM_REPOSITORY_ID adalah ID repositori upstream.
  • UPSTREAM_REPOSITORY_DESCRIPTION adalah deskripsi opsional dari repositori upstream.
  • LOCATION adalah lokasi repositori virtual.
  • REPOSITORY_ID adalah ID repositori virtual.
  • DESCRIPTION adalah deskripsi opsional untuk repositori virtual. Jangan sertakan data sensitif, karena deskripsi repositori tidak dienkripsi.
  • KEY adalah nama kunci Cloud Key Management Service, jika Anda menggunakan kunci enkripsi yang dikelola pelanggan (CMEK) untuk enkripsi. Hapus argumen ini untuk menggunakan setelan default, kunci enkripsi yang dikelola Google.
  • PRIORITY adalah nilai prioritas opsional. Prioritas tertinggi adalah 1. Entri dengan nilai prioritas lebih besar akan diprioritaskan dalam urutan pull.

Maven

Jika kebijakan versi tidak ditentukan, Artifact Registry akan membuat repositori Maven yang menyimpan versi snapshot dan rilis paket secara default.

provider "google" {
    project = "PROJECT-ID"
}
resource "google_artifact_registry_repository" "my-repo-upstream" {
  location      = "UPSTREAM_LOCATION"
  repository_id = "UPSTREAM_REPOSITORY_ID"
  description   = "UPSTREAM_REPOSITORY_DESCRIPTION"
  format        = "maven"
}

resource "google_artifact_registry_repository" "my-repo" {
  depends_on    = []
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "VIRTUAL_REPOSITORY_DESCRIPTION"
  format        = "maven"
  kms_key_name = "KEY"
  mode          = "VIRTUAL_REPOSITORY"
  virtual_repository_config {
    upstream_policies {
      id          = "UPSTREAM_REPOSITORY_ID"
      repository  = google_artifact_registry_repository.my-repo-upstream.id
      priority    = PRIORITY
    }
  }
}

Dari mana

  • PROJECT-ID adalah project ID Google Cloud.
  • UPSTREAM_LOCATION adalah lokasi repositori upstream. Perhatikan bahwa repositori dan upstream virtual harus berada di region atau multi-region yang sama.
  • UPSTREAM_REPOSITORY_ID adalah ID repositori upstream.
  • UPSTREAM_REPOSITORY_DESCRIPTION adalah deskripsi opsional dari repositori upstream.
  • LOCATION adalah lokasi repositori virtual.
  • REPOSITORY_ID adalah ID repositori virtual.
  • DESCRIPTION adalah deskripsi opsional untuk repositori virtual. Jangan sertakan data sensitif, karena deskripsi repositori tidak dienkripsi.
  • KEY adalah nama kunci Cloud Key Management Service, jika Anda menggunakan kunci enkripsi yang dikelola pelanggan (CMEK) untuk enkripsi. Hapus argumen ini untuk menggunakan setelan default, kunci enkripsi yang dikelola Google.
  • PRIORITY adalah nilai prioritas opsional. Prioritas tertinggi adalah 1. Entri dengan nilai prioritas lebih besar akan diprioritaskan dalam urutan pull.

Untuk menyimpan snapshot dan versi rilis di repositori yang berbeda, tentukan kebijakan versi untuk repositori menggunakan blok maven_config. Blok ini mendukung setelan berikut:

  • version_policy menetapkan kebijakan versi dengan salah satu nilai berikut:
    • VERSION_POLICY_UNSPECIFIED: Menyimpan paket snapshot dan rilis. Ini adalah setelan default.
    • RILIS: Hanya menyimpan paket rilis.
    • SNAPSHOT: Hanya menyimpan paket snapshot.
  • allow_snapshot_overwrites mengonfigurasi repositori dengan kebijakan versi SNAPSHOT untuk menerima snapshot non-unik yang menimpa versi yang ada di repositori.

Contoh berikut menentukan repositori Maven dengan kebijakan versi rilis.

provider "google" {
project = "my-project"
}

resource "google_artifact_registry_repository" "my-repo" {
provider = google-beta

location = "us-central1"
repository_id = "my-repo"
description = "Maven repository"
format = "MAVEN"
maven_config {
  version_policy = "RELEASE"
}
}

npm

provider "google" {
    project = "PROJECT-ID"
}
resource "google_artifact_registry_repository" "my-repo-upstream" {
  location      = "UPSTREAM_LOCATION"
  repository_id = "UPSTREAM_REPOSITORY_ID"
  description   = "UPSTREAM_REPOSITORY_DESCRIPTION"
  format        = "npm"
}

resource "google_artifact_registry_repository" "my-repo" {
  depends_on    = []
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "VIRTUAL_REPOSITORY_DESCRIPTION"
  format        = "npm"
  kms_key_name = "KEY"
  mode          = "VIRTUAL_REPOSITORY"
  virtual_repository_config {
    upstream_policies {
      id          = "UPSTREAM_REPOSITORY_ID"
      repository  = google_artifact_registry_repository.my-repo-upstream.id
      priority    = PRIORITY
    }
  }
}

Dari mana

  • PROJECT-ID adalah project ID Google Cloud.
  • UPSTREAM_LOCATION adalah lokasi repositori upstream. Perhatikan bahwa repositori dan upstream virtual harus berada di region atau multi-region yang sama.
  • UPSTREAM_REPOSITORY_ID adalah ID repositori upstream.
  • UPSTREAM_REPOSITORY_DESCRIPTION adalah deskripsi opsional dari repositori upstream.
  • LOCATION adalah lokasi repositori virtual.
  • REPOSITORY_ID adalah ID repositori virtual.
  • DESCRIPTION adalah deskripsi opsional untuk repositori virtual. Jangan sertakan data sensitif, karena deskripsi repositori tidak dienkripsi.
  • KEY adalah nama kunci Cloud Key Management Service, jika Anda menggunakan kunci enkripsi yang dikelola pelanggan (CMEK) untuk enkripsi. Hapus argumen ini untuk menggunakan setelan default, kunci enkripsi yang dikelola Google.
  • PRIORITY adalah nilai prioritas opsional. Prioritas tertinggi adalah 1. Entri dengan nilai prioritas lebih besar akan diprioritaskan dalam urutan pull.

Python

provider "google" {
    project = "PROJECT-ID"
}
resource "google_artifact_registry_repository" "my-repo-upstream" {
  location      = "UPSTREAM_LOCATION"
  repository_id = "UPSTREAM_REPOSITORY_ID"
  description   = "UPSTREAM_REPOSITORY_DESCRIPTION"
  format        = "python"
}

resource "google_artifact_registry_repository" "my-repo" {
  depends_on    = []
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "VIRTUAL_REPOSITORY_DESCRIPTION"
  format        = "python"
  kms_key_name = "KEY"
  mode          = "VIRTUAL_REPOSITORY"
  virtual_repository_config {
    upstream_policies {
      id          = "UPSTREAM_REPOSITORY_ID"
      repository  = google_artifact_registry_repository.my-repo-upstream.id
      priority    = PRIORITY
    }
  }
}

Dari mana

  • PROJECT-ID adalah project ID Google Cloud.
  • UPSTREAM_LOCATION adalah lokasi repositori upstream. Perhatikan bahwa repositori dan upstream virtual harus berada di region atau multi-region yang sama.
  • UPSTREAM_REPOSITORY_ID adalah ID repositori upstream.
  • UPSTREAM_REPOSITORY_DESCRIPTION adalah deskripsi opsional dari repositori upstream.
  • LOCATION adalah lokasi repositori virtual.
  • REPOSITORY_ID adalah ID repositori virtual.
  • DESCRIPTION adalah deskripsi opsional untuk repositori virtual. Jangan sertakan data sensitif, karena deskripsi repositori tidak dienkripsi.
  • KEY adalah nama kunci Cloud Key Management Service, jika Anda menggunakan kunci enkripsi yang dikelola pelanggan (CMEK) untuk enkripsi. Hapus argumen ini untuk menggunakan setelan default, kunci enkripsi yang dikelola Google.
  • PRIORITY adalah nilai prioritas opsional. Prioritas tertinggi adalah 1. Entri dengan nilai prioritas lebih besar akan diprioritaskan dalam urutan pull.

Artifact Registry membuat repositori Anda. Jalankan perintah berikut untuk melihat deskripsi repositori:

gcloud artifacts repositories describe REPOSITORY \
    --location=LOCATION

Setelah Anda membuat repositori:

Memperbarui repositori upstream

Anda dapat mengubah daftar repositori upstream atau menyesuaikan prioritas repositori upstream.

Konsol

  1. Buka halaman Repositories di Konsol Google Cloud.

    Buka halaman Repositori

  2. Dalam daftar repositori, pilih repositori virtual, lalu klik Edit Repository.

  3. Dalam daftar Virtual Repository Upstream, buat perubahan yang diperlukan. Anda dapat menambahkan dan menghapus repositori atau mengubah prioritas repositori dalam daftar

  4. Klik Simpan.

gcloud

  1. Edit file kebijakan upstream dengan perubahan yang Anda buat. Misalnya, Anda mungkin ingin menambahkan repositori upstream atau menyesuaikan setelan prioritas.

    Jika Anda ingin menghapus semua repositori upstream, file kebijakan Anda harus berisi kumpulan repositori kosong.

    []
    
  2. Jalankan perintah berikut untuk menerapkan perubahan Anda ke repositori virtual.

    gcloud artifacts repositories update REPOSITORY \
        --upstream-policy-file=UPSTREAM_POLICY_FILE
    

    Ganti UPSTREAM_POLICY_FILE dengan jalur ke file kebijakan upstream.

    Untuk mengetahui informasi selengkapnya tentang perintah, lihat dokumentasi referensi gcloud memadai repository update.

Mengedit deskripsi repositori

Anda dapat mengubah deskripsi repositori dari Google Cloud Console atau gcloud CLI.

Konsol

  1. Buka halaman Repositories di Konsol Google Cloud.

    Buka halaman Repositori

  2. Dalam daftar repositori, pilih repositori, lalu klik Edit Repository.

  3. Edit deskripsi repositori, lalu klik Save.

gcloud

Untuk memperbarui deskripsi repositori, jalankan perintah:

gcloud artifacts repositories update REPOSITORY \
    --project=PROJECT] \
    --location=LOCATION \
    --description="DESCRIPTION"

Ganti nilai berikut:

  • REPOSITORY adalah nama repositori. Jika mengonfigurasi repositori default, Anda dapat menghilangkan flag ini untuk menggunakan repositori default.
  • PROJECT adalah project ID Google Cloud. Jika flag ini dihilangkan, project saat ini atau default akan digunakan.
  • LOCATION adalah lokasi regional atau multi-regional. Gunakan flag ini untuk melihat repositori di lokasi tertentu. Jika mengonfigurasi lokasi default, Anda dapat menghilangkan tanda ini untuk menggunakan lokasi default.
  • DESCRIPTION adalah deskripsi untuk repositori.