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

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

Container Registry के बाद, Artifact Registry को लॉन्च किया गया है. यह आपके संगठन के लिए एक ऐसा प्लैटफ़ॉर्म है जहां कंटेनर इमेज और लैंग्वेज पैकेज (जैसे, Maven और npm) मैनेज किए जा सकते हैं. यह 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 में बिलिंग चालू करनी होगी, ताकि 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)')

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. कंटेनर इमेज के साथ काम करना

Artifact Registry पर Docker Repository बनाना

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 - Repositories पर जाएं. आपको container-dev-repo नाम की नई Docker रिपॉज़िटरी दिखेगी. इस पर क्लिक करने से पता चलेगा कि फ़िलहाल यह खाली है

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

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 के Docker कॉन्फ़िगरेशन को बदलने की पुष्टि करने के लिए कहा जाएगा. इसके बाद, Enter दबाएं.

सैंपल ऐप्लिकेशन के बारे में ज़्यादा जानें

आपको git रिपॉज़िटरी में ऐप्लिकेशन का एक सैंपल मिलेगा. इसे आपने पिछले चरण में क्लोन किया था. जावा डायरेक्ट्री में जाएं और ऐप्लिकेशन कोड की समीक्षा करें.

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

इस फ़ोल्डर में, Java का एक उदाहरण ऐप्लिकेशन मौजूद है. यह ऐप्लिकेशन, एक सामान्य वेब पेज रेंडर करता है. इसमें ऐसी कई फ़ाइलें भी मौजूद हैं जो इस लैब के लिए काम की नहीं हैं. साथ ही, इसमें src फ़ोल्डर में सोर्स कोड और एक Dockerfile भी मौजूद है. हम इस 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 Repository के लिए पुष्टि करने की सुविधा सेट अप करना

अपने उपयोगकर्ता खाते के क्रेडेंशियल की मदद से, ऐप्लिकेशन के डिफ़ॉल्ट क्रेडेंशियल (एडीसी) के लिए जानी-पहचानी जगह को अपडेट करने के लिए, इस कमांड का इस्तेमाल करें. इससे, 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 खोलें. इसके बाद, "Open Editor" पर क्लिक करें

95d98e831787b2ff.png

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

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

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

पहले से मौजूद टर्मिनल के साथ Cloud Editor व्यू:

33c3bfa412b7babd.png

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 का इस्तेमाल करके Java जार सेव किए जा सकते हैं. इससे आपके संगठन के अन्य प्रोजेक्ट में इनका इस्तेमाल किया जा सकेगा.

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

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