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

১. সংক্ষিপ্ত বিবরণ

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

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

আপনি যা শিখবেন

এই ল্যাবের শিক্ষণ উদ্দেশ্যগুলো কী কী?

  • কন্টেইনার এবং ল্যাঙ্গুয়েজ প্যাকেজের জন্য রিপোজিটরি তৈরি করুন
  • আর্টিফ্যাক্ট রেজিস্ট্রি দিয়ে কন্টেইনার ইমেজ পরিচালনা করুন
  • জাভা ডিপেন্ডেন্সিগুলির জন্য আর্টিফ্যাক্ট রেজিস্ট্রি ব্যবহার করতে মেভেন কনফিগার করুন।

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

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

gcloud সেট আপ করুন

ক্লাউড শেলে আপনার প্রজেক্ট আইডি এবং প্রজেক্ট নম্বর সেট করুন। এগুলোকে 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 \
  cloudresourcemanager.googleapis.com \
  container.googleapis.com \
  artifactregistry.googleapis.com \
  containerregistry.googleapis.com \
  containerscanning.googleapis.com

সোর্স কোডটি নিন

এই ল্যাবের সোর্স কোডটি গিটহাবের GoogleCloudPlatform org-এ অবস্থিত। নিচের কমান্ডটি দিয়ে এটি ক্লোন করুন, তারপর ডিরেক্টরিতে প্রবেশ করুন।

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

৩. কন্টেইনার ইমেজ নিয়ে কাজ করা

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

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

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

ডকার ইমেজের জন্য একটি রিপোজিটরি তৈরি করতে ক্লাউড শেল থেকে নিম্নলিখিত কমান্ডটি চালান:

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

ক্লাউড শেল অথরাইজেশন প্রম্পট দেখা গেলে অথরাইজ-এ ক্লিক করুন।

Google Cloud Console - Artifact Registry - Repositories- এ যান এবং আপনার সদ্য তৈরি করা ` container-dev-repo নামের ডকার রিপোজিটরিটি লক্ষ্য করুন, সেটিতে ক্লিক করলে দেখতে পাবেন যে এই মুহূর্তে এটি খালি আছে।

আর্টিফ্যাক্ট রেজিস্ট্রিতে ডকার অথেনটিকেশন কনফিগার করুন

আর্টিফ্যাক্ট রেজিস্ট্রি-তে সংযোগ করার সময় অ্যাক্সেস দেওয়ার জন্য ক্রেডেনশিয়াল প্রয়োজন হয়। আলাদা ক্রেডেনশিয়াল সেট আপ করার পরিবর্তে, আপনার gcloud ক্রেডেনশিয়াল নির্বিঘ্নে ব্যবহার করার জন্য ডকার কনফিগার করা যেতে পারে।

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

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

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

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

পূর্ববর্তী ধাপে আপনার ক্লোন করা গিট রিপোজিটরিতে একটি নমুনা অ্যাপ্লিকেশন দেওয়া আছে। java ডিরেক্টরিতে প্রবেশ করুন এবং অ্যাপ্লিকেশন কোডটি পর্যালোচনা করুন।

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

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

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

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

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

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 Cloud Console - Artifact Registry - Repositories- এ যান . container-dev-repo তে ক্লিক করুন এবং দেখুন যে java-hello-world ইমেজটি সেখানে আছে কিনা। ইমেজটিতে ক্লিক করুন এবং tag1 ট্যাগযুক্ত ইমেজটি নোট করুন। আপনি দেখতে পাবেন যে Vulnerability Scanning চলছে বা ইতিমধ্যে সম্পন্ন হয়েছে এবং সনাক্ত করা দুর্বলতার সংখ্যাও দেখা যাচ্ছে।

9cb46d3689b3ed2.png

দুর্বলতার সংখ্যার উপর ক্লিক করলে আপনি ছবিতে শনাক্ত হওয়া দুর্বলতাগুলোর তালিকা দেখতে পাবেন, যেখানে CVE বুলেটিনের নাম এবং তীব্রতা উল্লেখ থাকবে। আরও বিস্তারিত জানতে আপনি তালিকাভুক্ত প্রতিটি দুর্বলতার উপর 'VIEW' ক্লিক করতে পারেন।

c2a961e6218d5a45.png

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

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

একটি জাভা প্যাকেজ রিপোজিটরি তৈরি করুন

ক্লাউড শেল থেকে জাভা আর্টিফ্যাক্টের জন্য একটি রিপোজিটরি তৈরি করতে নিম্নলিখিত কমান্ডটি চালান:

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

ক্লাউড শেল অথরাইজেশন প্রম্পট দেখা গেলে অথরাইজ-এ ক্লিক করুন।

Google Cloud Console - Artifact Registry - Repositories- এ যান এবং আপনার সদ্য তৈরি করা container-dev-java-repo নামের Maven রিপোজিটরিটি লক্ষ্য করুন, এটিতে ক্লিক করলে আপনি দেখতে পাবেন যে এই মুহূর্তে এটি খালি আছে।

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

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

gcloud auth login --update-adc

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

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

cloudshell workspace .

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

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

62328383ea59b30c.png

a9d756bf08575b0d.png

Cloud Shell Editor-এ pom.xml ফাইলটি খুলুন, 'Open Editor'-এ ক্লিক করুন।

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>

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

Maven-এ Artifact Registry কনফিগার করা থাকলে, আপনি এখন আপনার প্রতিষ্ঠানের অন্যান্য প্রোজেক্টে ব্যবহারের জন্য Java Jar ফাইল সংরক্ষণ করতে এটি ব্যবহার করতে পারবেন।

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

mvn deploy

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

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

e348d976ac1ac107.png

৫. অভিনন্দন!

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

আপনি যা যা আলোচনা করেছেন

  • কন্টেইনার এবং ল্যাঙ্গুয়েজ প্যাকেজের জন্য রিপোজিটরি তৈরি করা হয়েছে
  • আর্টিফ্যাক্ট রেজিস্ট্রি দিয়ে পরিচালিত কন্টেইনার ইমেজ
  • জাভা ডিপেন্ডেন্সিগুলির জন্য আর্টিফ্যাক্ট রেজিস্ট্রি ব্যবহার করতে মেভেন কনফিগার করা হয়েছে।

পরিষ্কার-পরিচ্ছন্নতা

প্রজেক্টটি ডিলিট করতে নিম্নলিখিত কমান্ডটি চালান।

gcloud projects delete $PROJECT_ID