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

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

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

5af5e4da3ccfdff3.png

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

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

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

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 एडिटर में pom.xml खोलें और फ़ाइल के सबसे नीचे, बंद होने वाले project टैग के अंदर, दिखाई गई सेटिंग जोड़ें.

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

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

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

mvn deploy -DskipTests

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

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

Cloud Console - Artifact Registry - डेटाबेस पर जाएं. 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 - डेटाबेस पर जाएं. 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 - डेटाबेस पर जाएं. 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 - डेटाबेस पर जाएं

अब अपने प्रोजेक्ट को इस कमांड से बनाकर, वर्चुअल डेटाबेस का इस्तेमाल करें

rm -rf ~/.m2/repository 
mvn compile

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

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

9deea93caa5fefd7.png

5. बधाई हो!

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

आपने क्या-क्या सीखा

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

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

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

gcloud projects delete ${PROJECT_ID}

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