مدیریت وابستگی با Artifact Registry

۱. مرور کلی

به عنوان تکامل Container Registry، Artifact Registry مکانی واحد برای سازمان شما جهت مدیریت تصاویر کانتینر و بسته‌های زبانی (مانند Maven و npm) است. این رجیستری کاملاً با ابزارها و زمان‌های اجرای Google Cloud یکپارچه شده است و از مدیریت وابستگی مبتنی بر زبان برای استفاده با ابزارهایی مانند npm و Maven پشتیبانی می‌کند. این امر ادغام آن با ابزارهای CI/CD شما را برای راه‌اندازی خطوط لوله خودکار ساده می‌کند.

این آزمایش شما را با برخی از ویژگی‌های موجود در Artifact Registry آشنا می‌کند.

آنچه یاد خواهید گرفت

اهداف آموزشی این آزمایشگاه چیست؟

  • ایجاد مخازن برای کانتینرها و بسته‌های زبان
  • مدیریت تصاویر کانتینر با رجیستری Artifact
  • پیکربندی Maven برای استفاده از Artifact Registry برای وابستگی‌های جاوا

۲. تنظیمات و الزامات

تنظیم محیط خودتنظیم

  1. وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب جیمیل یا گوگل ورک اسپیس ندارید، باید یکی ایجاد کنید .

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • نام پروژه ، نام نمایشی برای شرکت‌کنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمی‌شود. می‌توانید آن را در هر زمانی به‌روزرسانی کنید.
  • شناسه پروژه در تمام پروژه‌های گوگل کلود منحصر به فرد است و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید می‌کند؛ معمولاً برای شما مهم نیست که چیست. در اکثر آزمایشگاه‌های کد، باید به شناسه پروژه ارجاع دهید (که معمولاً با عنوان PROJECT_ID شناخته می‌شود). اگر شناسه تولید شده را دوست ندارید، می‌توانید یک شناسه تصادفی دیگر ایجاد کنید. به عنوان یک جایگزین، می‌توانید شناسه خودتان را امتحان کنید و ببینید که آیا در دسترس است یا خیر. پس از این مرحله قابل تغییر نیست و در طول پروژه باقی خواهد ماند.
  • برای اطلاع شما، یک مقدار سوم هم وجود دارد، شماره پروژه که برخی از APIها از آن استفاده می‌کنند. برای کسب اطلاعات بیشتر در مورد هر سه این مقادیر، به مستندات مراجعه کنید.
  1. در مرحله بعد، برای استفاده از منابع/API های ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد، اگر اصلاً هزینه‌ای نداشته باشد، هزینه زیادی نخواهد داشت. برای خاموش کردن منابع به طوری که پس از این آموزش متحمل پرداخت صورتحساب نشوید، می‌توانید منابعی را که ایجاد کرده‌اید یا کل پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.

جی کلود را تنظیم کنید

در Cloud Shell، شناسه پروژه و شماره پروژه خود را تنظیم کنید. آنها را به عنوان متغیرهای PROJECT_ID و PROJECT_NUMBER ذخیره کنید.

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')

فعال کردن سرویس‌های گوگل

gcloud services enable \
  cloudresourcemanager.googleapis.com \
  container.googleapis.com \
  artifactregistry.googleapis.com \
  containerregistry.googleapis.com \
  containerscanning.googleapis.com

دریافت کد منبع

کد منبع این آزمایش در سایت GoogleCloudPlatform.org در گیت‌هاب قرار دارد. آن را با دستور زیر کپی کنید و سپس به دایرکتوری مورد نظر بروید.

git clone https://github.com/GoogleCloudPlatform/cloud-code-samples/

۳. کار با تصاویر کانتینر

ایجاد مخزن داکر در رجیستری Artifact

رجیستری مصنوعات از مدیریت تصاویر کانتینر و بسته‌های زبانی پشتیبانی می‌کند. انواع مختلف مصنوعات به مشخصات متفاوتی نیاز دارند. به عنوان مثال، درخواست‌های مربوط به وابستگی‌های Maven با درخواست‌های مربوط به وابستگی‌های Node متفاوت است.

