सॉफ़्टवेयर की सप्लाई को सुरक्षित करना

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

Artifact Registry की मदद से, अलग-अलग तरह के आर्टफ़ैक्ट सेव किए जा सकते हैं. साथ ही, एक ही प्रोजेक्ट में कई रिपॉज़िटरी बनाई जा सकती हैं. इसके अलावा, हर रिपॉज़िटरी को किसी खास क्षेत्र या एक से ज़्यादा क्षेत्रों से जोड़ा जा सकता है. रिपॉज़िटरी के कई मोड होते हैं. हर मोड का अपना एक अलग मकसद होता है. इस डायग्राम में, रिपॉज़िटरी को अलग-अलग मोड में एक साथ इस्तेमाल करने का एक तरीका दिखाया गया है. इस डायग्राम में, दो Google Cloud प्रोजेक्ट के बीच वर्कफ़्लो दिखाया गया है. डेवलपमेंट प्रोजेक्ट में, डेवलपर एक Java ऐप्लिकेशन बनाते हैं. अलग रनटाइम प्रोजेक्ट में, दूसरा बिल्ड Google Kubernetes Engine पर डिप्लॉय करने के लिए, ऐप्लिकेशन के साथ एक कंटेनर इमेज बनाता है.

5af5e4da3ccfdff3.png

इस लैब में, आपको इन टास्क को पूरा करने का तरीका बताया जाएगा.

  • अपने निजी पैकेज डिप्लॉय करने के लिए, स्टैंडर्ड रिपॉज़िटरी का इस्तेमाल करना
  • Maven Central के पैकेज को कैश मेमोरी में सेव करने के लिए, रिमोट रिपॉज़िटरी का इस्तेमाल करना
  • एक कॉन्फ़िगरेशन में कई अपस्ट्रीम रिपॉज़िटरी को एक साथ जोड़ने के लिए, वर्चुअल रिपॉज़िटरी का इस्तेमाल करना

अपनी स्पीड से एनवायरमेंट सेट अप करना

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

b35bf95b8bf3d5d8.pnga99b7ace416376c4.pngbd84a6d3004737c5.png

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

Workspace का सेटअप

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 artifactregistry.googleapis.com

रिपो का क्लोन बनाएं

git clone https://github.com/GoogleCloudPlatform/java-docs-samples
cd java-docs-samples/container-registry/container-analysis

2. स्टैंडर्ड रिपॉज़िटरी

स्टैंडर्ड रिपॉज़िटरी की मदद से, अपने निजी पैकेज सेव किए जा सकते हैं. साथ ही, उन्हें अपने अन्य ऐप्लिकेशन के साथ शेयर किया जा सकता है

स्टैंडर्ड Maven रिपॉज़िटरी बनाना

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 रिपॉज़िटरी दिखेगी. इस पर क्लिक करने से पता चलेगा कि यह फ़िलहाल खाली है.

gcloud artifacts repositories describe container-dev-java-repo \
    --location=us-central1

जवाब इस तरह का होना चाहिए

Encryption: Google-managed key
Repository Size: 0.000MB
createTime: '2023-03-21T19:01:45.461589Z'
description: Java package repository for Container Dev Workshop
format: MAVEN
mavenConfig: {}
mode: STANDARD_REPOSITORY
name: projects/qwiklabs-gcp-03-4304110dc461/locations/us-central1/repositories/container-dev-java-repo
updateTime: '2023-03-21T19:01:45.461589Z'

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

अपने Java प्रोजेक्ट में जोड़ने के लिए, रिपॉज़िटरी कॉन्फ़िगरेशन को प्रिंट करने के लिए, यह कमांड चलाएं:

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

