গিটহাব একশন – গিটহাব থেকে সার্ভারে ডিপ্লয়

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

ধরে নিচ্ছি আমাদের একটা গিটহাব রিপোজিটোরি রয়েছে। যার কোড গুলো আমরা সার্ভারে পুশ করব। যদি না থাকে, তাহলে একটা সিম্পল প্রজেক্ট তৈরি করে নিব। এরপর গিটহাবে ঐ প্রজেক্ট আপলোড করব। বিস্তারিত জানতে  গিট সম্পর্কে ধারণা, গিট ইন্সটল, ব্যবহার লেখাটি পড়তে পারেন।

প্রজেক্ট ডিপ্লয়মেন্ট অটোমেশন করার জন্য গিটহাব রিপোজিটোরির একশন ট্যাবে ক্লিক করব।

গিটহাবে কোন প্রজেক্টের Action ট্যাবে গেলে প্রজেক্টের জন্য বিভিন্ন ধরণের workflow তৈরি করা যাবে। ধরে নিচ্ছি আমাদের একটা প্রজেক্ট রয়েছে, যা সার্ভারে ডিপ্লয় করব। তার জন্য গিটহাব রিপোজিটরি থেকে Simple workflow এ ক্লিক করব।

Configure এ ক্লিক করলে আমাদের জন্য একটা blank.yml ফাইল জেনারেট করে দিবে। এই ফাইলের নাম যে কোন কিছু দিতে পারব।

ডানপাশের Search Marketplace for Action থেকে আপনি যে কাজের জন্য একশন ব্যবহার করবেন, তা সার্চ করতে পারবেন। যেমন FTP আপলোডের জন্য যেহেতু একশন তৈরি করছি, তাই এখানে FTP Upload সার্চ করে কিছু একশন পেয়ে যাবেন। সাধারণত প্রজেক্ট গিটহাব থেকে সার্ভারে আপলোড করার জন্য আলাদা করে কিছু কোড লিখতে হয়। ঐ কোড গুলো নিজেও লিখে ব্যবহার করা যাবে। তবে আমরা থার্ড পার্টি একটা প্যাকেজ ব্যবহার করব।

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

name: Deploy to cPanel using Custom Action
on:
  push:
    branches:
      - main
jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout repository
      uses: actions/checkout@v4

    - name: Deploy to cPanel
      uses: jakirseu/SFTP-Action-cPanel@main
      with:
        host: example.com
        username: ${{ secrets.USERNAME }}
        password: ${{ secrets.PASSWORD }}
        target: 'public_html/' # server directory

উপরের কোড গুলো একটু ব্যাখ্যা করি প্রথমেঃ

on:
  push:
    branches:
      - main

এর মানে হচ্ছে গিটহাব প্রজেক্টের মেইন ব্রাঞ্চে কোন কমিট পুশ করলেই এই একশন ফাইলটা ট্রিগ্রার হবে। এরপরে কি কি কাজ করবে, তা আমরা বলে দিয়েছি। এরপরের কোড গুলো দেখিঃ

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout repository
      uses: actions/checkout@v4

গিটহাব একশন রান হয় গিটহাব সার্ভারে। সার্ভারে আমরা বলে দিচ্ছি যেন লেটেস্ট উবুন্টু ব্যবহার করতে। এবং গিটহাবের একশন checkout@v4 ব্যবহার করছি। এই চেকআউট প্রজেক্টের লেটেস্ট কমিট এক্সেস করতে পারে এবং ঐ কমিটে থাকা ফাইল গুলো আমরা মূলত সার্ভারে আপলোড করব। আপলোড করার জন্য আলাদা একশন লিখতে হবে। নিজেরা লিখতে পারি অথবা অন্য কোন পাবলিক একশন ব্যবহার করতে পারি। যেমন SFTP-Action-cPanel ব্যবহার করব আমরাঃ

    - name: Deploy to cPanel
      uses: jakirseu/SFTP-Action-cPanel@main
      with:
        host: example.com
        username: ${{ secrets.USERNAME }}
        password: ${{ secrets.PASSWORD }}
        target: 'public_html/' # server directory

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

এখানে ${{ secrets.USERNAME }} এবং ${{ secrets.PASSWORD }} এ মূলত দুইটা ভ্যারিয়েবল ব্যবহার করেছি। এগুলো যেহেতু সিক্রেট, সরাসরি এই ওয়ার্কফ্লোতে লিখলে সমস্যা। রিপোজিটোরির এক্সেস যাদের কাছে থাকবে, তাদের সবাই এই ফাইল দেখবে। সমাধানও রয়েছে গিটহাবে। এগুলোর জন্য সিক্রেট ভ্যারিয়েবল তৈরি করতে পারব রিপোজিটোরির সেটিং পেইজ থেকে।

গিটহাব রিপোজিটোরির Settings > Secrets and variables > Actions > New repository secret এ ক্লিক করে USERNAME & PASSWORD নামে দুইটা সিক্রেট তৈরি করে নিব। Name ফিল্ডে ভ্যারিয়েবলের নাম এবং Secret ফিল্ডে ভ্যালু দিব। সিক্রেট ফিল্ডের ডেটা কিন্তু দেখা যাবে না। তাই ভ্যারিফাই করে এই ইনপুট দিতে হবে। যদিও ডিলিট করে পুনরায় একই ভ্যারিয়েবল তৈরি করা যাবে।

রিপোজিটোরি সিক্রেট গুলো আমরা এক্সেস করতে পারবো ${{ secrets.Variable_Name }} দিয়ে। আপনি যদি হোস্ট বা FTP এড্রেসও হাইড করতে চান, তাও করতে পারেন। এরপর Host: ${{ secrets.HOST }} এভাবে ব্যবহার করতে পারেন ওয়ার্কফ্লো ফাইলে।

আমাদের কাজ শেষ। এবার ওয়ার্কফ্লো ফাইলটা সেভ করব। ওয়ার্কফ্লো ফাইল এডিট করা শেষ হলে Commit Changes এ ক্লিক করে সেভ করব।

ডিফল্ট ভাবে Commit directly to the main branch সিলেক্ট করা থাকবে। আবারও Commit Changes এ ক্লিক করব। যেহেতু আমরা ওয়ার্কফ্লো ফাইলে বলে দিয়েছি মেইন ব্রাঞ্চে কোন পুশ হলে ওয়ার্কফ্লো ফাইল রান হতে, তাই এই ওয়ার্কফ্লোটা রান হবে। রিপোজিটোরির Action ট্যাবে আমরা দেখতে পাবো রেজাল্ট।

এবার প্রজেক্টে কোন পরিবর্তন করে গিটহাবের মেইন ব্রাঞ্চে পুশ করে দেখুন। দেখবেন আপনার ওয়েবসাইটে কিছুক্ষণের মধ্যেই পরিবর্তন গুলো দেখতে পাবেন। আলাদা করে কোন FTP সফটওয়ার ব্যবহার করে সার্ভারে আপলোড করা লাগেনি। গিটহাব প্রজেক্ট থেকে সাথে সাথে সার্ভারে আপলোড হয়ে গিয়েছে।

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

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

এই সম্পর্কিত অন্যান্য লেখা গুলোঃ

Leave a Reply