برای پشتیبانی از مشخصات مختلف API، Artifact Registry باید بداند که می‌خواهید پاسخ‌های API از چه فرمتی پیروی کنند. برای انجام این کار، یک مخزن ایجاد می‌کنید و پرچم --repository-format را که نوع مخزن مورد نظر را نشان می‌دهد، به آن ارسال می‌کنید.

از Cloud Shell دستور زیر را برای ایجاد مخزنی برای تصاویر Docker اجرا کنید:

gcloud artifacts repositories create container-dev-repo --repository-format=docker \
--location=us-central1 --description="Docker repository for Container Dev Workshop"

اگر پیام مجوز Cloud Shell ظاهر شد، روی تأیید کلیک کنید.

به Google Cloud Console - Artifact Registry - Repositories بروید و مخزن Docker تازه ایجاد شده خود با نام container-dev-repo را مشاهده کنید، اگر روی آن کلیک کنید، می‌بینید که در حال حاضر خالی است.

پیکربندی احراز هویت داکر در رجیستری مصنوعات

هنگام اتصال به Artifact Registry، برای دسترسی به اطلاعات احراز هویت لازم است. به جای تنظیم اطلاعات احراز هویت جداگانه، Docker را می‌توان طوری پیکربندی کرد که از اطلاعات احراز هویت gcloud شما به طور یکپارچه استفاده کند.

از Cloud Shell دستور زیر را برای پیکربندی Docker اجرا کنید تا از Google Cloud CLI برای تأیید اعتبار درخواست‌ها به Artifact Registry در منطقه us-central1 استفاده کند.

gcloud auth configure-docker us-central1-docker.pkg.dev

این دستور از شما می‌خواهد که برای تغییر پیکربندی داکر Cloud Shell، تأیید بگیرید، برای این کار Enter را بزنید.

نمونه برنامه را بررسی کنید

یک برنامه نمونه در مخزن گیت که در مرحله قبل کلون کردید، ارائه شده است. به دایرکتوری جاوا بروید و کد برنامه را بررسی کنید.

cd cloud-code-samples/java/java-hello-world

این پوشه شامل یک برنامه جاوای نمونه است که یک صفحه وب ساده را رندر می‌کند: علاوه بر فایل‌های مختلفی که به این آزمایش خاص مربوط نیستند، شامل کد منبع، در پوشه src ، و یک فایل Dockerfile است که ما برای ساخت یک تصویر کانتینر به صورت محلی از آن استفاده خواهیم کرد.

ساخت تصویر کانتینر

قبل از اینکه بتوانید تصاویر کانتینر را در رجیستری Artifact ذخیره کنید، باید یکی ایجاد کنید.

دستور زیر را اجرا کنید تا تصویر کانتینر ساخته شود و به درستی برچسب‌گذاری شود تا در مرحله بعد به مخزن شما ارسال شود:

docker build -t us-central1-docker.pkg.dev/$PROJECT_ID/container-dev-repo/java-hello-world:tag1 .

تصویر کانتینر را به رجیستری مصنوعات منتقل کنید

دستور زیر را برای ارسال تصویر کانتینر به مخزنی که قبلاً ایجاد شده است، اجرا کنید:

docker push us-central1-docker.pkg.dev/$PROJECT_ID/container-dev-repo/java-hello-world:tag1

تصویر موجود در رجیستری مصنوعات را بررسی کنید

به Google Cloud Console - Artifact Registry - Repositories بروید . روی container-dev-repo کلیک کنید و بررسی کنید که تصویر java-hello-world در آنجا وجود دارد. روی تصویر کلیک کنید و به تصویر با برچسب tag1 توجه کنید. می‌توانید ببینید که اسکن آسیب‌پذیری در حال اجرا است یا قبلاً تکمیل شده است و تعداد آسیب‌پذیری‌های شناسایی شده قابل مشاهده است.