पिछली कमांड, आपके प्रोजेक्ट के pom.xml में जोड़ने के लिए एक्सएमएल फ़ाइल दिखाती है.

  • repositories सेक्शन में यह जानकारी दी जाती है कि Maven, मौजूदा प्रोजेक्ट के लिए रिमोट आर्टफ़ैक्ट कहां से डाउनलोड कर सकता है.
  • distributionManagement सेक्शन से यह पता चलता है कि डिप्लॉय किए जाने पर प्रोजेक्ट को किस रिमोट रिपॉज़िटरी में पुश किया जाएगा.
  • extensions सेक्शन में artifactregistry-maven-wagon जोड़ा जाता है. इससे, Artifact Registry से कनेक्ट करने के लिए ज़रूरी पुष्टि करने और ट्रांसपोर्ट लेयर की सुविधा मिलती है
  • ध्यान दें: एक्सटेंशन, pom.xml या extensions.xml में मौजूद हो सकते हैं. अगर कोई प्रोजेक्ट किसी पैरंट प्रोजेक्ट पर निर्भर करता है, तो उन निर्भरताओं को pom.xml में मौजूद अन्य एंट्री लोड होने से पहले ऐक्सेस किया जाता है. यह पक्का करने के लिए कि पैरंट के पास एक्सटेंशन का ऐक्सेस हो, इसे extensions.xml फ़ाइल में रखा जा सकता है. यह फ़ाइल, pom.xml से पहले लोड होती है. इस वजह से, यह पैरंट डिपेंडेंसी के लिए उपलब्ध होती है.

तीनों सेक्शन कॉपी करें. इसके बाद, Cloud Shell Editor में pom.xml खोलें. साथ ही, वापस लाई गई सेटिंग को फ़ाइल में सबसे नीचे, बंद होने वाले project टैग के ठीक अंदर जोड़ें.

अहम जानकारी: cloudshell में, एडिटर को मौजूदा डायरेक्ट्री में खोलने के लिए, टर्मिनल में यह कमांड चलाएं.

cloudshell workspace .

उदाहरण: (आपके यूआरएल में प्रोजेक्ट के नाम अलग-अलग होंगे)

  ...

  <distributionManagement>
    <snapshotRepository>
      <id>artifact-registry</id>
      <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
    </snapshotRepository>
    <repository>
      <id>artifact-registry</id>
      <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
    </repository>
  </distributionManagement>

  <repositories>
    <repository>
      <id>artifact-registry</id>
      <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>
  </repositories>

  <build>
    <extensions>
      <extension>
        <groupId>com.google.cloud.artifactregistry</groupId>
        <artifactId>artifactregistry-maven-wagon</artifactId>
        <version>2.2.0</version>
      </extension>
    </extensions>
  </build>

</project>

Artifact Registry में अपना Java पैकेज अपलोड करना

Maven में Artifact Registry को कॉन्फ़िगर करने के बाद, अब Artifact Registry का इस्तेमाल करके Java जार सेव किए जा सकते हैं. इससे आपके संगठन के अन्य प्रोजेक्ट में इनका इस्तेमाल किया जा सकेगा.

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

mvn deploy -DskipTests

अगर आपको इस निर्देश को फिर से चलाना है, तो पक्का करें कि आपने pom.xml में वर्शन बढ़ा दिया हो.

Artifact Registry में Java पैकेज की जांच करना

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

147eac5168648db1.png

3. रिमोट रिपॉज़िटरी

रिमोट रिपॉज़िटरी की मदद से, तीसरे पक्ष के पैकेज को कैश मेमोरी में सेव किया जा सकता है. इससे पैकेज ज़्यादा भरोसेमंद और सुरक्षित हो जाते हैं.

रिमोट रिपॉज़िटरी बनाना

ध्यान दें: पुष्टि करने और कॉन्फ़िगरेशन के बारे में जानकारी पाने के लिए, प्रॉडक्ट का दस्तावेज़ देखें.

Maven Central आर्टफ़ैक्ट के लिए रिमोट रिपॉज़िटरी बनाने के लिए, Cloud Shell में यह कमांड चलाएं:

gcloud artifacts repositories create maven-central-cache \
    --project=$PROJECT_ID \
    --repository-format=maven \
    --location=us-central1 \
    --description="Remote repository for Maven Central caching" \
    --mode=remote-repository \
    --remote-repo-config-desc="Maven Central" \
    --remote-mvn-repo=MAVEN-CENTRAL

कंसोल में रीपो की समीक्षा करना

Cloud Console - Artifact Registry - Repositories पर जाएं maven-central-cache पर क्लिक करें और देखें कि यह बन गया है और फ़िलहाल खाली है

टर्मिनल में रेपो की समीक्षा करना

gcloud artifacts repositories describe maven-central-cache \
    --location=us-central1

