آرتیفکت رجیستری دیپ دیو

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 فعال کنید . اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. برای اینکه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید، دستورالعمل‌های «پاک‌سازی» را که در انتهای Codelab یافت می‌شود دنبال کنید. کاربران جدید 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/

زیرساخت های مورد استفاده در این آزمایشگاه را فراهم کنید

در این آزمایشگاه شما کد را برای GKE مستقر خواهید کرد. اسکریپت راه اندازی زیر این زیرساخت را برای شما آماده می کند.

gcloud container clusters create container-dev-cluster --zone=us-central1-b

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 روی هر آسیب‌پذیری فهرست‌شده کلیک کنید تا جزئیات بیشتری را دریافت کنید:

2b17e9d26d9dd7ea.png

4. یکپارچه سازی با کد ابری

در این بخش نحوه استفاده از مخزن تصویر Artifact Registry Docker با Cloud Code را مشاهده خواهید کرد.

برنامه را از Cloud Code در GKE Cluster مستقر کنید

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

cloudshell workspace .

ویرایشگر Cloud Shell با کاوشگر در پوشه برنامه باز می شود.

اگر یک پاپ آپ دریافت کردید که می خواهد فایل های تنظیمات پروژه جاوا را از فضای کاری حذف کنید، روی Exclude in workspace کلیک کنید.

مراحل زیر شما را ملزم می کند که مکان مخزن رجیستری Artifact خود را وارد کنید. فرمت مکان این است:

us-central1-docker.pkg.dev/<PROJECT_ID>/container-dev-repo

برای پیدا کردن PROJECT_ID خود دستور زیر را در ترمینال اجرا کنید

gcloud config get project

روی نوار وضعیت Cloud Code (در گوشه پایین سمت چپ) کلیک کنید و سپس Run on Kubernetes را انتخاب کنید

e6e2b06467228e18.png

هنگامی که از شما خواسته شد گزینه Yes را انتخاب کنید تا از زمینه فعلی در kubeconfig استفاده کنید که به کلاستر container-dev-cluster GKE ارائه شده برای آزمایشگاه اشاره می کند.

قبل از اینکه مطمئن شوید که <PROJECT_ID> را جایگزین مقدار واقعی خود کنید، در درخواست رجیستری تصویر، مکان آدرسی را که قرار داده اید قرار دهید.

us-central1-docker.pkg.dev/<PROJECT_ID>/container-dev-repo

وقتی برای اولین بار Run را در Kubernetes اجرا می کنید، Cloud Code از شما می خواهد مکان مخزن تصویر مورد نظر را انتخاب کنید. پس از ارائه، url مخزن در فایل .vscode/launch.json که در پوشه برنامه ایجاد می شود، ذخیره می شود.

در پنجره خروجی مشاهده می کنید که ساختن برای تصویر برنامه java-hello-world, تصویر در مخزن رجیستری Artifact که قبلاً پیکربندی شده بود آپلود می شود.

به Cloud Console بروید - Artifact Registry - Repositories روی container-dev-repo کلیک کنید و بررسی کنید که تصویر java-hello-world را بررسی کنید و یک تصویر جدید را با برچسب latest یادداشت کنید.

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

به Cloud Shell Editor برگردید: وقتی استقرار کامل شد Skaffold/Cloud Code نشانی اینترنتی در معرض دید را که در آن سرویس ارسال شده است چاپ می‌کند، روی پیوند کلیک کنید - باز کردن پیش‌نمایش وب:

33257a43826b88ff.png

در پنجره مرورگر جدید صفحه برنامه hello world را مشاهده خواهید کرد

d3e49693b0383a5d.png

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

اکنون برنامه را به روز کنید تا تغییرات را بلافاصله در استقرار در خوشه مشاهده کنید:

پوشه HelloWorldController.java را در پوشه src/main/java/cloudcode/helloworld/web در Cloud Shell Editor باز کنید.

متن ردیف 20 را از "در حال اجراست!" به ""به روز شد!"، باید ببینید که فرآیند ساخت و استقرار بلافاصله شروع می شود.

در پایان استقرار مجدداً روی آدرس اینترنتی ارسال‌شده کلیک کنید یا پنجره مرورگر را با برنامه بازخوانی کنید تا تغییر خود را مشاهده کنید:

41787b1da54ff137.png

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

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

در این بخش نحوه راه‌اندازی یک مخزن جاوا 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 را برای رجیستری مصنوع پیکربندی کنید

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

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

pom.xml را در Cloud Shell Editor باز کنید و تنظیمات بازگشتی را به بخش های مربوطه در فایل اضافه کنید.

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

<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

6. تبریک!

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

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

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

پاک کردن

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

gcloud projects delete $PROJECT_ID