9cb46d3689b3ed2.png

روی تعداد آسیب‌پذیری‌ها کلیک کنید تا فهرست آسیب‌پذیری‌های شناسایی‌شده در تصویر، به همراه نام بولتن CVE و شدت آن را مشاهده کنید. می‌توانید برای مشاهده جزئیات بیشتر، روی هر آسیب‌پذیری فهرست‌شده کلیک کنید.

c2a961e6218d5a45.png

۴. کار با بسته‌های زبان

در این بخش، نحوه‌ی راه‌اندازی یک مخزن جاوای Artifact Registry و آپلود بسته‌ها به آن و استفاده از آن‌ها در برنامه‌های مختلف را خواهید دید.

ایجاد مخزن بسته‌های جاوا

از Cloud Shell دستور زیر را برای ایجاد مخزنی برای مصنوعات جاوا اجرا کنید:

gcloud artifacts repositories create container-dev-java-repo \
    --repository-format=maven \
    --location=us-central1 \
    --description="Java package repository for Container Dev Workshop"

اگر پیام مجوز Cloud Shell ظاهر شد، روی تأیید کلیک کنید.

به Google Cloud Console - Artifact Registry - Repositories بروید و مخزن Maven تازه ایجاد شده خود با نام container-dev-java-repo را مشاهده کنید، اگر روی آن کلیک کنید، می‌بینید که در حال حاضر خالی است.

تنظیم احراز هویت برای مخزن مصنوعات

از دستور زیر برای به‌روزرسانی مکان شناخته‌شده‌ی Application Default Credentials (ADC) با اطلاعات حساب کاربری خود استفاده کنید تا ابزار کمکی اعتبارنامه‌ی Artifact Registry بتواند هنگام اتصال به مخازن، با استفاده از آن‌ها احراز هویت کند:

gcloud auth login --update-adc

پیکربندی Maven برای رجیستری مصنوعات

دستور زیر را از پوشه java-hello-world اجرا کنید تا ویرایشگر Cloud Shell باز شود و پوشه برنامه را به فضای کاری خود اضافه کنید:

cloudshell workspace .

کوکی‌های شخص ثالث را با کلیک روی «سایت اکنون کار می‌کند؟» و سپس «اجازه دادن به کوکی‌ها» فعال کنید.

پس از بارگذاری مجدد مرورگر، Cloud Shell را باز کنید و دستور بالا را یک بار دیگر اجرا کنید تا پوشه برنامه بارگذاری شود.

۶۲۳۲۸۳۸۳ea59b30c.png

a9d756bf08575b0d.png

فایل pom.xml را در ویرایشگر Cloud Shell باز کنید، روی «باز کردن ویرایشگر» کلیک کنید.

95d98e831787b2ff.png

ترمینال را از ویرایشگر Cloud Shell باز کنید و دستور زیر را برای چاپ پیکربندی مخزن جهت افزودن به پروژه جاوا خود اجرا کنید:

gcloud artifacts print-settings mvn \
    --repository=container-dev-java-repo \
    --location=us-central1

و تنظیمات برگردانده شده را به بخش‌های مناسب در فایل pom.xml اضافه کنید.

نمای ویرایشگر ابری با ترمینال داخلی:

33c3bfa412b7babd.png

بخش مدیریت توزیع را به‌روزرسانی کنید

<distributionManagement>
   <snapshotRepository>
     <id>artifact-registry</id>
     <url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
   </snapshotRepository>
   <repository>
     <id>artifact-registry</id>
     <url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
   </repository>
</distributionManagement>

بخش مخازن را به‌روزرسانی کنید

 <repositories>
   <repository>
     <id>artifact-registry</id>
     <url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
     <releases>
       <enabled>true</enabled>
     </releases>
     <snapshots>
       <enabled>true</enabled>
     </snapshots>
   </repository>
 </repositories>

افزونه‌ها را به‌روزرسانی کنید