रिपो को अपने प्रोजेक्ट में इंटिग्रेट करना

अपने Java प्रोजेक्ट में जोड़ने के लिए, रिपॉज़िटरी कॉन्फ़िगरेशन को प्रिंट करने के लिए, यह कमांड चलाएं:

gcloud artifacts print-settings mvn \
    --repository=maven-central-cache \
    --location=us-central1

अपने pom.xml में रिपॉज़िटरी सेक्शन जोड़ें. पक्का करें कि आपने आउटपुट से बाहरी <repositories> टैग कॉपी न किया हो.

नई जोड़ी गई रिपॉज़िटरी के आईडी को "central" में बदलें, ताकि यह पक्का किया जा सके कि हर रिपॉज़िटरी एंट्री का यूनीक आईडी हो.

उदाहरण: (आपके यूआरएल में प्रोजेक्ट के नाम अलग-अलग होंगे)

  ...

  <distributionManagement>
    <snapshotRepository>
      <id>artifact-registry</id>
      <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
    </snapshotRepository>
    <repository>
      <id>artifact-registry</id>
      <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
    </repository>
  </distributionManagement>

  <repositories>
    <repository>
      <id>artifact-registry</id>
      <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>

    <repository>
      <id>central</id>
      <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/maven-central-cache</url>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>


  </repositories>

  <build>
    <extensions>
      <extension>
        <groupId>com.google.cloud.artifactregistry</groupId>
        <artifactId>artifactregistry-maven-wagon</artifactId>
        <version>2.2.0</version>
      </extension>
    </extensions>
  </build>

</project>

अपने प्रोजेक्ट के लिए extensions.xml बनाने के लिए, अपने टर्मिनल में ये कमांड चलाएं. कोर एक्सटेंशन मैकेनिज़्म का इस्तेमाल करने के लिए, यह पक्का करें कि Maven, Artifact Registry से पैरंट या प्लगिन डिपेंडेंसी को हल कर सकता है.

mkdir .mvn 
cat > .mvn/extensions.xml << EOF
<extensions xmlns="http://maven.apache.org/EXTENSIONS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0 http://maven.apache.org/xsd/core-extensions-1.0.0.xsd">
  <extension>
    <groupId>com.google.cloud.artifactregistry</groupId>
    <artifactId>artifactregistry-maven-wagon</artifactId>
    <version>2.2.0</version>
  </extension>
</extensions>
EOF

रिमोट रिपॉज़िटरी से डिपेंडेंसी पुल करना

रिमोट रिपॉज़िटरी का इस्तेमाल करके अपने ऐप्लिकेशन को कंपाइल करने के लिए, यह कमांड चलाएं:

rm -rf ~/.m2/repository 
mvn compile

कंसोल में पैकेज की समीक्षा करना

Cloud Console - Artifact Registry - Repositories पर जाएं maven-central-cache पर क्लिक करें और देखें कि वहां कैश किए गए बाइनरी आर्टफ़ैक्ट:

9deea93caa5fefd7.png

4. वर्चुअल रिपॉज़िटरी

वर्चुअल रिपॉज़िटरी, एक इंटरफ़ेस के तौर पर काम करती हैं. इनकी मदद से, एक ही कॉन्फ़िगरेशन का इस्तेमाल करके कई रिपॉज़िटरी ऐक्सेस की जा सकती हैं. इससे, आपके आर्टफ़ैक्ट का इस्तेमाल करने वाले लोगों के लिए क्लाइंट कॉन्फ़िगरेशन आसान हो जाता है. साथ ही, डिपेंडेंसी कन्फ़्यूज़न अटैक को कम करके सुरक्षा को बेहतर बनाया जा सकता है.

नीति फ़ाइल बनाना

cat > ./policy.json << EOF
[
  {
    "id": "private",
    "repository": "projects/${PROJECT_ID}/locations/us-central1/repositories/container-dev-java-repo",
    "priority": 100
  },
  {
    "id": "central",
    "repository": "projects/${PROJECT_ID}/locations/us-central1/repositories/maven-central-cache",
    "priority": 80
  }
]

EOF

वर्चुअल डेटाबेस बनाना

