הגדרת אימות ל-Artifact Registry עבור Maven ו-Gradle

כשמשתמשים באפליקציה של צד שלישי כדי להתחבר למאגר של Artifact Registry, צריך לבצע אימות ב-Artifact Registry. המסמכים האלה מתמקדים בהגדרות של Maven ו-Gradle.

אין צורך להגדיר אימות ל-Cloud Build או לסביבות זמן ריצה כמו Google Kubernetes Engine ו-Cloud Run, אבל צריך לוודא שהוגדרו ההרשאות הנדרשות. Google Cloudמידע נוסף זמין במאמרים בנושא Cloud Build ופריסה בסביבות זמן ריצה של Google Cloud .

לפני שמתחילים

  1. התקינו את ה-CLI של Google Cloud. אחר כך, מאתחלים את ה-CLI של Google Cloud באמצעות הפקודה הבאה:

    gcloud init

    אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  2. (אופציונלי) הגדרת ברירות מחדל לפקודות gcloud.
  3. אם אתם מגדירים אימות באמצעות מאגר סטנדרטי, ודאו שמדיניות הגרסאות מאפשרת לכם להגדיר את פרויקט Maven בצורה נכונה לסוגי חבילות ה-Java שאתם יכולים להעלות.

    המסוף

    1. פותחים את הדף Repositories במסוף Google Cloud .

      פתיחת הדף Repositories

    2. לוחצים על המאגר שרוצים לבצע אימות מולו.

      בקטע Details מוצגת מדיניות הגרסה. אם למאגר יש מדיניות של גרסת תמונת מצב, השדה Allow snapshot overwrites מציין אם תמונות מצב יכולות להחליף גרסאות תואמות של תמונות מצב במאגר.

    gcloud

    מריצים את הפקודה הבאה כדי להציג תיאור של מאגר.

    gcloud artifacts repositories describe REPOSITORY \
          --project=PROJECT \
          --location=LOCATION
    

    כאשר:

    • ‫REPOSITORY הוא המזהה של המאגר. אם הגדרתם מאגר ברירת מחדל של Artifact Registry, המערכת תשתמש בו אם לא תציינו את הדגל הזה בפקודה.
    • ‫PROJECT הוא מזהה הפרויקט. אם לא מציינים את הדגל הזה, המערכת משתמשת בפרויקט ברירת המחדל או בפרויקט הנוכחי.
    • ‫LOCATION הוא המיקום האזורי או המיקום במספר אזורים של המאגר.

    הפלט של הפקודה כולל מידע על מדיניות הגרסאות בקטע mavenConfig. בדוגמה הזו, במאגר יש מדיניות לגבי גרסאות של תמונות מצב, ואי אפשר להחליף תמונות מצב בגרסאות זהות במאגר.

    Encryption: Google-owned and Google-managed encryption key
    createTime: '2021-10-04T19:39:10.897404Z'
    format: MAVEN
    mavenConfig:
      allowSnapshotOverwrites: false
      versionPolicy: SNAPSHOT
    

    אם למאגר אין מדיניות גרסאות, הערך של mavenConfig הוא {}.

סקירה כללית

ב-Artifact Registry יש תמיכה בשיטות האימות הבאות.

שימוש בכלי עזר לאימות
האפשרות הזו מספקת את הגמישות הגדולה ביותר. כשכוללים את כלי העזר בהגדרות של Maven או Gradle, ‏Artifact Registry מחפש בסביבה פרטי כניסה לחשבון שירות.
ציון מפתח של חשבון שירות כפרטי כניסה
משתמשים באפשרות הזו כשהאפליקציה לא תומכת ב-Application Default Credentials אבל כן תומכת באימות באמצעות שם משתמש וסיסמה.

