Artifact Registry की मदद से डिपेंडेंसी मैनेज करना

1. खास जानकारी

कंटेनर रजिस्ट्री के बेहतर वर्शन के तौर पर, Artifact Registry एक ऐसा प्लैटफ़ॉर्म है जहां आपका संगठन, कंटेनर इमेज और भाषा के पैकेज (जैसे, Maven और एनपीएम) को मैनेज कर सकता है. इसे Google Cloud के टूल और रनटाइम के साथ पूरी तरह से इंटिग्रेट किया गया है. साथ ही, इसमें भाषा के हिसाब से डिपेंडेंसी मैनेज करने की सुविधा मिलती है. इसका इस्तेमाल npm और Maven जैसे टूल के साथ किया जाता है. इसकी मदद से, ऑटोमेटेड पाइपलाइन सेट अप करने के लिए, इसे CI/CD टूल के साथ आसानी से इंटिग्रेट किया जा सकता है.

यह लैब आपको Artifact Registry में उपलब्ध कुछ सुविधाओं के बारे में जानकारी देगी.

आपको क्या सीखने को मिलेगा

इस लैब के सीखने के मकसद क्या हैं?

  • कंटेनर और भाषा पैकेज के लिए डेटा स्टोर करने की जगहें बनाना
  • Artifact Registry की मदद से कंटेनर इमेज मैनेज करें
  • Java डिपेंडेंसी के लिए Artifact Registry का इस्तेमाल करने के लिए, Maven को कॉन्फ़िगर करें

2. सेटअप और ज़रूरी शर्तें

अपने हिसाब से एनवायरमेंट सेटअप करें

  1. Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से Gmail या Google Workspace खाता नहीं है, तो आपको नया खाता बनाना होगा.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों का डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करता. इसे कभी भी अपडेट किया जा सकता है.
  • प्रोजेक्ट आईडी, Google Cloud के सभी प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. इसे सेट करने के बाद बदला नहीं जा सकता. Cloud Console, एक यूनीक स्ट्रिंग अपने-आप जनरेट करता है; आम तौर पर, आपको उसके होने की कोई परवाह नहीं होती. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना होगा. आम तौर पर, इसे PROJECT_ID के तौर पर पहचाना जाता है. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो किसी भी क्रम में एक और आईडी जनरेट किया जा सकता है. इसके अलावा, खुद भी आज़माया जा सकता है और देखें कि वह उपलब्ध है या नहीं. इस चरण के बाद इसे बदला नहीं जा सकता और प्रोजेक्ट के कुल समय तक बना रहेगा.
  • आपकी जानकारी के लिए, एक तीसरी वैल्यू यानी प्रोजेक्ट नंबर है. इसका इस्तेमाल कुछ एपीआई करते हैं. दस्तावेज़ में इन तीनों वैल्यू के बारे में ज़्यादा जानें.
  1. इसके बाद, आपको क्लाउड संसाधनों/एपीआई का इस्तेमाल करने के लिए, 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/

3. कंटेनर इमेज के साथ काम करना

आर्टफ़ैक्ट रजिस्ट्री पर Docker डेटा स्टोर करने की जगह बनाएं

Artifact Registry, कंटेनर की इमेज और भाषा के पैकेज को मैनेज करने की सुविधा देती है. अलग-अलग तरह के आर्टफ़ैक्ट के लिए, अलग-अलग खास निर्देशों की ज़रूरत होती है. उदाहरण के लिए, Maven डिपेंडेंसी के अनुरोध, नोड डिपेंडेंसी के अनुरोधों से अलग होते हैं.

अलग-अलग एपीआई की खास बातों के साथ काम करने के लिए, 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 क्रेडेंशियल आसानी से इस्तेमाल करने के लिए कॉन्फ़िगर किया जा सकता है.

Cloud Shell से, Docker को कॉन्फ़िगर करने के लिए यह कमांड चलाएं, ताकि Google Cloud सीएलआई का इस्तेमाल करके us-central1 क्षेत्र में Artifact Registry के अनुरोधों की पुष्टि की जा सके.

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 भी मौजूद होती है, जिसका इस्तेमाल हम स्थानीय तौर पर कंटेनर इमेज बनाने के लिए करेंगे.

कंटेनर की इमेज बनाएं

कंटेनर इमेज को Artifact Registry में स्टोर करने से पहले, आपको एक इमेज बनानी होगी.

