মডার্ন সফটওয়্যার ডেভেলপমেন্টে আমরা ম্যানুয়ালি সার্ভারে কোড আপলোড করি না। আমরা এমন একটি অটোমেটেড পাইপলাইন তৈরি করি যা কোড পুশ করার সাথে সাথে নিজে থেকেই টেস্ট করে সার্ভারে রিলিজ করে দেয়।
ধরি, আমরা ৫ জন ডেভেলপারের একটি টিম একটি প্রজেক্টে কাজ করছি। ম্যানুয়াল যুগে কী হতো? একজন ডেভেলপার কাজ শেষ করে ফাইল জিপ (Zip) করে সার্ভারে আপলোড করতো। মাঝে মাঝে সে ভুলে কোনো প্যাকেজ ইনস্টল করতে ভুলে যেতো, ফলে লাইভ সার্ভার ক্র্যাশ করতো! একে বলা হয় "It works on my machine" প্রবলেম।
CI/CD এর সলিউশন: এখন আমরা কোড লিখে শুধু গিটহাবে git push করি। ক্লাউডে থাকা একটি ভার্চুয়াল মেশিন (যেমন: GitHub Actions) আমাদের কোডটি ডাউনলোড করে, অটোমেটিকভাবে npm test রান করে। যদি টেস্টে কোনো বাগ (Bug) ধরা পড়ে, তবে সে কোডটি লাইভ সার্ভারে পাঠাবে না এবং আমাদেরকে অ্যালার্ট দিবে। আর টেস্ট পাস করলে স্বয়ংক্রিয়ভাবে সার্ভারে রিলিজ (Deploy) করে দিবে!
git push করলেই সবকিছু অটোমেটিক হয়।নিচে একটি স্ট্যান্ডার্ড CI/CD পাইপলাইনের কোড দেওয়া হলো। এই .yml ফাইলটি রিপোজিটরিতে থাকলে GitHub নিজে থেকেই একটি উবুন্টু (Ubuntu) সার্ভার তৈরি করে আমাদের কোড বিল্ড এবং টেস্ট করবে।
name: Node.js CI/CD Pipeline on: push: branches: [ "main" ] jobs: build_and_test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Use Node.js 18.x uses: actions/setup-node@v3 with: node-version: '18.x' # Continuous Integration (CI) - name: Install Dependencies run: npm ci - name: Run Unit Tests run: npm test # Continuous Deployment (CD) runs ONLY if tests pass - name: Deploy to Production (Vercel/Render) if: success() run: npm run deploy env: PROD_API_KEY: ${{ secrets.PROD_API_KEY }}
চলুন প্র্যাকটিক্যালি দেখি। "Push Code" বাটনে ক্লিক করলে পাইপলাইন শুরু হবে। আপনি চাইলে একটি "Bug" ইন্ট্রোডিউস করতে পারেন, যা টেস্ট স্টেজে গিয়ে পুরো ডিপ্লয়মেন্ট আটকে দিবে, যাতে প্রোডাকশন সার্ভার বেঁচে যায়!