מפתחות של חשבונות שירות הם פרטי כניסה לטווח ארוך. כדי להגביל את הגישה למאגרים, אתם יכולים להשתמש בהנחיות הבאות:

  • מומלץ להשתמש בחשבון שירות ייעודי לאינטראקציה עם מאגרי מידע.
  • מקצים לחשבון השירות את התפקיד המינימלי ב-Artifact Registry שנדרש. לדוגמה, אפשר להקצות את התפקיד Artifact Registry Reader לחשבון שירות שמוריד רק ארטיפקטים.
  • אם קבוצות בארגון שלכם צריכות רמות גישה שונות למאגרי מידע ספציפיים, כדאי להעניק גישה ברמת מאגר המידע ולא ברמת הפרויקט.
  • חשוב לפעול לפי השיטות המומלצות לניהול פרטי כניסה.

אימות באמצעות כלי עזר לפרטי כניסה

‫Artifact Registry מספק Maven wagon ופלאגין של Gradle כעוזרי פרטי כניסה. כשמשתמשים בכלי העזר לפרטי הכניסה, פרטי הכניסה לא נשמרים בפרויקט Java. במקום זאת, Artifact Registry מחפש פרטי כניסה בסדר הבא:

  1. Application Default Credentials‏ (ADC), אסטרטגיה שמחפשת פרטי כניסה בסדר הבא:

    1. פרטי הכניסה מוגדרים במשתנה הסביבה GOOGLE_APPLICATION_CREDENTIALS.

    2. פרטי הכניסה שחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine,‏ Google Kubernetes Engine,‏ Cloud Run,‏ App Engine או בפונקציות של Cloud Run מספק.

  2. פרטי כניסה שסופקו על ידי Google Cloud CLI, כולל פרטי כניסה של משתמשים מהפקודה gcloud auth application-default login.

המשתנה GOOGLE_APPLICATION_CREDENTIALS מציין במפורש את החשבון לאימות, וכך קל יותר לפתור בעיות. אם לא משתמשים במשתנה, צריך לוודא שלכל חשבון ש-ADC עשוי להשתמש בו יש את ההרשאות הנדרשות. לדוגמה, לחשבון השירות שמוגדר כברירת מחדל למכונות וירטואליות ב-Compute Engine, לצמתים ב-Google Kubernetes Engine ולעדכונים ב-Cloud Run יש גישת קריאה בלבד למאגרים. אם אתם מתכוונים להעלות מהסביבות האלה באמצעות חשבון השירות שמוגדר כברירת מחדל, תצטרכו לשנות את ההרשאות.

הגדרה של חשבון שירות לכלי עזר לפרטי כניסה

כדי ליצור חשבון שירות ולהגדיר אימות באמצעות משתנה הסביבה:

  1. יוצרים חשבון שירות שיפעל בשם האפליקציה, או בוחרים חשבון שירות קיים שמשמש לאוטומציה.

    כדי להגדיר אימות באמצעות Artifact Registry, תצטרכו לדעת איפה נמצא קובץ המפתח של חשבון השירות. בחשבונות קיימים, אפשר לראות את המפתחות וליצור מפתחות חדשים בדף 'חשבונות שירות'.

    מעבר לדף 'חשבונות שירות'

  2. מקצים לחשבון השירות את התפקיד הספציפי ב-Artifact Registry כדי לתת גישה למאגר.

  3. מקצים את המיקום של קובץ המפתח של חשבון השירות למשתנה GOOGLE_APPLICATION_CREDENTIALS כדי שעוזר האישורים של Artifact Registry יוכל לקבל את המפתח כשמתחברים למאגרים.

    export GOOGLE_APPLICATION_CREDENTIALS=KEY-FILE
    

    ‫KEY-FILE הוא הנתיב אל קובץ המפתח של חשבון השירות.

