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

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

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

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

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

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 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 में जोड़ने के लिए एक्सएमएल दिखाता है.

  • रिपॉज़िटरी सेक्शन में यह जानकारी मिलती है कि Maven, मौजूदा प्रोजेक्ट के इस्तेमाल के लिए, रिमोट आर्टफ़ैक्ट कहां से डाउनलोड कर सकता है.
  • distributionManagement सेक्शन से पता चलता है कि प्रोजेक्ट को डिप्लॉय करने पर, उसे किस रिमोट रिपॉज़िटरी में पुश किया जाएगा.
  • एक्सटेंशन सेक्शन में 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>

आर्टफ़ैक्ट रजिस्ट्री में अपना Java पैकेज अपलोड करना

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

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

mvn deploy -DskipTests

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

आर्टफ़ैक्ट रजिस्ट्री में जावा पैकेज देखना

Cloud Console - आर्टफ़ैक्ट रजिस्ट्री - रिपॉज़िटरी पर जाएं. 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 - आर्टफ़ैक्ट रजिस्ट्री - रिपॉज़िटरी पर जाएं. 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> टैग को कॉपी न किया हो.

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

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

  ...

  <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, आर्टफ़ैक्ट रजिस्ट्री से पैरंट या प्लग इन की डिपेंडेंसी को हल कर सके.

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 - आर्टफ़ैक्ट रजिस्ट्री - रिपॉज़िटरी पर जाएं. 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 - आर्टफ़ैक्ट रजिस्ट्री - रिपॉज़िटरी पर जाएं

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

rm -rf ~/.m2/repository 
mvn compile

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

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

9deea93caa5fefd7.png

5. बधाई हो!

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

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

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

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

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

gcloud projects delete ${PROJECT_ID}

पिछली बार अपडेट किए जाने की तारीख: 22/03/23