Anda harus mengautentikasi ke Artifact Registry saat menggunakan aplikasi pihak ketiga untuk terhubung ke repositori Artifact Registry. Dokumentasi ini berfokus pada konfigurasi Maven dan Gradle.
Anda tidak perlu mengonfigurasi autentikasi untuk lingkungan runtime Cloud Build atau Google Cloud seperti Google Kubernetes Engine dan Cloud Run, tetapi Anda harus memverifikasi bahwa izin yang diperlukan telah dikonfigurasi. Untuk mempelajari lebih lanjut, lihat informasi tentang Cloud Build dan men-deploy ke lingkungan runtime Google Cloud.
Sebelum memulai
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- (Opsional) Konfigurasikan default untuk perintah gcloud.
Jika Anda mengonfigurasi autentikasi dengan repositori standar, verifikasi kebijakan versi agar Anda dapat mengonfigurasi project Maven dengan benar untuk jenis paket Java yang dapat Anda upload.
Konsol
Buka halaman Repositories di konsol Google Cloud.
Klik repositori yang ingin Anda autentikasi.
Bagian Details menampilkan kebijakan versi. Jika repositori memiliki kebijakan versi snapshot, kolom Izinkan penggantian snapshot akan menunjukkan apakah snapshot dapat menimpa versi snapshot yang cocok di repositori.
gcloud
Jalankan perintah berikut untuk melihat deskripsi repositori.
gcloud artifacts repositories describe REPOSITORY \ --project=PROJECT \ --location=LOCATION
Dari mana
- REPOSITORY adalah ID repositori. Jika Anda mengonfigurasi repositori Artifact Registry default, repositori tersebut akan digunakan jika flag ini dihilangkan dari perintah.
- PROJECT adalah project ID. Jika flag ini dihilangkan, project default atau project saat ini akan digunakan.
- LOCATION adalah lokasi regional atau multi-regional untuk repositori.
Output perintah ini mencakup informasi tentang kebijakan versi di bagian
mavenConfig
. Dalam contoh ini, repositori memiliki kebijakan versi snapshot dan snapshot tidak dapat menimpa versi yang identik di repositori.Encryption: Google-managed key createTime: '2021-10-04T19:39:10.897404Z' format: MAVEN mavenConfig: allowSnapshotOverwrites: false versionPolicy: SNAPSHOT
Jika repositori tidak memiliki kebijakan versi, nilai
mavenConfig
adalah{}
.
Ringkasan
Artifact Registry mendukung metode autentikasi berikut.
- Menggunakan helper autentikasi
- Opsi ini memberikan fleksibilitas paling besar. Saat Anda menyertakan helper dalam konfigurasi Maven atau Gradle, Artifact Registry akan menelusuri kredensial akun layanan di lingkungan.
- Menentukan kunci akun layanan sebagai kredensial
- Gunakan opsi ini jika aplikasi tidak mendukung Kredensial Default Aplikasi, tetapi mendukung autentikasi dengan nama pengguna dan sandi.
Kunci akun layanan adalah kredensial yang dapat digunakan untuk jangka waktu lama. Gunakan panduan berikut untuk membatasi akses ke repositori Anda:
- Pertimbangkan untuk menggunakan akun layanan khusus untuk berinteraksi dengan repositori.
- Berikan peran Artifact Registry minimum yang diperlukan oleh akun layanan. Misalnya, tetapkan Pembaca Artifact Registry ke akun layanan yang hanya mendownload artefak.
- Jika grup di organisasi Anda memerlukan tingkat akses yang berbeda ke repositori tertentu, berikan akses di tingkat repositori, bukan tingkat project.
- Ikuti praktik terbaik untuk mengelola kredensial.
Mengautentikasi dengan helper kredensial
Artifact Registry menyediakan Maven wagon dan plugin Gradle sebagai helper kredensial. Saat menggunakan helper kredensial, kredensial Anda tidak disimpan dalam project Java. Sebagai gantinya, Artifact Registry menelusuri kredensial dalam urutan berikut:
Kredensial Default Aplikasi (ADC), strategi yang mencari kredensial dengan urutan sebagai berikut:
Kredensial yang ditentukan dalam variabel lingkungan
GOOGLE_APPLICATION_CREDENTIALS
.Kredensial yang disediakan akun layanan default untuk Compute Engine, Google Kubernetes Engine, Cloud Run, App Engine, atau fungsi Cloud Run.
Kredensial yang diberikan oleh Google Cloud CLI, termasuk kredensial pengguna dari perintah
gcloud auth application-default login
.
Variabel GOOGLE_APPLICATION_CREDENTIALS
membuat akun untuk
autentikasi menjadi eksplisit, sehingga mempermudah pemecahan masalah. Jika
Anda tidak menggunakan variabel, pastikan akun yang mungkin digunakan ADC memiliki
izin yang diperlukan. Misalnya,
akun layanan default untuk VM Compute Engine, node Google Kubernetes Engine,
dan revisi Cloud Run memiliki akses hanya baca ke repositori. Jika Anda
ingin mengupload dari lingkungan ini menggunakan akun layanan default,
Anda harus mengubah izin.
Menyiapkan akun layanan untuk helper kredensial
Untuk membuat akun layanan dan menyiapkan autentikasi menggunakan variabel lingkungan:
Buat akun layanan untuk bertindak atas nama aplikasi Anda, atau pilih akun layanan yang ada yang Anda gunakan untuk otomatisasi.
Anda memerlukan lokasi file kunci akun layanan untuk menyiapkan autentikasi dengan Artifact Registry. Untuk akun yang ada, Anda dapat melihat kunci dan membuat kunci baru di halaman Akun Layanan.
Berikan peran Artifact Registry tertentu ke akun layanan untuk memberikan akses repositori.
Tetapkan lokasi file kunci akun layanan ke variabel
GOOGLE_APPLICATION_CREDENTIALS
sehingga helper kredensial Artifact Registry dapat memperoleh kunci Anda saat terhubung dengan repositori.export GOOGLE_APPLICATION_CREDENTIALS=KEY-FILE
Dengan KEY-FILE adalah jalur ke file kunci akun layanan.
Mengonfigurasi Maven
Konfigurasikan Maven untuk jenis repositori yang Anda gunakan.
Standard
Jalankan perintah berikut untuk mencetak konfigurasi repositori yang akan ditambahkan ke project Java Anda.
gcloud artifacts print-settings mvn \ --project=PROJECT \ --repository=REPOSITORY \ --location=LOCATION
Dari mana
- PROJECT adalah project ID. Jika flag ini dihilangkan, project default atau project saat ini akan digunakan.
- REPOSITORY adalah ID repositori. Jika Anda mengonfigurasi repositori Artifact Registry default, repositori tersebut akan digunakan jika flag ini dihilangkan dari perintah.
- LOCATION adalah lokasi regional atau multi-regional untuk repositori.
Tambahkan setelan yang ditampilkan ke bagian yang sesuai dalam file
pom.xml
untuk project Maven Anda. Lihat referensi POM Maven untuk mengetahui detail tentang struktur file.Contoh berikut menunjukkan setelan untuk repositori yang menyimpan versi snapshot dan rilis.
<distributionManagement> <snapshotRepository> <id>artifact-registry</id> <url>artifactregistry://LOCATION-maven.pkg.dev/PROJECT/REPOSITORY</url> </snapshotRepository> <repository> <id>artifact-registry</id> <url>artifactregistry://LOCATION-maven.pkg.dev/PROJECT/REPOSITORY</url> </repository> </distributionManagement> <repositories> <repository> <id>artifact-registry</id> <url>artifactregistry://LOCATION-maven.pkg.dev/PROJECT/REPOSITORY</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <build> <extensions> <extension> <groupId>com.google.cloud.artifactregistry</groupId> <artifactId>artifactregistry-maven-wagon</artifactId> <version>2.2.3</version> </extension> </extensions> </build>
Elemen
<release>
dan<snapshot>
menunjukkan apakah repositori menyimpan paket rilis, paket snapshot, atau keduanya. Setelan ini harus sesuai dengan kebijakan versi repositori.Elemen
<build>
menentukan wagon Artifact Registry sebagai ekstensi. Untuk informasi tentang wagon, lihat dokumentasi untuk alat Maven Artifact Registry.
Jarak jauh atau virtual
Edit file
pom.xml
dalam project Anda. Lihat referensi POM Maven untuk mengetahui detail tentang struktur file.Contoh berikut menunjukkan setelan untuk repositori jarak jauh yang menyimpan versi snapshot dan rilis. Dalam contoh ini, project memiliki dependensi pada versi paket Guava.
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.google.hello</groupId> <artifactId>repo-config</artifactId> <version>4.1-SNAPSHOT</version> <description>version 1 release</description> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>28.0-jre</version> </dependency> </dependencies> <repositories> <repository> <id>central</id> <name>Maven Central remote repository</name> <url>artifactregistry://LOCATION-maven.pkg.dev/PROJECT_ID/REMOTE-REPOSITORY-NAME</url> <layout>default</layout> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <build> <extensions> <extension> <groupId>com.google.cloud.artifactregistry</groupId> <artifactId>artifactregistry-maven-wagon</artifactId> <version>2.2.3</version> </extension> </extensions> </build> </project>
Bagian
<repositories>
menentukan repositori Artifact Registry. Untuk repositori jarak jauh, elemen<id>
harus ditetapkan kecentral
. Setelan ini mengganti nilai default untuk ID repositoricentral
yang diwarisi dari Super POM.Bagian
<build>
menetapkan wagon Artifact Registry sebagai ekstensi. Untuk informasi tentang wagon, lihat dokumentasi untuk alat Maven Artifact Registry.Dalam contoh ini, bagian
<dependencies>
menetapkan dependensi pada paket Guava versi28.0-jre
.
Maven me-resolve beberapa dependensi sebelum menerapkan wagon yang ditentukan dalam
pom.xml
, termasuk:- Referensi dalam project Maven turunan ke project induk menggunakan
elemen
<parent>
. - Dependensi plugin yang disimpan di Artifact Registry.
Jika project Anda perlu me-resolve dependensi ini, Anda harus menggunakan mekanisme ekstensi inti untuk memastikan Maven dapat menemukan file dan plugin POM induk.
Dalam project Anda, buat file
${maven.projectBasedir}/.mvn/extensions.xml
dengan konten berikut. Elemen<extension>
menentukan gerbong.<extensions xmlns="http://maven.apache.org/EXTENSIONS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0 http://maven.apache.org/xsd/core-extensions-1.0.0.xsd"> <extension> <groupId>com.google.cloud.artifactregistry</groupId> <artifactId>artifactregistry-maven-wagon</artifactId> <version>2.2.3</version> </extension> </extensions>
Maven kini dapat me-resolve dependensi induk atau plugin dari Artifact Registry.
- Referensi dalam project Maven turunan ke project induk menggunakan
elemen
Konfigurasi autentikasi Anda selesai.
Mengonfigurasi Gradle
Konfigurasikan Gradle untuk jenis repositori yang Anda gunakan.
Standard
Jalankan perintah berikut untuk mencetak konfigurasi repositori yang akan ditambahkan ke project Java Anda.
gcloud artifacts print-settings gradle \ --project=PROJECT \ --repository=REPOSITORY \ --location=LOCATION
Dari mana
- PROJECT adalah project ID. Jika flag ini dihilangkan, project default atau project saat ini akan digunakan.
- REPOSITORY adalah ID repositori. Jika Anda mengonfigurasi repositori Artifact Registry default, repositori tersebut akan digunakan jika flag ini dihilangkan dari perintah.
- LOCATION adalah lokasi regional atau multi-regional untuk repositori.
Tambahkan setelan repositori ke file
build.gradle
Anda. Contoh berikut menunjukkan lokasi relatif bagian yang dicetak.plugins { id "maven-publish" id "com.google.cloud.artifactregistry.gradle-plugin" version "2.2.3" } publishing { publications { mavenJava(MavenPublication) { groupId 'maven.example.id' from components.java } } repositories { maven { url "artifactregistry://LOCATION-maven.pkg.dev/PROJECT/REPOSITORY" } } } repositories { maven { url "artifactregistry://LOCATION-maven.pkg.dev/PROJECT/REPOSITORY" } }
Bagian
plugins
mendeklarasikan plugin Artifact Registry. Untuk mengetahui informasi tentang plugin, lihat dokumentasi untuk alat Maven Artifact Registry.Bagian
publishing
menentukan file yang akan diupload dan repositori Artifact Registry target. Anda dapat memperbarui daftar file di bagianpublications
saat sudah siap mengupload. Untuk informasi tentang setelan publikasi, lihat dokumentasi plugin Maven Publish.
Jarak jauh atau virtual
Tambahkan setelan repositori ke file
build.gradle
Anda.Contoh berikut menunjukkan setelan untuk repositori jarak jauh. Dalam contoh ini, project memiliki dependensi pada versi paket Guava.
plugins { id 'java' id "maven-publish" id "com.google.cloud.artifactregistry.gradle-plugin" version "2.2.3" id 'maven' } repositories { maven { url "artifactregistry://LOCATION-maven.pkg.dev /PROJECT_ID/REMOTE-REPOSITORY-NAME" } } dependencies { compile "com.google.guava:guava:31.1-jre" }
Bagian
plugins
mendeklarasikan plugin Artifact Registry. Untuk mengetahui informasi tentang plugin, lihat dokumentasi untuk alat Maven Artifact Registry.Bagian
repositories
menentukan repositori Artifact Registry.Dalam contoh ini, bagian
dependencies
menetapkan dependensi pada paket Guava versi31.1-jre
.
Tentukan dependensi untuk paket Anda di bagian
dependencies
.Jika perlu menggunakan repositori dalam file
init.gradle
atausettings.gradle
, Anda dapat menambahkan konfigurasi plugin ke file tersebut.Untuk
init.gradle
, tambahkan konfigurasi berikut:initscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath "gradle.plugin.com.google.cloud.artifactregistry:artifactregistry-gradle-plugin:2.2.3" } } apply plugin: com.google.cloud.artifactregistry.gradle.plugin.ArtifactRegistryGradlePlugin
Untuk settings.gradle, tambahkan konfigurasi berikut:
buildscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath "gradle.plugin.com.google.cloud.artifactregistry:artifactregistry-gradle-plugin:2.2.3" } } apply plugin: "com.google.cloud.artifactregistry.gradle-plugin"
Konfigurasi autentikasi Anda selesai.
Mengonfigurasi autentikasi sandi
Gunakan pendekatan ini saat aplikasi Java Anda memerlukan autentikasi dengan nama pengguna dan sandi yang ditentukan.
Menyiapkan akun layanan untuk autentikasi sandi
Untuk membuat akun layanan:
Buat akun layanan untuk bertindak atas nama aplikasi Anda, atau pilih akun layanan yang ada yang Anda gunakan untuk otomatisasi.
Anda memerlukan lokasi file kunci akun layanan untuk menyiapkan autentikasi dengan Artifact Registry. Untuk akun yang ada, Anda dapat melihat kunci dan membuat kunci baru di halaman Akun Layanan.
Jika Anda ingin mengaktifkan akun layanan dalam sesi gcloud CLI saat ini, jalankan perintah:
gcloud auth activate-service-account ACCOUNT --key-file=KEY-FILE
Dari mana
- ACCOUNT adalah akun pengguna atau akun layanan.
- KEY-FILE adalah jalur ke file kunci JSON akun layanan.
Mengonfigurasi Maven
Konfigurasikan Maven untuk jenis repositori yang Anda gunakan.
Standard
Jalankan perintah berikut untuk mencetak konfigurasi repositori yang akan ditambahkan ke project Java Anda.
gcloud artifacts print-settings mvn \ --project=PROJECT \ --repository=REPOSITORY \ --location=LOCATION \ --json-key=KEY-FILE
Dari mana
- PROJECT adalah project ID. Jika flag ini dihilangkan, project default atau project saat ini akan digunakan.
- REPOSITORY adalah ID repositori. Jika Anda mengonfigurasi repositori Artifact Registry default, repositori tersebut akan digunakan jika flag ini dihilangkan dari perintah.
- LOCATION adalah lokasi regional atau multi-regional untuk repositori.
- KEY-FILE adalah jalur ke file kunci JSON akun layanan.
Perintah ini menampilkan setelan untuk disertakan dalam project Java Anda, termasuk versi kunci pribadi yang dienkode base64.
- Tambahkan setelan repositori yang ditampilkan di elemen
<project>
ke bagian filepom.xml
yang sesuai untuk project Maven Anda. Lihat referensi POM Maven untuk mengetahui detail tentang struktur file.
<project> <distributionManagement> <snapshotRepository> <id>artifact-registry</id> <url>https://LOCATION-maven.pkg.dev/PROJECT/REPOSITORY</url> </snapshotRepository> <repository> <id>artifact-registry</id> <url>https://LOCATION-maven.pkg.dev/PROJECT/REPOSITORY</url> </repository> </distributionManagement> <repositories> <repository> <id>artifact-registry</id> <url>https://LOCATION-maven.pkg.dev/PROJECT/REPOSITORY</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> </project>
Elemen
<release>
dan<snapshot>
menunjukkan apakah repositori menyimpan paket rilis, paket snapshot, atau keduanya. Setelan ini harus sesuai dengan kebijakan versi repositori.- Tambahkan setelan autentikasi yang ditampilkan di elemen
<settings>
ke bagian<servers>
di file~/.m2/settings.xml
. Dalam contoh berikut,KEY
adalah kunci yang dienkode base64 dari file kunci Anda.
Lihat Referensi setelan Maven untuk mengetahui informasi selengkapnya.
<settings> <servers> <server> <id>artifact-registry</id> <configuration> <httpConfiguration> <get> <usePreemptive>true</usePreemptive> </get> <head> <usePreemptive>true</usePreemptive> </head> <put> <params> <property> <name>http.protocol.expect-continue</name> <value>false</value> </property> </params> </put> </httpConfiguration> </configuration> <username>_json_key_base64</username> <password>KEY</password> </server> </servers> </settings>
Jarak jauh atau virtual
Tambahkan setelan repositori ke bagian yang sesuai dalam file
pom.xml
untuk project Maven Anda. Lihat referensi POM Maven untuk mengetahui detail tentang struktur file.<repositories> <repository> <id>central</id> <name>Maven Central remote repository</name> <url>artifactregistry://LOCATION-maven.pkg.dev/PROJECT_ID/REMOTE-REPOSITORY-NAME</url> <layout>default</layout> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories>
Bagian
<repositories>
menentukan repositori Artifact Registry. Untuk repositori jarak jauh, elemen<id>
harus ditetapkan kecentral
. Setelan ini mengganti nilai default untuk ID repositoricentral
yang diwarisi dari Super POM.Enkode file kunci Anda dengan perintah berikut. Ganti KEY-FILE dengan nama file kunci Anda.
base64 -w 0 KEY-FILE
Tambahkan setelan autentikasi di elemen
<settings>
ke bagian<servers>
di file~/.m2/settings.xml
.
Lihat Referensi setelan Maven untuk mengetahui informasi selengkapnya.
<settings> <servers> <server> <id>artifact-registry</id> <configuration> <httpConfiguration> <get> <usePreemptive>true</usePreemptive> </get> <head> <usePreemptive>true</usePreemptive> </head> <put> <params> <property> <name>http.protocol.expect-continue</name> <value>false</value> </property> </params> </put> </httpConfiguration> </configuration> <username>_json_key_base64</username> <password>KEY</password> </server> </servers> </settings>
Konfigurasi autentikasi Anda selesai.
Mengonfigurasi Gradle
Konfigurasikan Gradle untuk jenis repositori yang Anda gunakan.
Standard
Jalankan perintah berikut untuk mencetak konfigurasi repositori yang akan ditambahkan ke project Java Anda.
gcloud artifacts print-settings gradle \ --project=PROJECT \ --repository=REPOSITORY \ --location=LOCATION \ --json-key=KEY-FILE
Dari mana
- PROJECT adalah project ID.
- REPOSITORY adalah ID atau ID yang sepenuhnya memenuhi syarat untuk repositori. Jika Anda mengonfigurasi repositori Artifact Registry default, repositori tersebut akan digunakan saat flag ini dihilangkan dari perintah.
- KEY-FILE adalah jalur ke file kunci JSON akun layanan. Jika telah menjalankan perintah untuk mengaktifkan akun layanan, Anda dapat menghapus tanda ini.
Perintah ini menampilkan setelan untuk disertakan dalam project Java Anda, termasuk versi kunci pribadi yang dienkode base64.
Baris berikut dari konfigurasi yang ditampilkan menentukan variabel bernama
artifactRegistryMavenSecret
untuk kunci akun layanan Anda. Tambahkan baris ini ke file~/.gradle/gradle.properties
agar kunci tidak terlihat dalam build atau repositori kontrol sumber Anda.artifactRegistryMavenSecret = KEY
Pada baris ini, KEY adalah kunci pribadi dalam file kunci akun layanan layanan Anda. Untuk
_json_key_base64
,artifactRegistryMavenSecret
ditetapkan ke kunci yang dienkode base64 sebagai sandi Anda.Di
build.gradle
, tentukan setelan repositori:plugins { id "maven-publish" } publishing { publications { mavenJava(MavenPublication) { groupId 'maven.example.id' from components.java } } repositories { maven { url "https://LOCATION-maven.pkg.dev/PROJECT/REPOSITORY" credentials { username = "_json_key_base64" password = "$artifactRegistryMavenSecret" } authentication { basic(BasicAuthentication) } } } } repositories { maven { url "https://LOCATION-maven.pkg.dev/PROJECT/REPOSITORY" credentials { username = "_json_key_base64" password = "$artifactRegistryMavenSecret" } authentication { basic(BasicAuthentication) } } }
- Bagian
repositories
menetapkan URL repositori dan kredensial untuk autentikasi. - Bagian
publishing
menentukan file yang akan diupload dan repositori Artifact Registry target. Anda dapat memperbarui daftar file di bagianpublications
saat sudah siap mengupload. Untuk informasi tentang setelan publikasi, lihat dokumentasi plugin Maven Publish.
- Bagian
Jarak jauh atau virtual
Enkode file kunci Anda dengan perintah berikut. Ganti KEY-FILE dengan nama file kunci Anda.
base64 -w 0 KEY-FILE
Di file
~/.gradle/gradle.properties
, tambahkan baris berikut agar kunci Anda tidak terlihat di build atau repositori kontrol sumber Anda.artifactRegistryMavenSecret = KEY
Pada baris ini, KEY adalah konten file kunci berenkode base64.
Tambahkan setelan repositori ke file
build.gradle
Anda.
Contoh berikut menunjukkan konfigurasi repositori jarak jauh.
plugins { id 'java' id "maven-publish" id 'maven' } repositories { maven { url "artifactregistry://LOCATION-maven.pkg.dev /PROJECT_ID/REMOTE-REPOSITORY-NAME" credentials { username = "_json_key_base64" password = "$artifactRegistryMavenSecret" } authentication { basic(BasicAuthentication) } dependencies { compile "com.google.guava:guava:31.1-jre" }
Bagian
repositories
menentukan repositori Artifact Registry.Dalam contoh ini, bagian
dependencies
menetapkan dependensi pada paket Guava versi31.1-jre
.
Tentukan dependensi untuk paket Anda di bagian
dependencies
.
Konfigurasi autentikasi Anda selesai.