درباره این codelab
1. نمای کلی
با تکامل Container Registry، Artifact Registry مکانی واحد برای سازمان شما برای مدیریت تصاویر کانتینر و بستههای زبانی (مانند Maven و npm) است. این به طور کامل با ابزار Google Cloud و زمان اجرا یکپارچه شده است و با پشتیبانی از مدیریت وابستگی مبتنی بر زبان برای استفاده با ابزارهایی مانند npm و Maven ارائه می شود. این امر ادغام آن را با ابزار CI/CD برای راه اندازی خطوط لوله خودکار ساده می کند.
این آزمایشگاه شما را از طریق برخی از ویژگی های موجود در Artifact Registry راهنمایی می کند.
آنچه خواهید آموخت
اهداف آموزشی این آزمایشگاه چیست؟
- ایجاد مخازن برای کانتینرها و بسته های زبان
- تصاویر کانتینر را با رجیستری مصنوع مدیریت کنید
- رجیستری مصنوع را با کد ابری یکپارچه کنید
- Maven را برای استفاده از Artifact Registry برای وابستگی های جاوا پیکربندی کنید
2. راه اندازی و الزامات
تنظیم محیط خود به خود
- به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .
- نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود و می توانید هر زمان که بخواهید آن را به روز کنید.
- شناسه پروژه باید در تمام پروژههای Google Cloud منحصربهفرد باشد و تغییرناپذیر باشد (پس از تنظیم نمیتوان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید به شناسه پروژه ارجاع دهید (و معمولاً به عنوان
PROJECT_ID
شناخته میشود)، بنابراین اگر آن را دوست ندارید، یک نمونه تصادفی دیگر ایجاد کنید، یا میتوانید شناسه پروژه را امتحان کنید و ببینید در دسترس است. سپس پس از ایجاد پروژه "یخ زده" می شود. - یک مقدار سوم وجود دارد، یک شماره پروژه که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
- در مرحله بعد، برای استفاده از منابع 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
توجه کنید. می بینید که اسکن آسیب پذیری در حال اجرا است یا قبلاً تکمیل شده است و تعداد آسیب پذیری های شناسایی شده قابل مشاهده است.
روی تعداد آسیبپذیریها کلیک کنید و لیست آسیبپذیریهای شناساییشده در تصویر را مشاهده میکنید، با نام بولتن CVE و شدت، میتوانید روی VIEW روی هر آسیبپذیری فهرستشده کلیک کنید تا جزئیات بیشتری را دریافت کنید:
4. ادغام با Cloud Code
در این بخش نحوه استفاده از مخزن تصویر 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
را انتخاب کنید
هنگامی که از شما خواسته شد گزینه 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 نشانی اینترنتی در معرض دید را که در آن سرویس ارسال شده است چاپ میکند، روی پیوند کلیک کنید - باز کردن پیشنمایش وب:
در پنجره مرورگر جدید صفحه برنامه hello world را مشاهده خواهید کرد
کد برنامه را به روز کنید
اکنون برنامه را به روز کنید تا تغییرات را بلافاصله در استقرار در خوشه مشاهده کنید:
پوشه HelloWorldController.java
را در پوشه src/main/java/cloudcode/helloworld/web
در Cloud Shell Editor باز کنید.
متن ردیف 20 را از "در حال اجراست!" به ""به روز شد!"، باید ببینید که فرآیند ساخت و استقرار بلافاصله شروع می شود.
در پایان استقرار مجدداً روی آدرس اینترنتی ارسالشده کلیک کنید یا پنجره مرورگر را با برنامه بازخوانی کنید تا تغییر خود را مشاهده کنید:
دوباره به 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
در آنجا وجود دارد:
6. تبریک می گویم!
تبریک می گویم، شما نرم افزار کد را تمام کردید!
آنچه شما پوشش داده اید
- ایجاد مخازن برای کانتینرها و بسته های زبان
- تصاویر کانتینر مدیریت شده با رجیستری مصنوع
- رجیستری مصنوع یکپارچه با کد ابری
- Maven را برای استفاده از Artifact Registry برای وابستگی های جاوا پیکربندی کرد
پاکسازی
دستور زیر را برای حذف پروژه اجرا کنید
gcloud projects delete $PROJECT_ID