הגדרת אימות למאגרי Ruby gem ב-Artifact Registry

בדף הזה מוסבר איך להגדיר אימות למאגר Ruby gem ב-Artifact Registry.

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

לא צריך להגדיר אימות ל-Cloud Build או לסביבות זמן ריצה כמו Google Kubernetes Engine ו-Cloud Run. Google Cloud

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

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

    gcloud init

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

  5. (אופציונלי) הגדרת ברירות מחדל לפקודות של ה-CLI של gcloud.

סקירה כללית

‫Ruby תומך בשתי שיטות לאימות בקשות למאגר Artifact Registry:

  • ממשק ה-CLI של RubyGems: תומך בבקשות push ו-pull. ה-CLI הזה זמין כברירת מחדל עם Ruby. כשאתם מבצעים אימות באמצעות RubyGems, אתם צריכים לבצע אימות בכל פעם שאתם שולחים בקשת push או pull למאגר.
  • Bundler CLI: תומך בבקשות משיכה. ‫Bundler מאחסן חבילות ועדכונים בקובץ gemfile, שמאפשר למשתמשים ליצור הגדרות סטנדרטיות בכמה מכונות בלי צורך לאמת כל בקשת משיכה בנפרד. עם זאת, עדיין צריך לאמת מחדש את פרטי הכניסה ל-Bundler מדי פעם.

    כדי להתקין את Bundler CLI, מזינים את הפקודה gem install bundler.

אימות באמצעות RubyGems CLI

ה-CLI של RubyGems משתמש באסימוני OAuth2 כדי לאמת בקשה. כדי להעביר אסימוני OAuth2 לקריאות למאגרי Artifact Registry, צריך קודם ליצור את האסימון ואז להעביר אותו עם הכתובת של המאגר כששולחים בקשה. משך החיים של האסימונים הוא שעה אחת, ולכן צריך לרענן אותם כל שעה.

אימות של בקשות משיכה

אפשר לאמת בקשת משיכה בשורת הפקודה של Google Cloud CLI או על ידי עדכון הקובץ .gemrc.

אימות בקשות משיכה בשורת הפקודה

כדי לבצע אימות לגרסה העדכנית של ה-gem בבקשת משיכה, מריצים את הפקודה הבאה:

export GEM_TOKEN="oauth2accesstoken:$(gcloud auth print-access-token)"
gem install GEM_NAME --source https://$GEM_TOKEN@LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY

כדי לבצע אימות לגרסה ספציפית של Gem, מוסיפים את האפשרות -v GEM_VERSION לפקודה gem install.

כאשר:

  • GEM_NAME הוא שם ה-Gem שעבורו מוגשת הבקשה.
  • LOCATION הוא המיקום האזורי או המיקום במספר אזורים של המאגר.
  • PROJECT הוא מזהה הפרויקט שמכיל את המאגר.
  • REPOSITORY הוא המזהה של המאגר.

אימות בקובץ .gemrc

כדי להגדיר אימות למקורות בבקשות משיכה, אפשר להוסיף את השורות הבאות לקובץ /.gemrc הגלובלי או הספציפי לפרויקט:

# File: ~/.gemrc

# Use the GEM_TOKEN retrieved from export GEM_TOKEN="oauth2accesstoken:$(gcloud auth print-access-token)"

<...>
:sources:
    - https://GEM_TOKEN@LOCATION-ruby.pkg.dev/PROJECT/REPO/
<...>

כדי להתקין gem באמצעות המקור או המקורות שמוגדרים בקובץ /.gemrc, מריצים את הפקודה:

gem install GEM_NAME

אימות בקשות Push

אפשר לאמת בקשת push בשורת הפקודה של Google Cloud CLI או לעדכן את קובץ פרטי הכניסה.

אימות בקשות push בשורת הפקודה

כדי לאמת את בקשת הדחיפה, מריצים את הפקודה הבאה:

export GEM_HOST_API_KEY="Bearer $(gcloud auth print-access-token)"
gem push GEM_NAME --host https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY

כאשר:

  • GEM_NAME הוא שם ה-Gem שעבורו מוגשת הבקשה.
  • LOCATION הוא המיקום האזורי או המיקום במספר אזורים של המאגר.
  • PROJECT הוא מזהה הפרויקט שמכיל את המאגר.
  • REPOSITORY הוא המזהה של המאגר.

אימות בקשות push בקובץ פרטי כניסה

כלי שורת הפקודה gem משתמש בקובץ ~/.gem/credentials כדי לאחסן מפתחות API לשליחה ולמשיכה של חבילות gem. כדי להגדיר את קובץ פרטי הכניסה לאימות למקורות בבקשות push, מבצעים את הפעולות הבאות:

  1. מריצים את הפקודה הבאה כדי ליצור אסימון גישה מסוג OAuth2:

    gcloud auth print-access-token

    האסימון הזה משמש כמפתח ה-API שלכם ב-Artifact Registry.

  2. מעדכנים את קובץ פרטי הכניסה:

    1. פותחים את ~/.gem/credentials ומוסיפים שורה למאגר. המפתח הוא כתובת ה-URL של המאגר, והערך הוא Bearer, ואחריו האסימון שלכם:

      :rubygems_api_key: RUBYGEMS_ORG_KEY
      https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY: Bearer OAUTH_TOKEN
      

      כאשר:

      • RUBYGEMS_ORG_KEY הוא מפתח ה-API של RubyGems.org.
      • LOCATION הוא המיקום האזורי או המיקום במספר אזורים של המאגר.
      • PROJECT הוא מזהה הפרויקט שמכיל את המאגר.
      • REPOSITORY הוא המזהה של המאגר.
      • OAUTH_TOKEN הוא אסימון הגישה שלכם ל-OAuth2.
    2. דוחפים את האבן. שימו לב שלא צריך להגדיר את GEM_HOST_API_KEY, כי כבר הגדרתם את המפתח בקובץ פרטי הכניסה.

      gem push GEM_NAME --host https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY
      

אימות באמצעות Bundler

Bundler של Ruby מנהל את יחסי התלות של האפליקציה בכמה gems. כדי להגדיר את Bundler:

  1. מוסיפים את הכתובת של המאגר כ-source בקובץ ה-gemfile:

    # Gemfile
    # <...>
    source "https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY"
    
  2. מאמתים את המאגר באמצעות bundle config:

    export GEM_TOKEN="oauth2accesstoken:$(gcloud auth print-access-token)"
    export HOST="https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY"
    bundle config $HOST $GEM_TOKEN
    

כאשר:

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

מדי פעם תצטרכו לאמת מחדש את המאגר המרוחק. במקרה כזה, מריצים את אותה פקודת אימות משלב 2.

מידע נוסף על הגדרת Bundler זמין במאמר Gemfiles במסמכי התיעוד של bundler.io.

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