<extensions>
     <extension>
       <groupId>com.google.cloud.artifactregistry</groupId>
       <artifactId>artifactregistry-maven-wagon</artifactId>
       <version>2.1.0</version>
     </extension>
   </extensions>

در اینجا نمونه‌ای از فایل کامل برای مرجع شما آورده شده است. حتماً <PROJECT> را با شناسه پروژه خود جایگزین کنید.

<?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>
 
 <artifactId>hello-world</artifactId>
 <packaging>jar</packaging>
 <name>Cloud Code Hello World</name>
 <description>Getting started with Cloud Code</description>
 <version>1.0.0</version>
<distributionManagement>
   <snapshotRepository>
     <id>artifact-registry</id>
     <url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
   </snapshotRepository>
   <repository>
     <id>artifact-registry</id>
     <url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
   </repository>
 </distributionManagement>
 
 <repositories>
   <repository>
     <id>artifact-registry</id>
     <url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
     <releases>
       <enabled>true</enabled>
     </releases>
     <snapshots>
       <enabled>true</enabled>
     </snapshots>
   </repository>
 </repositories>
 
 <parent>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-parent</artifactId>
   <version>2.6.3</version>
 </parent>
 
 <properties>
   <java.version>1.8</java.version>
   <checkstyle.config.location>./checkstyle.xml</checkstyle.config.location>
 </properties>
 
 <build>
   <plugins>
     <plugin>
       <groupId>com.google.cloud.tools</groupId>
       <artifactId>jib-maven-plugin</artifactId>
       <version>3.2.0</version>
     </plugin>
     <plugin>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-maven-plugin</artifactId>
     </plugin>
     <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-checkstyle-plugin</artifactId>
       <version>3.1.2</version>
     </plugin>
   </plugins>
   <extensions>
     <extension>
       <groupId>com.google.cloud.artifactregistry</groupId>
       <artifactId>artifactregistry-maven-wagon</artifactId>
       <version>2.1.0</version>
     </extension>
   </extensions>
 </build>
 
 <!-- The Spring Cloud GCP BOM will manage spring-cloud-gcp version numbers for you. -->
 <dependencyManagement>
   <dependencies>
     <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-gcp-dependencies</artifactId>
       <version>1.2.8.RELEASE</version>
       <type>pom</type>
       <scope>import</scope>
     </dependency>
   </dependencies>
 </dependencyManagement>
  
 <dependencies>
 
   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter</artifactId>
   </dependency>
 
   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-jetty</artifactId>
   </dependency>
 
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-webmvc</artifactId>
   </dependency>
 
   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-thymeleaf</artifactId>
   </dependency>
 
   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-test</artifactId>
     <scope>test</scope>
   </dependency>
 
   <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-gcp-starter-logging</artifactId>
   </dependency>
      
 </dependencies>
 
</project>

بسته جاوا خود را در رجیستری Artifact آپلود کنید

با پیکربندی Artifact Registry در Maven، اکنون می‌توانید از Artifact Registry برای ذخیره Java Jarها جهت استفاده توسط سایر پروژه‌های سازمان خود استفاده کنید.

دستور زیر را برای آپلود بسته جاوا در رجیستری Artifact اجرا کنید:

mvn deploy

بسته جاوا را در رجیستری Artifact بررسی کنید

به Cloud Console - Artifact Registry - Repositories بروید و روی container-dev-java-repo کلیک کنید و بررسی کنید که فایل باینری hello-world در آنجا وجود داشته باشد:

e348d976ac1ac107.png

۵. تبریک می‌گویم!

تبریک می‌گویم، شما codelab را تمام کردید!

آنچه شما پوشش داده‌اید

  • مخازن ایجاد شده برای کانتینرها و بسته‌های زبان
  • تصاویر کانتینر مدیریت‌شده با رجیستری مصنوعات
  • Maven برای استفاده از Artifact Registry برای وابستگی‌های جاوا پیکربندی شد

پاکسازی

برای حذف پروژه دستور زیر را اجرا کنید

gcloud projects delete $PROJECT_ID