1. खास जानकारी
आर्टफ़ैक्ट रजिस्ट्री, आपके संगठन के लिए एक ही जगह पर कंटेनर इमेज और भाषा के पैकेज (जैसे, Maven और npm) मैनेज करने की सुविधा है. यह सुविधा, Container Registry के तौर पर विकसित हुई है. इसे Google Cloud के टूल और रनटाइम के साथ पूरी तरह से इंटिग्रेट किया गया है. साथ ही, इसमें भाषा के हिसाब से डिपेंडेंसी मैनेज करने की सुविधा मिलती है. इसका इस्तेमाल npm और Maven जैसे टूल के साथ किया जाता है. इससे, ऑटोमेटेड पाइपलाइन सेट अप करने के लिए, इसे अपने CI/CD टूल के साथ इंटिग्रेट करना आसान हो जाता है.
इस लैब में, आपको Artifact Registry में उपलब्ध कुछ सुविधाओं के बारे में बताया जाएगा.
आपको क्या सीखने को मिलेगा
इस लैब के सीखने के मकसद क्या हैं?
- कंटेनर और भाषा पैकेज के लिए रिपॉज़िटरी बनाना
- Artifact Registry की मदद से कंटेनर इमेज मैनेज करें
- Artifact Registry को Cloud Code के साथ इंटिग्रेट करना
- Java डिपेंडेंसी के लिए Artifact Registry का इस्तेमाल करने के लिए, Maven को कॉन्फ़िगर करना
2. सेटअप और ज़रूरी शर्तें
अपने हिसाब से एनवायरमेंट सेट अप करना
- Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से Gmail या Google Workspace खाता नहीं है, तो आपको नया खाता बनाना होगा.
- प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों के लिए डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करता. साथ ही, आप इसे किसी भी समय अपडेट कर सकते हैं.
- प्रोजेक्ट आईडी, सभी Google Cloud प्रोजेक्ट में यूनीक होना चाहिए. साथ ही, इसे सेट करने के बाद बदला नहीं जा सकता. Cloud Console, अपने-आप एक यूनीक स्ट्रिंग जनरेट करता है. आम तौर पर, आपको यह जानने की ज़रूरत नहीं होती कि यह स्ट्रिंग क्या है. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना होगा. आम तौर पर, इसे
PROJECT_ID
के तौर पर पहचाना जाता है. इसलिए, अगर आपको यह पसंद नहीं है, तो कोई और स्ट्रिंग जनरेट करें या अपनी स्ट्रिंग आज़माकर देखें कि वह उपलब्ध है या नहीं. इसके बाद, प्रोजेक्ट बनाने के बाद इसे "फ़्रीज़" कर दिया जाता है. - तीसरी वैल्यू, प्रोजेक्ट नंबर है. इसका इस्तेमाल कुछ एपीआई करते हैं. दस्तावेज़ में इन तीनों वैल्यू के बारे में ज़्यादा जानें.
- इसके बाद, आपको Cloud के संसाधनों/एपीआई का इस्तेमाल करने के लिए, Cloud Console में बिलिंग की सुविधा चालू करनी होगी. इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. इस ट्यूटोरियल के बाद, आपसे कोई शुल्क न लिया जाए, इसके लिए संसाधनों को बंद करें. इसके लिए, कोडलैब के आखिर में दिए गए "क्लीन-अप" निर्देशों का पालन करें. 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)')
Google की सेवाएं चालू करना
gcloud services enable \
cloudresourcemanager.googleapis.com \
container.googleapis.com \
artifactregistry.googleapis.com \
containerregistry.googleapis.com \
containerscanning.googleapis.com
सोर्स कोड पाना
इस लैब का सोर्स कोड, GitHub पर GoogleCloudPlatform संगठन में मौजूद है. यहां दिए गए निर्देश का इस्तेमाल करके, इसे क्लोन करें. इसके बाद, डायरेक्ट्री में जाएं.
git clone https://github.com/GoogleCloudPlatform/cloud-code-samples/
इस लैब में इस्तेमाल किए जाने वाले इंफ़्रास्ट्रक्चर की जानकारी
इस लैब में, आपको GKE में कोड डिप्लॉय करना होगा. नीचे दी गई सेटअप स्क्रिप्ट आपके लिए यह इन्फ़्रास्ट्रक्चर तैयार करती है.
gcloud container clusters create container-dev-cluster --zone=us-central1-b
3. कंटेनर इमेज के साथ काम करना
आर्टफ़ैक्ट रजिस्ट्री पर Docker डेटा स्टोर करने की जगह बनाएं
Artifact Registry, कंटेनर की इमेज और भाषा के पैकेज को मैनेज करने की सुविधा देती है. अलग-अलग तरह के आर्टफ़ैक्ट के लिए, अलग-अलग खास निर्देशों की ज़रूरत होती है. उदाहरण के लिए, Maven डिपेंडेंसी के अनुरोध, Node डिपेंडेंसी के अनुरोधों से अलग होते हैं.
अलग-अलग एपीआई स्पेसिफ़िकेशन के साथ काम करने के लिए, Artifact Registry को यह पता होना चाहिए कि आपको एपीआई के रिस्पॉन्स किस फ़ॉर्मैट में चाहिए. इसके लिए, आपको एक रिपॉज़िटरी बनानी होगी और --repository-format
फ़्लैग को पास करना होगा. इससे, आपको अपनी पसंद के हिसाब से रिपॉज़िटरी का टाइप पता चलेगा
Docker इमेज का डेटा स्टोर करने की जगह बनाने के लिए, Cloud Shell से यह कमांड चलाएं:
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 - डेटा स्टोर करने की जगहों पर जाएं और देखें कि container-dev-repo
नाम का नया Docker डेटा स्टोर करने की जगह पर जाएं. इस पर क्लिक करने पर आपको दिखेगा कि फ़िलहाल यह खाली है
Artifact Registry में Docker की पुष्टि करने की सुविधा कॉन्फ़िगर करना
Artifact Registry से कनेक्ट करने के लिए, ऐक्सेस देने के लिए क्रेडेंशियल की ज़रूरत होती है. अलग-अलग क्रेडेंशियल सेट अप करने के बजाय, Docker को कॉन्फ़िगर किया जा सकता है, ताकि वह आपके gcloud क्रेडेंशियल का आसानी से इस्तेमाल कर सके.
us-central1
क्षेत्र में Artifact Registry के अनुरोधों की पुष्टि करने के लिए, Google Cloud CLI का इस्तेमाल करने के मकसद से Docker को कॉन्फ़िगर करने के लिए, Cloud Shell से यह कमांड चलाएं,
gcloud auth configure-docker us-central1-docker.pkg.dev
यह कमांड, Cloud Shell के डॉकर कॉन्फ़िगरेशन को बदलने के लिए पुष्टि करने के लिए कहेगा. इसके बाद, Enter दबाएं.
सैंपल ऐप्लिकेशन को एक्सप्लोर करना
पिछले चरण में क्लोन की गई git रिपॉज़िटरी में, ऐप्लिकेशन का एक सैंपल दिया गया है. java डायरेक्ट्री में जाएं और ऐप्लिकेशन कोड की समीक्षा करें.
cd cloud-code-samples/java/java-hello-world
इस फ़ोल्डर में एक उदाहरण के तौर पर, एक ऐसा Java ऐप्लिकेशन मौजूद है जो एक आसान वेब पेज को रेंडर करता है: इस खास लैब के लिए काम न आने वाली कई फ़ाइलों के अलावा, इसमें src
फ़ोल्डर में सोर्स कोड और एक Dockerfile मौजूद है. इसका इस्तेमाल, हम स्थानीय तौर पर कंटेनर इमेज बनाने के लिए करेंगे.
कंटेनर इमेज बनाना
आर्टफ़ैक्ट रजिस्ट्री में कंटेनर इमेज सेव करने से पहले, आपको एक आर्टफ़ैक्ट रजिस्ट्री बनानी होगी.
कंटेनर इमेज बनाने के लिए नीचे दिया गया कमांड चलाएं और अगले चरण में इसे अपने रिपॉज़िटरी में पुश करने के लिए ठीक से टैग करें:
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 - आर्टफ़ैक्ट रजिस्ट्री - रिपॉज़िटरी पर जाएं.
container-dev-repo
पर क्लिक करें और देखें कि java-hello-world
इमेज वहां मौजूद है या नहीं. इमेज पर क्लिक करें और tag1
से टैग की गई इमेज देखें. इससे पता चलता है कि जोखिम की जांच चल रही है या पहले ही पूरी हो चुकी है. साथ ही, जोखिम की संख्या भी दिखती है.
जोखिम की आशंकाओं की संख्या पर क्लिक करें. इसके बाद, आपको इमेज में मिली जोखिम की आशंकाओं की सूची, CVE बुलेटिन नाम और गंभीरता के साथ दिखेगी. ज़्यादा जानकारी के लिए, सूची में शामिल हर जोखिम के बारे में 'देखें' पर क्लिक करें:
4. Cloud Code के साथ इंटिग्रेशन
इस सेक्शन में, आपको Cloud Code के साथ Artifact Registry Docker इमेज रिपॉज़िटरी का इस्तेमाल करने का तरीका पता चलेगा.
Cloud Code से GKE क्लस्टर में ऐप्लिकेशन को डिप्लॉय करना
Cloud Shell Editor खोलने और ऐप्लिकेशन फ़ोल्डर को अपने वर्कस्पेस में जोड़ने के लिए, java-hello-world
फ़ोल्डर से यह कमांड चलाएं:
cloudshell workspace .
Cloud Shell एडिटर, ऐप्लिकेशन फ़ोल्डर में एक्सप्लोरर के साथ खुलेगा.
अगर आपको कोई पॉप-अप मिलता है, जिसमें Workspace से Java प्रोजेक्ट की सेटिंग फ़ाइलों को बाहर रखने के लिए कहा जाता है, तो Exclude in workspace
यहां दिए गए चरणों में, आपको Artifact Registry के रिपॉज़िटरी की जगह डालनी होगी. जगह का फ़ॉर्मैट यह है:
us-central1-docker.pkg.dev/<PROJECT_ID>/container-dev-repo
अपना PROJECT_ID ढूंढने के लिए, टर्मिनल में यह कमांड चलाएं
gcloud config get project
Cloud Code के स्टेटस बार (नीचे बाएं कोने में) पर क्लिक करें. इसके बाद, Run on Kubernetes
को चुनें
जब कहा जाए, तब kubeconfig में मौजूदा कॉन्टेक्स्ट का इस्तेमाल करने के लिए Yes
को चुनें. यह कॉन्टेक्स्ट, लैब के लिए प्रावधान किए गए container-dev-cluster
GKE (जीकेई) क्लस्टर पर ले जाता है
इमेज रजिस्ट्री के प्रॉम्प्ट में, वह पता डालें जिसे आपने ढूंढा है. इसके बाद, अपनी असल वैल्यू के लिए <PROJECT_ID> का इस्तेमाल करें
us-central1-docker.pkg.dev/<PROJECT_ID>/container-dev-repo
'Kubernetes पर चलाएं' को पहली बार इस्तेमाल करने पर, Cloud Code आपसे टारगेट इमेज रिपॉज़िटरी की जगह के बारे में पूछता है. यूआरएल सबमिट करने के बाद, उसे .vscode/launch.json
फ़ाइल में सेव किया जाता है. यह फ़ाइल, ऐप्लिकेशन फ़ोल्डर में बनाई जाती है.
आउटपुट पैनल में आपको दिखता है कि ऐप्लिकेशन इमेज के लिए बिल्ड शुरू हो रहा है java-hello-world,
इमेज को पहले कॉन्फ़िगर किए गए Artifact Registry के डेटा स्टोर करने की जगह में अपलोड किया जा चुका है
Cloud Console - आर्टफ़ैक्ट रजिस्ट्री - रिपॉज़िटरी पर जाएं. container-dev-repo
पर क्लिक करें और देखें कि java-hello-world
इमेज और latest
टैग की गई नई इमेज मौजूद है या नहीं
डिप्लॉय किए गए ऐप्लिकेशन की समीक्षा करना
Cloud Shell Editor पर वापस जाएं: डिप्लॉयमेंट पूरा होने पर, Skaffold/Cloud Code उस यूआरएल को प्रिंट करेगा जहां सेवा को फ़ॉरवर्ड किया गया है. लिंक पर क्लिक करें - वेब की झलक खोलें:
नई ब्राउज़र विंडो में, आपको 'हैलो वर्ल्ड' ऐप्लिकेशन का पेज दिखेगा
ऐप्लिकेशन कोड अपडेट करना
क्लस्टर पर डिप्लॉयमेंट में तुरंत लागू किए गए बदलाव को देखने के लिए, ऐप्लिकेशन को अब अपडेट करें:
Cloud Shell Editor में, src/main/java/cloudcode/helloworld/web
फ़ोल्डर में HelloWorldController.java
खोलें.
20वीं लाइन में मौजूद टेक्स्ट को "यह चल रहा है!" से बदलकर ""यह अपडेट हो गया है!"" करें. इसके बाद, आपको बिल्ड और डिप्लॉयमेंट की प्रोसेस तुरंत शुरू होती दिखेगी.
डिप्लॉय करने के बाद, फ़ॉरवर्ड किए गए यूआरएल पर फिर से क्लिक करें या ऐप्लिकेशन वाली ब्राउज़र विंडो को रीफ़्रेश करें, ताकि आपने जो बदलाव किया है वह डिप्लॉय हो जाए:
फिर से Cloud Console - आर्टफ़ैक्ट रजिस्ट्री - रिपॉज़िटरी पर जाएं. container-dev-repo
पर क्लिक करें और देखें कि java-hello-world
इमेज और नई इमेज मौजूद है या नहीं
5. भाषा पैकेज के साथ काम करना
इस सेक्शन में, आपको Artifact Registry के Java डेटा स्टोर करने की जगह सेट अप करने और अलग-अलग ऐप्लिकेशन में पैकेज अपलोड करने का तरीका बताया गया है.
Java पैकेज का रिपॉज़िटरी बनाना
Java आर्टफ़ैक्ट के लिए रिपॉज़िटरी बनाने के लिए, 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 - आर्टफ़ैक्ट रजिस्ट्री - रिपॉज़िटरी पर जाएं और container-dev-java-repo
नाम की अपनी नई बनाई गई मेवन रिपॉज़िटरी देखें. उस पर क्लिक करने पर, आपको पता चलेगा कि फ़िलहाल यह रिपॉज़िटरी खाली है.
आर्टफ़ैक्ट स्टोर करने की जगह के लिए पुष्टि करने की सुविधा सेट अप करें
अपने उपयोगकर्ता खाते के क्रेडेंशियल का इस्तेमाल करके, ऐप्लिकेशन के डिफ़ॉल्ट क्रेडेंशियल (एडीसी) की लोकप्रिय जगह को अपडेट करने के लिए, नीचे दिए गए निर्देश का पालन करें. इससे, आर्टफ़ैक्ट रजिस्ट्री क्रेडेंशियल हेल्पर, रिपॉज़िटरी से कनेक्ट करते समय इनका इस्तेमाल करके पुष्टि कर सकता है:
gcloud auth login --update-adc
Artifact Registry के लिए Maven कॉन्फ़िगर करना
अपने Java प्रोजेक्ट में जोड़ने के लिए, रिपॉज़िटरी कॉन्फ़िगरेशन को प्रिंट करने के लिए यह कमांड चलाएं:
gcloud artifacts print-settings mvn \
--repository=container-dev-java-repo \
--location=us-central1
Cloud Shell Editor में pom.xml खोलें और दिखाई गई सेटिंग को फ़ाइल के सही सेक्शन में जोड़ें.
distributionManagement सेक्शन को अपडेट करना
<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 सेक्शन अपडेट करना
<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 में अपना Java पैकेज अपलोड करें
Maven में कॉन्फ़िगर की गई Artifact Registry की मदद से, अब अपने संगठन के अन्य प्रोजेक्ट के इस्तेमाल के लिए Java Jars को स्टोर किया जा सकता है.
Artifact Registry में अपना Java पैकेज अपलोड करने के लिए, यह कमांड चलाएं:
mvn deploy
आर्टफ़ैक्ट रजिस्ट्री में जावा पैकेज देखना
Cloud Console - आर्टफ़ैक्ट रजिस्ट्री - रिपॉज़िटरी पर जाएं. container-dev-java-repo
पर क्लिक करें और देखें कि hello-world
बाइनरी आर्टफ़ैक्ट मौजूद है या नहीं:
6. बधाई हो!
बधाई हो, आपने कोडलैब पूरा कर लिया है!
आपने क्या कवर किया है
- कंटेनर और भाषा पैकेज के लिए रिपॉज़िटरी बनाए गए
- Artifact Registry की मदद से मैनेज की जाने वाली कंटेनर इमेज
- Cloud Code के साथ Artifact Registry को इंटिग्रेट करना
- Java डिपेंडेंसी के लिए Artifact Registry का इस्तेमाल करने के लिए, Maven को कॉन्फ़िगर किया गया है
साफ़-सफ़ाई सेवा
प्रोजेक्ट मिटाने के लिए, यह कमांड चलाएं
gcloud projects delete $PROJECT_ID