הגדרת Maven

  1. מגדירים את Maven לפי סוג המאגר שבו משתמשים.

    רגילה

    1. מריצים את הפקודה הבאה כדי להדפיס את הגדרות המאגר ולהוסיף אותן לפרויקט ב-Java.

      gcloud artifacts print-settings mvn \
          --project=PROJECT \
          --repository=REPOSITORY \
          --location=LOCATION
      

      כאשר:

      • ‫PROJECT הוא מזהה הפרויקט. אם לא מציינים את הדגל הזה, המערכת משתמשת בפרויקט הנוכחי או בפרויקט ברירת המחדל.
      • ‫REPOSITORY הוא המזהה של המאגר. אם הגדרתם מאגר ברירת מחדל ב-Artifact Registry, המערכת תשתמש בו אם הדגל הזה לא יופיע בפקודה.
      • ‫LOCATION הוא המיקום האזורי או המיקום במספר אזורים של המאגר.
    2. מוסיפים את ההגדרות שהוחזרו לקטעים המתאימים בקובץ pom.xml של פרויקט Maven. פרטים על מבנה הקובץ מופיעים בהפניה ל-POM של Maven.

      בדוגמה הבאה מוצגות הגדרות של מאגר שמאחסן גם גרסאות של תמונת מצב וגם גרסאות הפצה.

      <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.5</version>
          </extension>
        </extensions>
      </build>
      

      רכיבי <release> ו-<snapshot> מציינים אם במאגר מאוחסנות חבילות של גרסאות, חבילות של תמונות מצב או שניהם. ההגדרות האלה צריכות להתאים למדיניות הגרסאות של המאגר.

      האלמנט <build> מגדיר את ה-wagon של Artifact Registry כהרחבה. מידע על wagon מופיע במסמכי העזרה של הכלים של Artifact Registry Maven.

    מרחוק או וירטואלי

    עורכים את הקובץ pom.xml בפרויקט. לפרטים על מבנה הקובץ, עיינו בחומר העזר בנושא POM של Maven.

    בדוגמה הבאה מוצגות הגדרות של מאגר מרוחק שמאחסן גם גרסאות של תמונת מצב וגם גרסאות הפצה. בדוגמה הזו, הפרויקט תלוי בגרסה של חבילת 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.5</version>
          </extension>
        </extensions>
      </build>
    </project>
    
    • בקטע <repositories> מוגדר מאגר Artifact Registry. במאגר מרוחק, צריך להגדיר את הרכיב <id> בתור central. ההגדרה הזו משנה את ערך ברירת המחדל של מזהה המאגר central, שעובר בירושה מ-Super POM.

    • הקטע <build> מגדיר את ה-wagon של Artifact Registry כתוסף. למידע על ה-wagon, קראו את המאמר כלי Maven של Artifact Registry.

    • בדוגמה הזו, בקטע <dependencies> מוגדרת תלות בחבילה Guava בגרסה 28.0-jre.

  2. ‫Maven פותר כמה יחסי תלות לפני שהוא מחיל wagon שמוגדר ב-pom.xml, כולל:

    • הפניות בפרויקט Maven משני לפרויקט ראשי באמצעות הרכיב <parent>.
    • יחסי תלות של תוספים שמאוחסנים ב-Artifact Registry.

    אם צריך לפתור את יחסי התלות האלה בפרויקט, צריך להשתמש במנגנון תוספי הליבה כדי לוודא ש-Maven יכול לאתר קובצי POM ופלאגינים הורים.

    בפרויקט, יוצרים את הקובץ ${maven.projectBasedir}/.mvn/extensions.xml עם התוכן הבא. הרכיב <extension> מגדיר את הקרון.

    <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.5</version>
      </extension>
    </extensions>
    

    עכשיו Maven יכול לפתור יחסי תלות של הורה או פלאגין מ-Artifact Registry.

ההגדרה של האימות הושלמה.

