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

1. بررسی اجمالی

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

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

آنچه خواهید آموخت

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

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

2. راه اندازی و الزامات

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

gcloud را راه اندازی کنید

در 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 در GitHub قرار دارد. با دستور زیر آن را کلون کنید سپس به دایرکتوری تغییر دهید.

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

3. کار با تصاویر ظرف

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

Artifact Registry از مدیریت تصاویر کانتینر و بسته های زبان پشتیبانی می کند. انواع مختلف مصنوعات به مشخصات متفاوتی نیاز دارند. برای مثال درخواست‌های وابستگی‌های 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 ظاهر شد روی Authorize کلیک کنید

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

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

هنگام اتصال به 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 درخواست می‌کند، اینتر را فشار دهید.

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

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

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

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

تصویر کانتینر را بسازید

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

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

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

تصویر را در Artifact Registry مرور کنید

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

9cb46d3689b3ed2.png

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

c2a961e6218d5a45.png

4. کار با بسته های زبان

در این بخش نحوه راه‌اندازی یک مخزن جاوا 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 ظاهر شد روی Authorize کلیک کنید

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

احراز هویت را در مخزن Artifact تنظیم کنید

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

gcloud auth login --update-adc

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

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

cloudshell workspace .

با کلیک بر روی "سایت در حال حاضر کار می کند؟"، کوکی های شخص ثالث را فعال کنید. و سپس "Allow cookies".

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

62328383ea59b30c.png

a9d756bf08575b0d.png

pom.xml را در Cloud Shell Editor باز کنید، روی "Open Editor" کلیک کنید.

95d98e831787b2ff.png

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

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 Registry آپلود کنید

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

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

mvn deploy

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

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

e348d976ac1ac107.png

5. تبریک می گویم!

تبریک می گویم، شما نرم افزار کد را تمام کردید!

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

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

پاک کردن

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

gcloud projects delete $PROJECT_ID