Apache ANT-এর build.xml ফাইলটি একটি build script, যা প্রজেক্টের জন্য বিল্ড প্রক্রিয়া নির্ধারণ করে। এই ফাইলে আপনি কি কী কাজ করতে চান, যেমন কোড কম্পাইল করা, টেস্ট চালানো, প্যাকেজিং, ডিপ্লয়মেন্ট, এবং আরও অনেক কিছু—এ সবকিছু ডিফাইন করা হয়।
একটি ANT build ফাইল সাধারণত XML ফরম্যাটে লেখা হয় এবং এতে এক বা একাধিক target থাকে, যা বিভিন্ন কাজ সম্পন্ন করার জন্য ব্যবহৃত হয়।
Basic Build File Structure (বেসিক বিল্ড ফাইল স্ট্রাকচার)
<?xml version="1.0" encoding="UTF-8"?>
<project name="MyProject" default="compile" basedir=".">
<!-- Properties -->
<property name="src.dir" value="src"/>
<property name="build.dir" value="build"/>
<!-- Initialization Target -->
<target name="init">
<mkdir dir="${build.dir}"/>
</target>
<!-- Compile Target -->
<target name="compile" depends="init">
<javac srcdir="${src.dir}" destdir="${build.dir}"/>
</target>
<!-- Clean Target -->
<target name="clean">
<delete dir="${build.dir}"/>
</target>
</project>
ব্যাখ্যা
- Project Element (
<project>):name: প্রজেক্টের নাম।default: ডিফল্ট target যা ANT চালানোর সময় প্রথমে execute হয়।basedir: প্রজেক্টের বেস ডিরেক্টরি (অথবা কাজের মূল ডিরেক্টরি) নির্দেশ করে।
Property Elements (
<property>):name: প্রপার্টির নাম।value: প্রপার্টির মান। এখানে আপনি ডিরেক্টরি বা অন্যান্য মান সংজ্ঞায়িত করতে পারেন।
উদাহরণ:
<property name="src.dir" value="src"/>Target Elements (
<target>):name: target এর নাম। এটি একটি বিল্ড ইউনিট বা কাজ।depends: কোন target গুলি আগে রান করতে হবে (dependency)।<javac>: কোড কম্পাইল করার জন্য ব্যবহৃত একটি task।<mkdir>: ডিরেক্টরি তৈরি করার জন্য ব্যবহৃত task।<delete>: ফাইল বা ডিরেক্টরি মুছে ফেলার জন্য ব্যবহৃত task।
উদাহরণ:
<target name="compile" depends="init"> <javac srcdir="${src.dir}" destdir="${build.dir}"/> </target>- Task Elements:
<javac>: জাভা সোর্স কোড কম্পাইল করতে ব্যবহৃত task।<mkdir>: নতুন ডিরেক্টরি তৈরি করতে ব্যবহৃত।<delete>: ফাইল বা ডিরেক্টরি মুছে ফেলতে ব্যবহৃত।
এখনো কিছু কমন Task
কোড কম্পাইল করা
<javac srcdir="src" destdir="build/classes"/>ফাইল বা ডিরেক্টরি মুছে ফেলা
<delete file="build/classes/OldClass.class"/>ফাইল কপি করা
<copy file="src/config.xml" todir="build/config"/>একটি জিপ আর্কাইভ তৈরি করা
<zip destfile="build/project.zip"> <fileset dir="build"/> </zip>JUnit টেস্ট চালানো
<junit> <test name="com.mycompany.MyTest"/> </junit>
বেশি কাস্টমাইজেশন
- Target এর মধ্যে নির্দিষ্ট কাজের উপর নির্ভরতা
- আপনি
dependsঅ্যাট্রিবিউট ব্যবহার করে একটি target এর উপর অন্য target এর নির্ভরতা সেট করতে পারেন। যেমন,compiletarget,inittarget-এর উপর নির্ভরশীল।
- আপনি
শর্ত অনুযায়ী কাজ চালানো
ANT-এর মধ্যেifবাunlessঅ্যাট্রিবিউট ব্যবহার করে শর্তাধীন কাজও করতে পারেন। উদাহরণ:<target name="compile" if="is.debug"> <javac debug="true" srcdir="${src.dir}" destdir="${build.dir}"/> </target>
সারাংশ
- ANT build.xml ফাইলের মাধ্যমে আপনি প্রজেক্টের বিভিন্ন কাজ নির্ধারণ করতে পারেন, যেমন কোড কম্পাইল করা, ফাইল কপি করা, টেস্ট চালানো, এবং আরও অনেক কিছু।
- এটি বিভিন্ন target ব্যবহার করে কাজ সম্পন্ন করার প্রক্রিয়া সজ্জিত করে এবং প্রপার্টি ব্যবহার করে মান সংজ্ঞায়িত করা হয়।
- ANT-এর build ফাইল অত্যন্ত কাস্টমাইজেবল এবং কাজের নির্দিষ্ট অনুসারে target এবং task সংজ্ঞায়িত করা যায়।
Apache ANT এর build.xml ফাইল একটি XML ফরম্যাটে লেখা হয় এবং এটি ANT বিল্ড টুলের জন্য কনফিগারেশন ফাইল হিসেবে কাজ করে। build.xml ফাইলে প্রজেক্ট বিল্ড করার জন্য বিভিন্ন টাস্ক, টার্গেট, প্রপার্টি এবং অন্যান্য নির্দেশাবলী সংজ্ঞায়িত করা হয়।
একটি সাধারণ build.xml ফাইলের গঠন এবং এর কম্পোনেন্টগুলি নিচে ব্যাখ্যা করা হয়েছে।
build.xml ফাইলের সাধারণ গঠন
<?xml version="1.0" encoding="UTF-8"?>
<project name="ProjectName" default="default-target" basedir=".">
<!-- Properties -->
<property name="src.dir" value="src"/>
<property name="build.dir" value="build"/>
<property name="jar.name" value="myproject.jar"/>
<!-- Targets -->
<target name="clean">
<delete dir="${build.dir}"/>
</target>
<target name="compile" depends="clean">
<mkdir dir="${build.dir}/classes"/>
<javac srcdir="${src.dir}" destdir="${build.dir}/classes"/>
</target>
<target name="jar" depends="compile">
<jar destfile="${build.dir}/${jar.name}" basedir="${build.dir}/classes"/>
</target>
<target name="default" depends="jar"/>
</project>
build.xml ফাইলের কম্পোনেন্টগুলো
<?xml version="1.0" encoding="UTF-8"?>- এটি XML ডেক্লারেশন, যা ফাইলের শুরুতে থাকে এবং এটি XML ফাইলের ধরন এবং এনকোডিং নির্দেশ করে।
<project>ট্যাগprojectট্যাগটি মূলত ফাইলের রুট ট্যাগ হিসেবে কাজ করে।- অ্যাট্রিবিউটস:
name: প্রকল্পের নাম।default: ডিফল্ট টার্গেট যেটিantকমান্ডের মাধ্যমে রান হবে।basedir: প্রকল্পের বেস ডিরেক্টরি। এটি.(বর্তমান ডিরেক্টরি) হিসেবে সেট করা থাকে, তবে আপনি অন্য কোনো ডিরেক্টরি নির্দিষ্ট করতে পারেন।
<property>ট্যাগpropertyট্যাগগুলি পরিবর্তনশীল (properties) ডিফাইন করে যা অন্যান্য টাস্কে ব্যবহৃত হয়।- অ্যাট্রিবিউটস:
name: প্রপার্টির নাম।value: প্রপার্টির মান।
উদাহরণ:
<property name="src.dir" value="src"/>
<target>ট্যাগtargetট্যাগগুলো হল সেই কার্যাবলী যা ANT টাস্ক হিসাবে রান হবে। প্রতিটিtargetএক বা একাধিক টাস্ক ধারণ করে।- অ্যাট্রিবিউটস:
name: টার্গেটের নাম।depends: অন্য কোন টার্গেটের উপর নির্ভরশীলতা (যদি থাকে)।
উদাহরণ:
<target name="compile" depends="clean"> <mkdir dir="${build.dir}/classes"/> <javac srcdir="${src.dir}" destdir="${build.dir}/classes"/> </target>compileটার্গেটটিcleanটার্গেটের উপর নির্ভরশীল, অর্থাৎcleanটার্গেট আগে রান হবে।
- টাস্ক (Tasks)
- ANT এর মধ্যে অনেক ধরনের টাস্ক ব্যবহার করা হয়। এই টাস্কগুলো বিভিন্ন কাজ যেমন ফাইল কপি, ডিরেক্টরি তৈরি, কোড কম্পাইল, জার ফাইল তৈরি ইত্যাদি করতে ব্যবহৃত হয়।
উদাহরণ:
<javac>: জাভা কোড কম্পাইল করার জন্য।<jar>: জার ফাইল তৈরি করার জন্য।<mkdir>: ডিরেক্টরি তৈরি করার জন্য।<delete>: ফাইল বা ডিরেক্টরি মুছে ফেলার জন্য।
উদাহরণ:
<javac srcdir="${src.dir}" destdir="${build.dir}/classes"/> <jar destfile="${build.dir}/${jar.name}" basedir="${build.dir}/classes"/>
- ডিপেনডেন্সি (Dependencies)
- একটি টার্গেট অন্য টার্গেটের উপর নির্ভরশীল হতে পারে। যদি একটি টার্গেট অন্য টার্গেটের উপর নির্ভরশীল থাকে, তবে সেই টার্গেটটি আগে রান হবে।
উদাহরণ:
<target name="compile" depends="clean">
build.xml ফাইলের উদাহরণ
<?xml version="1.0" encoding="UTF-8"?>
<project name="SampleProject" default="build" basedir=".">
<!-- Defining properties -->
<property name="src.dir" value="src"/>
<property name="build.dir" value="build"/>
<property name="jar.name" value="sample.jar"/>
<!-- Clean target -->
<target name="clean">
<delete dir="${build.dir}"/>
</target>
<!-- Compile target -->
<target name="compile" depends="clean">
<mkdir dir="${build.dir}/classes"/>
<javac srcdir="${src.dir}" destdir="${build.dir}/classes"/>
</target>
<!-- Create JAR -->
<target name="jar" depends="compile">
<jar destfile="${build.dir}/${jar.name}" basedir="${build.dir}/classes"/>
</target>
<!-- Default target -->
<target name="build" depends="jar"/>
</project>
কিভাবে কাজ করে:
- clean: এটি বিল্ড ডিরেক্টরি মুছে ফেলবে।
- compile: এটি
cleanটার্গেটের পরেsrcডিরেক্টরি থেকে জাভা কোড কম্পাইল করবে এবংbuild/classesডিরেক্টরিতে সংরক্ষণ করবে। - jar: এটি
compileটার্গেটের পরে একটি জার ফাইল তৈরি করবে। - build: এটি ডিফল্ট টার্গেট হিসেবে কাজ করবে এবং
jarটার্গেট চালাবে।
সারমর্ম
build.xmlফাইলের মাধ্যমে আপনি আপনার প্রকল্পের বিল্ড প্রসেস কনফিগার এবং অটোমেট করতে পারেন।- এটি প্রপার্টি, টার্গেট, এবং টাস্ক এর মাধ্যমে নির্ধারিত কাজগুলি একে অপরের উপর নির্ভরশীল করে সাজানো হয়।
- একটি ভাল কনফিগারেশন এবং প্রপার টাস্ক ব্যবহারের মাধ্যমে আপনি একটি স্বয়ংক্রিয় বিল্ড সিস্টেম তৈরি করতে পারেন যা প্রকল্পের বিভিন্ন কার্যক্রম সহজ করে তোলে।
Apache ANT একটি powerful build automation tool যা সাধারণত Java প্রজেক্টগুলির জন্য ব্যবহৃত হয়। এটি XML ভিত্তিক ফাইল (build.xml) ব্যবহার করে বিল্ড কনফিগারেশন সংজ্ঞায়িত করে। ANT-এর মধ্যে তিনটি গুরুত্বপূর্ণ উপাদান রয়েছে, যা হল Project, Target, এবং Task। এই তিনটি উপাদান একসাথে কাজ করে build প্রক্রিয়া নির্ধারণে এবং কাস্টমাইজ করতে সাহায্য করে।
১. Project (প্রজেক্ট)
Project হল ANT-এর মূল উপাদান যা build ফাইলের মধ্যে সমস্ত টার্গেট ও টাস্ককে ধারণ করে। এটি একটি container যা টার্গেটের মধ্যে নির্দিষ্ট বিল্ড প্রক্রিয়া নির্দেশ করে।
- প্রকৃত কনফিগারেশন: একটি build.xml ফাইলের প্রথম উপাদান হিসেবে project ট্যাগ থাকে। এটি পুরো build সেশনটি নির্ধারণ করে, যেমন প্রজেক্টের নাম, ভিত্তি ডিরেক্টরি (base directory), ডিফল্ট টার্গেট ইত্যাদি।
উদাহরণ:
<project name="MyProject" default="compile" basedir=".">
<!-- Project specific configurations go here -->
</project>
- Attributes:
name: প্রজেক্টের নাম।default: ডিফল্ট টার্গেট, যা কোনো টার্গেট উল্লেখ না করলে চলবে।basedir: প্রজেক্টের মূল ডিরেক্টরি। এটি সাধারণত প্রজেক্টের মূল ফোল্ডার নির্দেশ করে।
২. Target (টার্গেট)
Target হল একটি নির্দিষ্ট বিল্ড ধাপ বা কাজ, যা কার্যকর করতে হয়। প্রতিটি টার্গেটের মধ্যে এক বা একাধিক task থাকতে পারে। টার্গেটের মধ্যে নির্দেশিত কাজগুলি সম্পাদিত হবে।
- Target ট্যাগের মধ্যে কোনো নির্দিষ্ট কাজ (task) করতে নির্দেশ দেওয়া হয়, এবং এর মধ্যে dependencies (অন্য টার্গেটগুলির উপর নির্ভরশীলতা) থাকতে পারে।
- Target একটি নির্দিষ্ট বিল্ড ধাপ, যেমন
compile,clean,testইত্যাদি।
উদাহরণ:
<target name="compile" depends="clean">
<javac srcdir="src" destdir="build"/>
</target>
<target name="clean">
<delete dir="build"/>
</target>
- Attributes:
name: টার্গেটের নাম যা আপনি কমান্ড লাইনে নির্দিষ্ট করে দিতে পারেন।depends: নির্দিষ্ট করে যে টার্গেটটি অন্য কোনো টার্গেটের উপর নির্ভরশীল।
৩. Task (টাস্ক)
Task হল একটি কাজ যা target এর মধ্যে কার্যকর করা হয়। এটি একটি নির্দিষ্ট কর্ম বা প্রক্রিয়া, যেমন ফাইল কপি করা, কম্পাইল করা, বা একটি জাভা ক্লাস তৈরি করা। ANT-এ built-in অনেক ধরনের task রয়েছে এবং আপনি আপনার প্রয়োজন অনুযায়ী কাস্টম টাস্কও তৈরি করতে পারেন।
কিছু সাধারণ built-in task:
<javac>: জাভা সোর্স কোড কম্পাইল করা।<copy>: ফাইল কপি করা।<delete>: ফাইল বা ডিরেক্টরি মুছে ফেলা।<mkdir>: ডিরেক্টরি তৈরি করা।
উদাহরণ:
<target name="compile">
<javac srcdir="src" destdir="build"/>
</target>
<target name="copy-files">
<copy file="source.txt" tofile="destination.txt"/>
</target>
- Attributes:
- প্রতিটি টাস্কের নিজস্ব অ্যাট্রিবিউট থাকে যা কাজটি করতে ব্যবহৃত হয়, যেমন
src,dest,file,tofileইত্যাদি।
- প্রতিটি টাস্কের নিজস্ব অ্যাট্রিবিউট থাকে যা কাজটি করতে ব্যবহৃত হয়, যেমন
Project, Target, এবং Task এর সম্পর্ক
- Project: প্রজেক্টের মূল উপাদান। এটি সব টার্গেট এবং টাস্কগুলিকে একত্রিত করে এবং ডিফল্ট টার্গেট নির্ধারণ করে।
- Target: একটি নির্দিষ্ট বিল্ড ধাপ বা কাজ যা একাধিক টাস্ক দ্বারা পূর্ণ করা হয়।
- Task: নির্দিষ্ট কাজ যা এক বা একাধিক টার্গেটের মধ্যে কার্যকর হয়।
উদাহরণ:
<project name="MyProject" default="build" basedir=".">
<!-- Clean Target -->
<target name="clean">
<delete dir="build"/>
</target>
<!-- Compile Target -->
<target name="compile" depends="clean">
<javac srcdir="src" destdir="build"/>
</target>
<!-- Build Target (default) -->
<target name="build" depends="compile">
<echo message="Build complete!"/>
</target>
</project>
ব্যাখ্যা:
- clean টার্গেটটি
buildডিরেক্টরি মুছে ফেলে। - compile টার্গেটটি
cleanটার্গেটের পরে চালানো হয় এবং সোর্স কোড কম্পাইল করে। - build টার্গেটটি
compileটার্গেটের পরে চলে এবং বিল্ড সম্পন্ন হওয়ার পর একটি বার্তা প্রিন্ট করে।
সারাংশ
- Project: প্রজেক্টের মূল কাঠামো, যেখানে সব টার্গেট এবং টাস্ক থাকে।
- Target: একটি নির্দিষ্ট কাজ বা ধাপ যা বিল্ড প্রক্রিয়ায় সম্পাদিত হবে।
- Task: একটি নির্দিষ্ট কাজ যা টার্গেটের মধ্যে করা হয় (যেমন কম্পাইল করা, কপি করা ইত্যাদি)।
এগুলি একসাথে একটি পূর্ণাঙ্গ বিল্ড প্রক্রিয়া তৈরি করতে ব্যবহৃত হয় এবং ANT এর মধ্যে বিল্ড কনফিগারেশন খুবই শক্তিশালী এবং কাস্টমাইজযোগ্য।
Apache ANT একটি জনপ্রিয় বিল্ড টুল যা জাভা প্রজেক্টের জন্য ব্যবহৃত হয়। এটি কমান্ড লাইন থেকে পরিচালিত হয় এবং XML ফাইলের মাধ্যমে প্রজেক্টের বিল্ড প্রক্রিয়া পরিচালনা করে। ANT প্রজেক্টের build.xml ফাইলকে ব্যবহার করে বিভিন্ন ধরনের টাস্ক (যেমন কম্পাইল, প্যাকেজ, ক্লিন) সম্পাদন করা হয়।
এখানে আমরা ANT কমান্ড এবং ANT Build Lifecycle সম্পর্কে বিস্তারিত আলোচনা করব।
১. ANT কমান্ড (ANT Commands)
ANT এর সাথে কাজ করতে হলে কমান্ড লাইন থেকে বিভিন্ন কমান্ড ব্যবহার করতে হয়। এখানে কিছু মৌলিক ANT কমান্ড এবং তাদের ব্যাখ্যা দেওয়া হল:
1. ant
এটি সবচেয়ে সাধারণ ANT কমান্ড, যা build.xml ফাইলের ডিফল্ট টার্গেট রান করে।
ব্যবহার:
ant
এটি চালানোর পর, ANT ডিফল্ট টার্গেটটি চালাবে, যদি build.xml ফাইলে কোনো default টার্গেট সেট করা থাকে।
2. ant <target-name>
কোনো নির্দিষ্ট টার্গেট চালানোর জন্য এই কমান্ড ব্যবহার করা হয়।
ব্যবহার:
ant compile
এটি build.xml ফাইলে compile নামক টার্গেটটি চালাবে।
3. ant -version
ANT এর ভার্সন দেখার জন্য ব্যবহার করা হয়।
ব্যবহার:
ant -version
এটি ANT এর বর্তমান ভার্সন দেখাবে।
4. ant -f <file-name>
যদি build.xml ফাইলের নাম পরিবর্তন করা হয় বা অন্য নামের ফাইল ব্যবহার করতে চান, তাহলে -f অপশন ব্যবহার করতে পারেন।
ব্যবহার:
ant -f custom-build.xml
এটি custom-build.xml ফাইল থেকে বিল্ড প্রক্রিয়া চালাবে।
5. ant clean
এটি সাধারণত ডেভেলপারদের দ্বারা ব্যবহৃত হয় প্রকল্পের পূর্ববর্তী বিল্ড আউটপুট মুছে ফেলতে।
ব্যবহার:
ant clean
এটি build.xml ফাইলে সংজ্ঞায়িত clean টার্গেটটি চালাবে।
6. ant -D<property>=<value>
এই কমান্ড ব্যবহার করে আপনি ANT প্রপার্টি সেট করতে পারেন।
ব্যবহার:
ant -Denv=production
এটি env প্রপার্টি এর মান production সেট করবে এবং build.xml ফাইলের মধ্যে সেই মান ব্যবহার করবে।
২. Apache ANT Build Lifecycle
Apache ANT একটি বিল্ড লাইফসাইকেল অনুসরণ করে, যার মধ্যে বিভিন্ন ধাপে টাস্কগুলি সম্পাদিত হয়। ANT এর বিল্ড লাইফসাইকেল প্রধানত তিনটি ধাপে বিভক্ত:
1. init (ইনিশিয়ালাইজেশন)
এই ধাপে, প্রজেক্টের ইনিশিয়াল কনফিগারেশন সেট করা হয় এবং যে কোনো ডিরেক্টরি বা ফাইলের প্রাথমিক স্ট্রাকচার তৈরি করা হয়। উদাহরণস্বরূপ, বিল্ড ডিরেক্টরি তৈরি করা।
উদাহরণ:
<target name="init">
<mkdir dir="build"/>
</target>
2. compile (কম্পাইলিং)
এই ধাপে সোর্স কোড কম্পাইল করা হয়। যদি জাভা সোর্স কোড থাকে, তবে javac টাস্ক ব্যবহার করা হয় কোড কম্পাইল করার জন্য।
উদাহরণ:
<target name="compile" depends="init">
<javac srcdir="src" destdir="build/classes"/>
</target>
3. test (টেস্টিং)
এই ধাপে কোডে টেস্ট রান করা হয়। যদি JUnit টেস্ট থাকলে, junit টাস্ক ব্যবহার করে টেস্ট চালানো হয়।
উদাহরণ:
<target name="test" depends="compile">
<junit>
<classpath>
<pathelement path="build/classes"/>
</classpath>
<test name="com.example.MyTest"/>
</junit>
</target>
4. package (প্যাকেজিং)
এই ধাপে, কোডকে একটি জার (JAR) বা ওয়্যার (WAR) ফাইলে প্যাকেজ করা হয়। এটি অ্যাপ্লিকেশন তৈরির জন্য প্রয়োজনীয় ফাইলগুলিকে একত্রিত করে।
উদাহরণ:
<target name="package" depends="compile">
<jar destfile="build/myapp.jar" basedir="build/classes"/>
</target>
5. deploy (ডিপ্লয়মেন্ট)
এই ধাপে প্যাকেজ করা অ্যাপ্লিকেশন সার্ভারে বা ডেস্টিনেশন সিস্টেমে ডিপ্লয় করা হয়।
উদাহরণ:
<target name="deploy" depends="package">
<copy file="build/myapp.jar" todir="/path/to/deployment"/>
</target>
6. clean (ক্লিনিং)
এই ধাপে, আগের বিল্ড আউটপুট এবং অস্থায়ী ফাইলগুলি মুছে ফেলা হয়, যাতে নতুন বিল্ডে কোনো সমস্যা না হয়।
উদাহরণ:
<target name="clean">
<delete dir="build"/>
</target>
ANT Build Lifecycle Flow
ANT বিল্ড লাইফসাইকেল সাধারণত একটি ডিফল্ট সিরিজের টার্গেট দ্বারা পরিচালিত হয়। যখন আপনি ant কমান্ডটি চালান, এটি build.xml ফাইলে ডিফল্ট টার্গেট অনুসরণ করে। এটি এক বা একাধিক টার্গেটের উপর ভিত্তি করে কাজ করে। উদাহরণস্বরূপ:
clean- আগের বিল্ড আউটপুট মুছে ফেলা হয়।init- প্রাথমিক ডিরেক্টরি এবং ফাইল তৈরি করা হয়।compile- সোর্স কোড কম্পাইল করা হয়।test- টেস্ট রান করা হয়।package- প্যাকেজ করা হয়।deploy- অ্যাপ্লিকেশন ডিপ্লয় করা হয়।
এটি নিশ্চিত করে যে প্রতিটি ধাপ সঠিকভাবে সম্পন্ন হয়েছে এবং প্রজেক্টের বিল্ড প্রক্রিয়া সুষ্ঠুভাবে চলে।
সারসংক্ষেপ
- ANT কমান্ড:
ant,ant <target-name>,ant clean,ant -f <file>ইত্যাদি। - ANT Build Lifecycle:
init,compile,test,package,deploy,clean। - ANT ব্যবহার করে আপনি প্রজেক্টের বিল্ড, টেস্ট, প্যাকেজিং, এবং ডিপ্লয়মেন্টের সম্পূর্ণ প্রক্রিয়া নির্দিষ্ট করতে পারেন।
- প্রতিটি target তার নির্দিষ্ট কাজ সম্পাদন করে, এবং একাধিক টার্গেট একটি নির্দিষ্ট অর্ডারে একত্রে চলে।
Read more