הגדרת Gradle

  1. מגדירים את Gradle בהתאם לסוג המאגר שבו משתמשים.

    רגילה

    1. מריצים את הפקודה הבאה כדי להדפיס את הגדרות המאגר ולהוסיף אותן לפרויקט ב-Java.

      gcloud artifacts print-settings gradle \
          --project=PROJECT \
          --repository=REPOSITORY \
          --location=LOCATION
      

      כאשר:

      • ‫PROJECT הוא מזהה הפרויקט. אם לא מציינים את הדגל הזה, המערכת משתמשת בפרויקט ברירת המחדל או בפרויקט הנוכחי.
      • ‫REPOSITORY הוא המזהה של המאגר. אם הגדרתם מאגר ברירת מחדל של Artifact Registry, המאגר הזה ישמש אתכם אם לא תציינו מאגר אחר בפקודה.
      • ‫LOCATION הוא המיקום האזורי או המיקום במספר אזורים של המאגר.
    2. מוסיפים את הגדרות המאגר לקובץ build.gradle. בדוגמה הבאה מוצג המיקום היחסי של החלקים המודפסים.

      plugins {
        id "maven-publish"
        id "com.google.cloud.artifactregistry.gradle-plugin" version "2.2.5"
      }
      
      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"
        }
      }
      
      • בקטע plugins מצהירים על התוסף Artifact Registry. מידע על הפלאגין זמין במאמרי העזרה בנושא כלים של Artifact Registry Maven.

      • בקטע publishing מגדירים את הקבצים שרוצים להעלות ואת מאגר היעד ב-Artifact Registry. כשמוכנים להעלות, אפשר לעדכן את רשימת הקבצים בקטע publications. מידע על הגדרות הפרסום זמין במסמכי העזרה של Maven Publish plugin.

    מרחוק או וירטואלי

    מוסיפים את הגדרות המאגר לקובץ build.gradle.

    בדוגמה הבאה מוצגות הגדרות של מאגר מרוחק. בדוגמה הזו, הפרויקט תלוי בגרסה של חבילת Guava.

    plugins {
      id 'java'
      id "maven-publish"
      id "com.google.cloud.artifactregistry.gradle-plugin" version "2.2.5"
      id 'maven'
    }
    
    repositories {
      maven {
        url "artifactregistry://LOCATION-maven.pkg.dev /PROJECT_ID/REMOTE-REPOSITORY-NAME"
      }
    }
    dependencies {
      compile "com.google.guava:guava:31.1-jre"
    }
    
    • בקטע plugins מצהירים על התוסף Artifact Registry. מידע על הפלאגין זמין במאמרי העזרה בנושא כלים של Artifact Registry Maven.

    • בקטע repositories מוגדר מאגר Artifact Registry.

    • בדוגמה הזו, בקטע dependencies מוגדרת תלות בחבילה Guava בגרסה 31.1-jre.

    מגדירים את יחסי התלות של החבילה בקטע dependencies.

  2. אם אתם צריכים להשתמש במאגרים בקובץ init.gradle או settings.gradle, אתם יכולים להוסיף את הגדרת הפלאגין לקבצים האלה.

    מוסיפים את ההגדרה הבאה ל-init.gradle:

    initscript {
      repositories {
        maven {
          url "https://plugins.gradle.org/m2/"
        }
      }
      dependencies {
        classpath "gradle.plugin.com.google.cloud.artifactregistry:artifactregistry-gradle-plugin:2.2.5"
      }
    }
    apply plugin: com.google.cloud.artifactregistry.gradle.plugin.ArtifactRegistryGradlePlugin
    

    בקובץ settings.gradle, מוסיפים את ההגדרה הבאה:

    buildscript {
      repositories {
        maven {
          url "https://plugins.gradle.org/m2/"              }
        }
      dependencies {
        classpath "gradle.plugin.com.google.cloud.artifactregistry:artifactregistry-gradle-plugin:2.2.5"
      }
    }
    apply plugin: "com.google.cloud.artifactregistry.gradle-plugin"
    

ההגדרה של האימות הושלמה.

הגדרת אימות סיסמה

כדאי להשתמש בגישה הזו כשהאפליקציה שלכם ב-Java דורשת אימות עם שם משתמש וסיסמה ספציפיים.

הגדרה של חשבון שירות לאימות באמצעות סיסמה

