আর্টিফ্যাক্ট রেজিস্ট্রি সহ নির্ভরতা ব্যবস্থাপনা

1। সংক্ষিপ্ত বিবরণ

কনটেইনার রেজিস্ট্রির বিবর্তন হিসাবে, আর্টিফ্যাক্ট রেজিস্ট্রি হল আপনার প্রতিষ্ঠানের কন্টেইনার ইমেজ এবং ভাষা প্যাকেজগুলি (যেমন Maven এবং npm) পরিচালনা করার জন্য একটি একক জায়গা। এটি Google ক্লাউডের টুলিং এবং রানটাইমগুলির সাথে সম্পূর্ণরূপে একত্রিত এবং npm এবং Maven এর মতো সরঞ্জামগুলির সাথে ব্যবহারের জন্য ভাষা ভিত্তিক নির্ভরতা পরিচালনার জন্য সমর্থন সহ আসে৷ এটি স্বয়ংক্রিয় পাইপলাইন সেট আপ করতে আপনার CI/CD টুলিংয়ের সাথে এটিকে একীভূত করা সহজ করে তোলে।

এই ল্যাবটি আপনাকে আর্টিফ্যাক্ট রেজিস্ট্রিতে উপলব্ধ কিছু বৈশিষ্ট্যের মাধ্যমে নিয়ে যাবে।

যা শিখবেন

এই ল্যাবের শেখার উদ্দেশ্য কি?

  • ধারক এবং ভাষা প্যাকেজের জন্য সংগ্রহস্থল তৈরি করুন
  • আর্টিফ্যাক্ট রেজিস্ট্রি দিয়ে কন্টেইনার ছবি পরিচালনা করুন
  • জাভা নির্ভরতার জন্য আর্টিফ্যাক্ট রেজিস্ট্রি ব্যবহার করতে Maven কনফিগার করুন

2. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিসম্পন্ন পরিবেশ সেটআপ

  1. Google ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন বা বিদ্যমান একটি পুনরায় ব্যবহার করুন৷ আপনার যদি ইতিমধ্যেই একটি Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • প্রকল্পের নাম এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রদর্শনের নাম। এটি একটি অক্ষর স্ট্রিং যা Google API দ্বারা ব্যবহৃত হয় না। আপনি যে কোনো সময় এটি আপডেট করতে পারেন.
  • প্রোজেক্ট আইডি সমস্ত Google ক্লাউড প্রোজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (সেট করার পরে পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত আপনি এটা কি যত্ন না. বেশিরভাগ কোডল্যাবে, আপনাকে প্রজেক্ট আইডি উল্লেখ করতে হবে (এটি সাধারণত PROJECT_ID হিসাবে চিহ্নিত করা হয়)। আপনি যদি জেনারেট করা আইডি পছন্দ না করেন, তাহলে আপনি অন্য এলোমেলো আইডি তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের চেষ্টা করে দেখতে পারেন এবং এটি উপলব্ধ কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রকল্পের সময়কালের জন্য থাকবে।
  • আপনার তথ্যের জন্য, একটি তৃতীয় মান রয়েছে, একটি প্রকল্প নম্বর যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
  1. এরপরে, ক্লাউড রিসোর্স/এপিআই ব্যবহার করতে আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবের মাধ্যমে চালানোর জন্য খুব বেশি খরচ করা উচিত নয়, যদি কিছু থাকে। রিসোর্স বন্ধ করতে যাতে এই টিউটোরিয়ালের বাইরে আপনার বিলিং খরচ না হয়, আপনি আপনার তৈরি করা রিসোর্স মুছে ফেলতে পারেন বা পুরো প্রোজেক্ট মুছে ফেলতে পারেন। Google ক্লাউডের নতুন ব্যবহারকারীরা $300 USD বিনামূল্যের ট্রায়াল প্রোগ্রামের জন্য যোগ্য৷

gCloud সেট আপ করুন

ক্লাউড শেলে, আপনার প্রকল্প আইডি এবং প্রকল্প নম্বর সেট করুন। সেগুলিকে 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 org-এ অবস্থিত। নীচের কমান্ড দিয়ে এটি ক্লোন করুন তারপর ডিরেক্টরিতে পরিবর্তন করুন।

git clone https://github.com/GoogleCloudPlatform/cloud-code-samples/

3. ধারক ইমেজ সঙ্গে কাজ

আর্টিফ্যাক্ট রেজিস্ট্রিতে একটি ডকার সংগ্রহস্থল তৈরি করুন

আর্টিফ্যাক্ট রেজিস্ট্রি কনটেইনার ইমেজ এবং ভাষা প্যাকেজ পরিচালনা সমর্থন করে। বিভিন্ন আর্টিফ্যাক্ট ধরনের বিভিন্ন স্পেসিফিকেশন প্রয়োজন. উদাহরণস্বরূপ ম্যাভেন নির্ভরতার জন্য অনুরোধ নোড নির্ভরতার জন্য অনুরোধ থেকে ভিন্ন।

বিভিন্ন API স্পেসিফিকেশন সমর্থন করার জন্য, আর্টিফ্যাক্ট রেজিস্ট্রি জানতে হবে আপনি API প্রতিক্রিয়াগুলি অনুসরণ করতে চান এমন বিন্যাস। এটি করার জন্য আপনি একটি সংগ্রহস্থল তৈরি করবেন এবং পছন্দসই সংগ্রহস্থলের ধরন নির্দেশ করে --repository-format পতাকায় পাস করবেন।

ক্লাউড শেল থেকে ডকার চিত্রগুলির জন্য একটি সংগ্রহস্থল তৈরি করতে নিম্নলিখিত কমান্ডটি চালান:

gcloud artifacts repositories create container-dev-repo --repository-format=docker \
--location=us-central1 --description="Docker repository for Container Dev Workshop"

ক্লাউড শেল অনুমোদন প্রম্পট প্রদর্শিত হলে অনুমোদন ক্লিক করুন

Google ক্লাউড কনসোলে যান - আর্টিফ্যাক্ট রেজিস্ট্রি - রিপোজিটরি এবং আপনার সদ্য তৈরি করা ডকার রিপোজিটরিটি container-dev-repo নামক লক্ষ্য করুন, যদি আপনি এটিতে ক্লিক করেন তবে আপনি দেখতে পাবেন যে এটি এই মুহূর্তে খালি

আর্টিফ্যাক্ট রেজিস্ট্রিতে ডকার প্রমাণীকরণ কনফিগার করুন

আর্টিফ্যাক্ট রেজিস্ট্রি শংসাপত্র সংযোগ করার সময় অ্যাক্সেস প্রদান করার জন্য প্রয়োজন হয়. পৃথক শংসাপত্র সেট আপ করার পরিবর্তে, ডকারকে আপনার জিক্লাউড শংসাপত্রগুলি নির্বিঘ্নে ব্যবহার করার জন্য কনফিগার করা যেতে পারে।

ক্লাউড শেল থেকে us-central1 অঞ্চলে আর্টিফ্যাক্ট রেজিস্ট্রির অনুরোধগুলি প্রমাণীকরণের জন্য Google ক্লাউড CLI ব্যবহার করতে ডকারকে কনফিগার করতে নিম্নলিখিত কমান্ডটি চালান,

gcloud auth configure-docker us-central1-docker.pkg.dev

কমান্ডটি ক্লাউড শেল ডকার কনফিগারেশন পরিবর্তন করার জন্য নিশ্চিতকরণের জন্য অনুরোধ করবে, এন্টার টিপুন।

নমুনা অ্যাপ্লিকেশন অন্বেষণ

আপনি আগের ধাপে ক্লোন করা গিট রিপোজিটরিতে একটি নমুনা অ্যাপ্লিকেশন সরবরাহ করা হয়েছে। জাভা ডিরেক্টরিতে পরিবর্তন করুন এবং অ্যাপ্লিকেশন কোড পর্যালোচনা করুন।

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

ফোল্ডারটিতে একটি উদাহরণ জাভা অ্যাপ্লিকেশন রয়েছে যা একটি সাধারণ ওয়েব পৃষ্ঠা রেন্ডার করে: এই নির্দিষ্ট ল্যাবের জন্য প্রাসঙ্গিক নয় এমন বিভিন্ন ফাইল ছাড়াও, এতে সোর্স কোড রয়েছে, src ফোল্ডারের নীচে, এবং একটি ডকারফাইল যা আমরা স্থানীয়ভাবে একটি ধারক চিত্র তৈরি করতে ব্যবহার করব।

কন্টেইনার ইমেজ তৈরি করুন

আর্টিফ্যাক্ট রেজিস্ট্রিতে কন্টেইনার ইমেজ সংরক্ষণ করার আগে আপনাকে একটি তৈরি করতে হবে।

কন্টেইনার ইমেজ তৈরি করতে নিম্নলিখিত কমান্ডটি চালান এবং পরবর্তী ধাপে এটিকে আপনার সংগ্রহস্থলে পুশ করতে সঠিকভাবে ট্যাগ করুন:

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

কন্টেইনার ইমেজটিকে আর্টিফ্যাক্ট রেজিস্ট্রিতে পুশ করুন

পূর্বে তৈরি করা সংগ্রহস্থলে ধারক চিত্রটি পুশ করতে নিম্নলিখিত কমান্ডটি চালান:

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

আর্টিফ্যাক্ট রেজিস্ট্রিতে চিত্রটি পর্যালোচনা করুন

Google ক্লাউড কনসোলে যান - আর্টিফ্যাক্ট রেজিস্ট্রি - সংগ্রহস্থল . container-dev-repo ক্লিক করুন এবং java-hello-world ইমেজ আছে কিনা তা পরীক্ষা করুন। ছবিতে ক্লিক করুন এবং tag1 ট্যাগ করা ছবিটি নোট করুন। আপনি দেখতে পাচ্ছেন যে দুর্বলতা স্ক্যানিং চলছে বা ইতিমধ্যে সম্পন্ন হয়েছে এবং সনাক্ত করা দুর্বলতার সংখ্যা দৃশ্যমান।

9cb46d3689b3ed2.png

দুর্বলতার সংখ্যার উপর ক্লিক করুন এবং আপনি চিত্রে সনাক্ত করা দুর্বলতার তালিকা দেখতে পাবেন, CVE বুলেটিন নাম এবং তীব্রতা সহ, আপনি আরও বিশদ বিবরণ পেতে প্রতিটি তালিকাভুক্ত দুর্বলতার উপর ভিউ ক্লিক করতে পারেন:

c2a961e6218d5a45.png

4. ভাষা প্যাকেজ নিয়ে কাজ করা

এই বিভাগে আপনি দেখতে পাবেন কিভাবে একটি আর্টিফ্যাক্ট রেজিস্ট্রি জাভা রিপোজিটরি সেট আপ করতে হয় এবং এতে প্যাকেজগুলি আপলোড করতে হয়, বিভিন্ন অ্যাপ্লিকেশনে সেগুলি ব্যবহার করে।

একটি জাভা প্যাকেজ সংগ্রহস্থল তৈরি করুন

ক্লাউড শেল থেকে জাভা আর্টিফ্যাক্টগুলির জন্য একটি সংগ্রহস্থল তৈরি করতে নিম্নলিখিত কমান্ডটি চালান:

gcloud artifacts repositories create container-dev-java-repo \
    --repository-format=maven \
    --location=us-central1 \
    --description="Java package repository for Container Dev Workshop"

ক্লাউড শেল অনুমোদন প্রম্পট প্রদর্শিত হলে অনুমোদন ক্লিক করুন

Google ক্লাউড কনসোলে যান - আর্টিফ্যাক্ট রেজিস্ট্রি - রিপোজিটরি এবং আপনার সদ্য নির্মিত Maven সংগ্রহস্থলটি খেয়াল করুন যার নাম container-dev-java-repo , যদি আপনি এটিতে ক্লিক করেন তবে আপনি দেখতে পাবেন যে এটি এই মুহূর্তে খালি।

আর্টিফ্যাক্ট রিপোজিটরিতে প্রমাণীকরণ সেট আপ করুন

আপনার ব্যবহারকারীর অ্যাকাউন্টের শংসাপত্রগুলির সাথে অ্যাপ্লিকেশন ডিফল্ট শংসাপত্র (ADC) এর জন্য সুপরিচিত অবস্থান আপডেট করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন যাতে আর্টিফ্যাক্ট রেজিস্ট্রি শংসাপত্রের সাহায্যকারী সংগ্রহস্থলগুলির সাথে সংযোগ করার সময় তাদের ব্যবহার করে প্রমাণীকরণ করতে পারে:

gcloud auth login --update-adc

আর্টিফ্যাক্ট রেজিস্ট্রির জন্য Maven কনফিগার করুন

ক্লাউড শেল এডিটর খুলতে java-hello-world ফোল্ডার থেকে নিম্নলিখিত কমান্ডটি চালান এবং তার কর্মক্ষেত্রে অ্যাপ্লিকেশন ফোল্ডার যোগ করুন:

cloudshell workspace .

"সাইট এখন কাজ করছে?" এ ক্লিক করে তৃতীয় পক্ষের কুকিজ সক্ষম করুন। এবং তারপর "কুকিজ অনুমতি দিন"।

ব্রাউজার পুনরায় লোড করার পরে, ক্লাউড শেল খুলুন এবং অ্যাপ্লিকেশন ফোল্ডার লোড করতে আরও একবার উপরে কমান্ডটি চালান।

62328383ea59b30c.png

a9d756bf08575b0d.png

ক্লাউড শেল এডিটরে pom.xml খুলুন, "ওপেন এডিটর" এ ক্লিক করুন

95d98e831787b2ff.png

ক্লাউড শেল এডিটর থেকে টার্মিনাল খুলুন এবং আপনার জাভা প্রকল্পে যোগ করার জন্য সংগ্রহস্থল কনফিগারেশন মুদ্রণ করতে নিম্নলিখিত কমান্ডটি চালান:

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

এবং pom.xml ফাইলের উপযুক্ত বিভাগে প্রত্যাবর্তিত সেটিংস যোগ করুন।

অন্তর্নির্মিত টার্মিনাল সহ ক্লাউড এডিটর ভিউ:

33c3bfa412b7babd.png

ডিস্ট্রিবিউশন ম্যানেজমেন্ট বিভাগ আপডেট করুন

<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>

আপনার জাভা প্যাকেজটি আর্টিফ্যাক্ট রেজিস্ট্রিতে আপলোড করুন

ম্যাভেনে কনফিগার করা আর্টিফ্যাক্ট রেজিস্ট্রি সহ, আপনি এখন আপনার প্রতিষ্ঠানের অন্যান্য প্রকল্পগুলির দ্বারা ব্যবহারের জন্য জাভা জার সংরক্ষণ করতে আর্টিফ্যাক্ট রেজিস্ট্রি ব্যবহার করতে পারেন।

আর্টিফ্যাক্ট রেজিস্ট্রিতে আপনার জাভা প্যাকেজ আপলোড করতে নিম্নলিখিত কমান্ডটি চালান:

mvn deploy

আর্টিফ্যাক্ট রেজিস্ট্রিতে জাভা প্যাকেজটি পরীক্ষা করুন

ক্লাউড কনসোলে যান - আর্টিফ্যাক্ট রেজিস্ট্রি - রিপোজিটরি container-dev-java-repo ক্লিক করুন এবং hello-world বাইনারি আর্টিফ্যাক্ট আছে কিনা তা পরীক্ষা করুন:

e348d976ac1ac107.png

5. অভিনন্দন!

অভিনন্দন, আপনি কোডল্যাব শেষ করেছেন!

আপনি কভার করেছেন কি

  • কনটেইনার এবং ভাষা প্যাকেজের জন্য সংগ্রহস্থল তৈরি করা হয়েছে
  • আর্টিফ্যাক্ট রেজিস্ট্রি সহ পরিচালিত কন্টেইনার চিত্রগুলি
  • জাভা নির্ভরতার জন্য আর্টিফ্যাক্ট রেজিস্ট্রি ব্যবহার করার জন্য Maven কনফিগার করা হয়েছে

পরিষ্কার কর

প্রকল্পটি মুছে ফেলার জন্য নিম্নলিখিত কমান্ডটি চালান

gcloud projects delete $PROJECT_ID