প্রজেক্টের জন্য Build এবং Deploy Pipeline তৈরি করা in Elixir
Elixir এর জন্য Build এবং Deploy Pipeline তৈরি করা অত্যন্ত গুরুত্বপূর্ণ, বিশেষত যখন আপনি একটি distributed অথবা scalable অ্যাপ্লিকেশন তৈরি করছেন। CI/CD (Continuous Integration / Continuous Deployment) পদ্ধতি ব্যবহার করে আপনি প্রজেক্টের কোড দ্রুত, কার্যকরী এবং নিরাপদভাবে বিল্ড, টেস্ট এবং ডিপ্লয় করতে পারেন।
এখানে আমরা Elixir প্রজেক্টের জন্য একটি সাধারণ Build এবং Deploy Pipeline কিভাবে তৈরি করা যায়, তা দেখব। সাধারণত, GitHub Actions, GitLab CI/CD, CircleCI, বা Jenkins এর মতো টুলস ব্যবহৃত হয়।
1. Build Pipeline (Continuous Integration)
Build Pipeline নিশ্চিত করে যে কোডের নতুন পরিবর্তন স্বয়ংক্রিয়ভাবে বিল্ড এবং টেস্ট করা হয়, যাতে কোনো ত্রুটি বা বাগ সনাক্ত করা যায়। এখানে GitHub Actions ব্যবহার করা হবে, তবে আপনি আপনার পছন্দের CI/CD টুলও ব্যবহার করতে পারেন।
GitHub Actions সেটআপ:
- প্রথমে, আপনার GitHub রিপোজিটরিতে
.github/workflows/ডিরেক্টরি তৈরি করুন। - এরপর, একটি YAML ফাইল তৈরি করুন, যেমন
ci.yml, যা আপনার বিল্ড এবং টেস্ট পিপলাইনের জন্য কনফিগারেশন রাখবে।
name: Elixir CI Pipeline
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Elixir
uses: erlef/setup-elixir@v1
with:
elixir-version: '1.13.0'
otp-version: '24.0'
mix-archives: "hex"
- name: Install dependencies
run: |
mix local.hex --force
mix deps.get
mix deps.compile
- name: Run tests
run: mix test
- name: Dialyzer
run: mix dialyzer
- name: Format check
run: mix format --check-formattedYAML ব্যাখ্যা:
name: পিপলাইনের নাম।on: পিপলাইনটি কখন চলবে। এখানেpushএবংpull_requestইভেন্টগুলির জন্য সেট করা হয়েছে, যা মূলতmainব্রাঞ্চে পরিবর্তন হলে চলবে।jobs: এখানেbuildনামক একটি জব রয়েছে যা Ubuntu তে রান হবে এবং সেখান থেকে কোড চেকআউট, Elixir সেটআপ, ডিপেনডেন্সি ইনস্টলেশন, টেস্ট রান, ডায়ালাইজার রান এবং কোড ফরম্যাট চেক করা হবে।
GitHub Actions এর মাধ্যমে বিল্ড টেস্ট:
- কোড চেকআউট হওয়ার পর,
mix deps.getদিয়ে Elixir এর ডিপেনডেন্সি গুলি ইনস্টল করা হবে। - এরপর
mix testরান করা হবে যাতে সমস্ত টেস্টগুলো স্বয়ংক্রিয়ভাবে চালানো যায়। - Dialyzer ও Formatter চালিয়ে কোডের স্ট্যাটিক বিশ্লেষণ করা হবে।
2. Deploy Pipeline (Continuous Deployment)
Deploy Pipeline এমন একটি সিস্টেম যা আপনাকে কোডের পরিবর্তন স্বয়ংক্রিয়ভাবে আপনার সার্ভারে ডিপ্লয় করতে সাহায্য করে। Elixir প্রজেক্ট ডিপ্লয়ের জন্য সাধারণত Distillery বা Mix releases ব্যবহৃত হয়। এখানে GitHub Actions দিয়ে Deploy Pipeline তৈরি করা হবে যা কোড স্বয়ংক্রিয়ভাবে সার্ভারে ডিপ্লয় করবে।
Elixir Release (Deploy Pipeline):
- আপনার প্রোজেক্টে Mix Release তৈরি করতে হবে। এজন্য
mix releaseকমান্ডটি ব্যবহার করা হয়।
GitHub Actions Deployment Example:
name: Elixir CI/CD Pipeline
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Elixir
uses: erlef/setup-elixir@v1
with:
elixir-version: '1.13.0'
otp-version: '24.0'
- name: Install dependencies
run: |
mix local.hex --force
mix deps.get
mix deps.compile
- name: Run tests
run: mix test
- name: Build release
run: mix release
deploy:
runs-on: ubuntu-latest
needs: build
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Deploy to Server
run: |
scp _build/prod/rel/my_app/releases/0.1.0/my_app.tar.gz user@your_server:/path/to/deployment
ssh user@your_server 'tar -xvzf /path/to/deployment/my_app.tar.gz -C /path/to/deployment'
ssh user@your_server 'cd /path/to/deployment && ./bin/my_app start'YAML ব্যাখ্যা:
- প্রথম build জব টেস্ট, ডিপেনডেন্সি ইনস্টল, এবং Mix Release তৈরি করবে।
- deploy জবটি scp এবং ssh ব্যবহার করে ডিপ্লয়মেন্টের জন্য কোড সার্ভারে পাঠাবে। এতে একটি
.tar.gzআর্কাইভ তৈরি হয়ে সার্ভারে আপলোড হবে এবং তারপর এটি আনজিপ এবং রান করবে।
Deploy Pipeline Configuration:
- Deploy to Server: কোড সিস্টেমে আপলোড করা হয়, এবং পরে Elixir release শুরু করার জন্য কমান্ড দেওয়া হয়।
- Distillery বা Mix release ব্যবহার করে Elixir অ্যাপ্লিকেশন সার্ভারে রান করানো হয়। আপনার সার্ভারে Elixir এবং Erlang ইনস্টল থাকতে হবে।
3. Environment Variables for Deployment
এমনকি আপনি environment variables ব্যবহার করে API কীগুলি, ডাটাবেস ইউজারনেম বা পাসওয়ার্ড মত সিক্রেট ডেটা GitHub Secrets বা অন্যান্য CI/CD tools এর মাধ্যমে পাঠাতে পারেন। GitHub Actions এ সিক্রেট ভ্যালু ব্যবহারের জন্য:
- GitHub Secrets সেটআপ:
- আপনার GitHub রিপোজিটরি > Settings > Secrets > New repository secret এ গিয়ে সিক্রেট তৈরি করুন।
Environment Variables:
- name: Deploy to Server run: | scp _build/prod/rel/my_app/releases/0.1.0/my_app.tar.gz ${{ secrets.SSH_USER }}@${{ secrets.SERVER_IP }}:/path/to/deployment
এখানে, SSH_USER এবং SERVER_IP এর মত সিক্রেট ভ্যালু GitHub Secrets থেকে নেওয়া হচ্ছে।
4. Monitoring and Rollback
CI/CD পিপলাইন সেটআপ করার পর, সিস্টেম মনিটরিং এবং rollback পদ্ধতির ব্যবস্থাও নিশ্চিত করতে হবে:
- Monitoring: সিস্টেমের পারফরম্যান্স এবং ত্রুটির জন্য সিস্টেম মনিটরিং টুল (যেমন: Prometheus, Grafana) ব্যবহার করা যেতে পারে।
- Rollback: যদি কোনো নতুন ডিপ্লয়মেন্টে সমস্যা হয়, তবে পূর্ববর্তী সংস্করণে ফিরে যাওয়ার ব্যবস্থা থাকতে হবে। এর জন্য versioned releases এবং rollback স্ক্রিপ্ট তৈরি করা যায়।
সারসংক্ষেপ
- Build Pipeline: Elixir প্রজেক্টের জন্য GitHub Actions বা অন্য CI টুল ব্যবহার করে কোড বিল্ড, টেস্ট এবং release তৈরি করা যায়।
- Deploy Pipeline: Elixir অ্যাপ্লিকেশন সার্ভারে ডিপ্লয় করতে Distillery বা Mix release ব্যবহার করে SSH এবং SCP এর মাধ্যমে কোড ডিপ্লয় করা যায়।
- CI/CD Tools: GitHub Actions, GitLab CI/CD, CircleCI, এবং Jenkins ব্যবহার করে সহজে Build এবং Deploy Pipeline তৈরি করা সম্ভব।
Read more