כדי ליצור חשבון שירות:

  1. יוצרים חשבון שירות שיפעל בשם האפליקציה, או בוחרים חשבון שירות קיים שמשמש לאוטומציה.

    כדי להגדיר אימות באמצעות Artifact Registry, תצטרכו את המיקום של קובץ המפתח של חשבון השירות. בחשבונות קיימים, אפשר לראות את המפתחות וליצור מפתחות חדשים בדף Service Accounts.

    מעבר לדף 'חשבונות שירות'

  2. כדי להפעיל את חשבון השירות בסשן הנוכחי של ה-CLI של gcloud, מריצים את הפקודה:

    gcloud auth activate-service-account ACCOUNT --key-file=KEY-FILE
    

    כאשר:

    • ‫ACCOUNT הוא המשתמש או חשבון השירות.
    • ‫KEY-FILE הוא הנתיב לקובץ המפתח של חשבון השירות בפורמט JSON.

הגדרת Maven

  1. מגדירים את Maven לפי סוג המאגר שבו משתמשים.

    רגילה

    1. מריצים את הפקודה הבאה כדי להדפיס את הגדרות המאגר ולהוסיף אותן לפרויקט ב-Java.

      gcloud artifacts print-settings mvn \
          --project=PROJECT \
          --repository=REPOSITORY \
          --location=LOCATION \
          --json-key=KEY-FILE
      

      כאשר:

      • ‫PROJECT הוא מזהה הפרויקט. אם לא מציינים את הדגל הזה, המערכת משתמשת בפרויקט ברירת המחדל או בפרויקט הנוכחי.
      • ‫REPOSITORY הוא המזהה של המאגר. אם הגדרתם מאגר ברירת מחדל של Artifact Registry, המערכת תשתמש בו אם לא תציינו את הדגל הזה בפקודה.
      • ‫LOCATION הוא המיקום האזורי או המיקום במספר אזורים של המאגר.
      • ‫KEY-FILE הוא הנתיב לקובץ מפתח JSON של חשבון השירות.

    הפקודה מחזירה הגדרות שצריך לכלול בפרויקט Java, כולל גרסה בקידוד base64 של המפתח הפרטי.

    1. מוסיפים את הגדרות המאגר שהוחזרו ברכיב <project> לקטעים המתאימים בקובץ pom.xml של פרויקט Maven. לפרטים על מבנה הקובץ, עיינו בחומר העזר בנושא POM של Maven.
    <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>
    

    הרכיבים <release> ו-<snapshot> מציינים אם המאגר מאחסן חבילות של גרסאות, חבילות של תמונות מצב או את שתיהן. ההגדרות האלה צריכות להתאים למדיניות הגרסאות של המאגר.

    1. מוסיפים את הגדרות האימות שהוחזרו ברכיב <settings> לקטע <servers> בקובץ ~/.m2/settings.xml. בדוגמה הבאה, KEY הוא המפתח בקידוד Base64 מקובץ המפתח.

    מידע נוסף מופיע בהפניה להגדרות של Maven.

    <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>
    

    מרחוק או וירטואלי

    1. מוסיפים את הגדרות המאגר לקטעים המתאימים בקובץ pom.xml של פרויקט Maven. פרטים על מבנה הקובץ מופיעים בהפניה ל-POM של Maven.

      <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>
      

    בקטע <repositories> מוגדר מאגר Artifact Registry. במאגר מרוחק, צריך להגדיר את הרכיב <id> בתור central. ההגדרה הזו מבטלת את ערך ברירת המחדל של מזהה המאגר central שעובר בירושה מ-Super POM.

    1. מקודדים את קובץ המפתח ב-Base64 באמצעות הפקודה הבאה. מחליפים את KEY-FILE בשם של קובץ המפתח.

      base64 -w 0 KEY-FILE
      
    2. מוסיפים הגדרות אימות ברכיב <settings> לקטע <servers> בקובץ ~/.m2/settings.xml.

    מידע נוסף מופיע בהסבר על ההגדרות של Maven.

    <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>
    
    1. אם אתם משתמשים בנקודות קצה של HTTP ורוצים להשתמש בקישוריות Maven native לאימות, אתם יכולים להעביר כותרת אימות באמצעות כותרת Custom HTTP ב-settings.xml.

    דוגמה:

    <settings>
    <servers>
      <server>
        <id>artifact-registry</id>
        <configuration>
          <httpHeaders>
            <property>
              <name>Authorization </name>
              <value>Bearer ${artifact.registry.token}</value>
            </property>
          </httpHeaders>
          <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>
      </server>
    </servers>
    </settings>
    