gcloud artifacts repositories create virtual-maven-repo \
    --project=${PROJECT_ID} \
    --repository-format=maven \
    --mode=virtual-repository \
    --location=us-central1 \
    --description="Virtual Maven Repo" \
    --upstream-policy-file=./policy.json

रिपो को अपने प्रोजेक्ट में इंटिग्रेट करना

अपने Java प्रोजेक्ट में जोड़ने के लिए, रिपॉज़िटरी कॉन्फ़िगरेशन को प्रिंट करने के लिए, यह कमांड चलाएं:

gcloud artifacts print-settings mvn \
    --repository=virtual-maven-repo \
    --location=us-central1

अपने pom में मौजूद पूरे रिपॉज़िटरी सेक्शन को, आउटपुट में मौजूद एक वर्चुअल रिपॉज़िटरी सेक्शन से बदलें.

उदाहरण: (आपके यूआरएल में प्रोजेक्ट के नाम अलग-अलग होंगे)

  ...


  <distributionManagement>
    <snapshotRepository>
      <id>artifact-registry</id>
      <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
    </snapshotRepository>
    <repository>
      <id>artifact-registry</id>
      <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
    </repository>
  </distributionManagement>

  <repositories>
    <repository>
      <id>artifact-registry</id>
      <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/virtual-maven-repo</url>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>
  </repositories>

  <build>
    <extensions>
      <extension>
        <groupId>com.google.cloud.artifactregistry</groupId>
        <artifactId>artifactregistry-maven-wagon</artifactId>
        <version>2.2.0</version>
      </extension>
    </extensions>
  </build>

</project>


वर्चुअल रिपॉज़िटरी से डिपेंडेंसी पुल करना

वर्चुअल रिपॉज़िटरी, पास थ्रू होती है और इसमें कोई भी पैकेज सेव नहीं होता. इसलिए, प्रोसेस को साफ़ तौर पर दिखाने के लिए, पहले बनाई गई maven-central-cache रिपॉज़िटरी को मिटाएं और उसे फिर से बनाएं, ताकि खाली रिपॉज़िटरी से फिर से शुरू किया जा सके

कैश मेमोरी की रिपॉज़िटरी को फिर से बनाने के लिए, ये कमांड चलाएं

gcloud artifacts repositories delete maven-central-cache \
    --project=$PROJECT_ID \
    --location=us-central1 \
    --quiet

gcloud artifacts repositories create maven-central-cache \
    --project=$PROJECT_ID \
    --repository-format=maven \
    --location=us-central1 \
    --description="Remote repository for Maven Central caching" \
    --mode=remote-repository \
    --remote-repo-config-desc="Maven Central" \
    --remote-mvn-repo=MAVEN-CENTRAL

कंसोल में जाकर, खाली रेपो की समीक्षा की जा सकती है. Cloud Console - Artifact Registry - Repositories पर जाएं

अब वर्चुअल रिपॉज़िटरी का इस्तेमाल करें. इसके लिए, नीचे दिए गए निर्देश का इस्तेमाल करके अपना प्रोजेक्ट बनाएं

rm -rf ~/.m2/repository 
mvn compile

कंसोल में पैकेज की समीक्षा करना

Cloud Console - Artifact Registry - Repositories पर जाएं maven-central-cache पर क्लिक करें और देखें कि बाइनरी आर्टफ़ैक्ट को वर्चुअल रेपो से पुल करने के लिए कॉन्फ़िगर किया गया था, लेकिन उन्हें आखिर में maven-central-cache से पुल किया गया था:

9deea93caa5fefd7.png

5. बधाई हो!

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

आपने क्या-क्या कवर किया है

  • निजी पैकेज डिप्लॉय करने के लिए, स्टैंडर्ड रिपॉज़िटरी का इस्तेमाल किया गया हो
  • इस कुकी का इस्तेमाल, मेवन सेंट्रल पैकेज को कैश मेमोरी में सेव करने के लिए किया जाता है
  • एक कॉन्फ़िगरेशन में कई अपस्ट्रीम रिपॉज़िटरी को एक साथ जोड़ने के लिए, वर्चुअल रिपॉज़िटरी का इस्तेमाल किया गया

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

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

gcloud projects delete ${PROJECT_ID}

—

पिछला अपडेट: 22/3/23