कंटेनर इमेज बनाने के लिए, नीचे दिया गया कमांड चलाएं. साथ ही, अगले चरण में इसे ठीक से अपने रिपॉज़िटरी में पुश करने के लिए टैग करें:

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

कंटेनर इमेज को Artifact Registry में भेजना

कंटेनर इमेज को पहले बनाए गए डेटा स्टोर करने की जगह में पुश करने के लिए, नीचे दिया गया कमांड चलाएं:

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 बुलेटिन नाम और गंभीरता के साथ दिखेगी. ज़्यादा जानकारी के लिए, सूची में शामिल हर जोखिम के बारे में 'देखें' पर क्लिक करें:

c2a961e6218d5a45.png

4. भाषा पैकेज के साथ काम करना

इस सेक्शन में, आपको 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 - Artifact Registry - Repositories पर जाएं और देखें कि container-dev-java-repo नाम का अपनी नई Maven रिपॉज़िटरी (डेटा स्टोर करने की जगह) देखें. इस पर क्लिक करने पर आपको दिखेगा कि फ़िलहाल वह खाली है.

आर्टफ़ैक्ट स्टोर करने की जगह के लिए पुष्टि करने की सुविधा सेट अप करें

ऐप्लिकेशन के डिफ़ॉल्ट क्रेडेंशियल (एडीसी) के लिए जानी-मानी जगह की जानकारी को अपने उपयोगकर्ता खाते के क्रेडेंशियल से अपडेट करने के लिए, नीचे दिए गए निर्देश का इस्तेमाल करें. इससे, डेटा स्टोर करने की जगहों से कनेक्ट करते समय, Artifact Registry के क्रेडेंशियल का हेल्पर उनके इस्तेमाल की पुष्टि कर सकेगा:

gcloud auth login --update-adc

Artifact Registry के लिए, Maven को कॉन्फ़िगर करना

Cloud Shell Editor खोलने और ऐप्लिकेशन फ़ोल्डर को उसके फ़ाइल फ़ोल्डर में जोड़ने के लिए, java-hello-world फ़ोल्डर से यह निर्देश चलाएं:

cloudshell workspace .

"साइट अब काम कर रही है?" पर क्लिक करके तृतीय-पक्ष कुकी सक्षम करें और फिर "कुकी की अनुमति दें" चुनें.

ब्राउज़र के फिर से लोड होने के बाद, Cloud Shell खोलें. इसके बाद, ऐप्लिकेशन फ़ोल्डर को लोड करने के लिए, ऊपर दिए गए निर्देश को एक बार और चलाएं.

62328383ea59b30c.png

a9d756bf08575b0d.png

Cloud Shell Editor में pom.xml खोलें और "एडिटर खोलें" पर क्लिक करें

95d98e831787b2ff.png

टर्मिनल को Cloud Shell Editor से खोलें. इसके बाद, अपने Java प्रोजेक्ट में डेटा स्टोर करने की जगह का कॉन्फ़िगरेशन जोड़ने के लिए, यह कमांड चलाएं:

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

और pom.xml फ़ाइल के सही सेक्शन में, दिखाई गई सेटिंग जोड़ें.

पहले से मौजूद टर्मिनल वाला क्लाउड एडिटर व्यू:

33c3bfa412b7बबी

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>
   <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 को कॉन्फ़िगर करके, अब Artifact Registry का इस्तेमाल किया जा सकता है.

Artifact Registry में अपना Java पैकेज अपलोड करने के लिए, नीचे दिया गया कमांड चलाएं:

mvn deploy

Artifact Registry में जाकर Java पैकेज देखें

Cloud Console - Artifact Registry - Repositories पर जाएं. container-dev-java-repo पर क्लिक करके देखें कि hello-world बाइनरी आर्टफ़ैक्ट तो नहीं है:

e348d976ac1ac107.png

5. बधाई हो!

बधाई हो, आपने कोडलैब पूरा कर लिया है!

आपने क्या कवर किया

  • कंटेनर और भाषा पैकेज के लिए डेटा स्टोर करने की जगहें बनाई गईं
  • Artifact Registry वाली मैनेज की जा रही कंटेनर इमेज
  • Java डिपेंडेंसी के लिए Artifact Registry का इस्तेमाल करने के लिए, Maven को कॉन्फ़िगर किया गया है

साफ़-सफ़ाई सेवा

प्रोजेक्ट मिटाने के लिए, यहां दिया गया कमांड चलाएं

gcloud projects delete $PROJECT_ID