הגדרת האימות הושלמה.

הגדרת Gradle

  1. מגדירים את Gradle בהתאם לסוג המאגר שבו משתמשים.

    רגילה

    1. מריצים את הפקודה הבאה כדי להדפיס את הגדרות המאגר ולהוסיף אותן לפרויקט ב-Java.

      gcloud artifacts print-settings gradle \
          --project=PROJECT \
          --repository=REPOSITORY \
          --location=LOCATION \
          --json-key=KEY-FILE
      

      כאשר:

      • ‫PROJECT הוא מזהה הפרויקט.
      • ‫REPOSITORY הוא המזהה או המזהה המוגדר במלואו של המאגר. אם הגדרתם מאגר ברירת מחדל של Artifact Registry, המערכת תשתמש בו אם לא תציינו את הדגל הזה בפקודה.
      • ‫KEY-FILE הוא הנתיב לקובץ מפתח JSON של חשבון השירות. אם הרצתם את הפקודה להפעלת חשבון השירות, אתם יכולים להשמיט את הדגל הזה.

      הפקודה מחזירה הגדרות שצריך לכלול בפרויקט Java, כולל גרסה בקידוד base64 של המפתח הפרטי.

    2. השורה הבאה מההגדרה שמוחזרת מגדירה משתנה בשם artifactRegistryMavenSecret למפתח של חשבון השירות. מוסיפים את השורה הזו לקובץ ~/.gradle/gradle.properties כדי שהמפתח לא יהיה גלוי בגרסאות ה-build או במאגר של בקרת המקור.

      artifactRegistryMavenSecret = KEY
      

      בשורה הזו, KEY הוא המפתח הפרטי בקובץ המַפְתח של חשבון השירות. במקרה של _json_key_base64, הערך של artifactRegistryMavenSecret מוגדר כמפתח בקידוד base64 בתור הסיסמה.

    3. מציינים את הגדרות המאגר בקובץ build.gradle:

      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)
          }
        }
      }
      
      • בקטע repositories מגדירים את כתובת ה-URL של המאגר ואת פרטי הכניסה לאימות.
      • בקטע publishing מגדירים את הקבצים שרוצים להעלות ואת מאגר היעד ב-Artifact Registry. כשתהיו מוכנים להעלות את הקבצים, תוכלו לעדכן את רשימת הקבצים בקטע publications. מידע על הגדרות הפרסום זמין במסמכי התיעוד של הפלאגין Maven Publish.

    מרחוק או וירטואלי

    1. מבצעים קידוד Base64 של קובץ המפתח באמצעות הפקודה הבאה. מחליפים את KEY-FILE בשם של קובץ המפתח.

      base64 -w 0 KEY-FILE
      
    2. בקובץ ~/.gradle/gradle.properties, מוסיפים את השורה הבאה כדי שהמפתח לא יוצג בגרסאות או במאגר של בקרת המקור.

      artifactRegistryMavenSecret = KEY
      

      בשורה הזו, KEY הוא התוכן של קובץ המפתח בקידוד base64.

    3. מוסיפים את הגדרות המאגר לקובץ build.gradle.

    בדוגמה הבאה מוצגת הגדרה של מאגר מרוחק.

    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"
      }
    
    • בקטע repositories מוגדר מאגר Artifact Registry.

    • בדוגמה הזו, בקטע dependencies מוגדרת תלות בחבילה Guava בגרסה 31.1-jre.

    מגדירים את יחסי התלות של החבילה בקטע dependencies.

ההגדרה של האימות הושלמה.

המאמרים הבאים