CI/CD Pipeline হল ধাপগুলির একটি স্বয়ংক্রিয় ক্রম যা কোড কমিট থেকে ব্যবহারকারীর কাছে ডেলিভারি পর্যন্ত অতিক্রম করে। মোবাইল ডেভেলপমেন্টে, পাইপলাইনে প্রজেক্ট বিল্ড, টেস্ট এক্সিকিউশন, স্ট্যাটিক কোড বিশ্লেষণ, অবফাসকেশন, সইকরণ এবং বিল্ড প্রকাশনা অন্তর্ভুক্ত। GitLab DevOps Report, 2025 অনুসারে, পরিণত CI/CD Pipeline সহ টিমগুলি অটোমেশন ছাড়া টিমের তুলনায় 3.5 গুণ বেশি বার এবং 7 গুণ দ্রুত রিলিজ সরবরাহ করে।
মূল পয়েন্ট
CI/CD Pipeline হল প্রক্রিয়াগুলির একটি আনুষ্ঠানিক এবং স্বয়ংক্রিয় সেট যা কোড রিপোজিটরিতে পরিবর্তন কমিট করা থেকে প্রোডাকশনে ডিপ্লয় করা পর্যন্ত অতিক্রম করে। শব্দটি দুটি অনুশীলনকে একত্রিত করে: Continuous Integration (নিরবিচ্ছিন্ন ইন্টিগ্রেশন) এবং Continuous Delivery (নিরবিচ্ছিন্ন ডেলিভারি), যা একসাথে সফটওয়্যার ডেলিভারি পাইপলাইন গঠন করে।
Continuous Integration-এর ধারণাটি গ্র্যাডি বুক 1991 সালে বর্ণনা করেছিলেন এবং ২০০০-এর দশকে মার্টিন ফাউলার জনপ্রিয় করেছিলেন। Continuous Delivery একটি শব্দ হিসেবে জেজ হাম্বল এবং ডেভিড ফার্লির বই “Continuous Delivery” (2010) পরে প্রতিষ্ঠিত হয়। আধুনিক CI/CD Pipeline 2015 সালের পরে মোবাইল ডেভেলপমেন্টে ডি ফ্যাক্টো স্ট্যান্ডার্ড হয়ে ওঠে — ক্লাউড CI সার্ভার এবং অ্যাপ স্টোর অটোমেশনের আবির্ভাবের সাথে।
মোবাইল অ্যাপ্লিকেশনগুলির বিল্ড এবং প্রকাশনার জন্য নির্দিষ্ট প্রয়োজনীয়তা রয়েছে: সার্টিফিকেট সইকরণ, একাধিক কনফিগারেশন (debug, release, staging), ProGuard/R8 অবফাসকেশন, একাধিক বিল্ড টাইপ (APK, AAB, IPA) এবং অ্যাপ স্টোরের সাথে ইন্টিগ্রেশন। এই ধাপগুলির ম্যানুয়াল সম্পাদন ঘন্টা সময় নেয় এবং ত্রুটি-প্রবণ — CI/CD Pipeline রুটিনকে স্বয়ংক্রিয় করে।
Android বা iOS অ্যাপের জন্য একটি মানক CI/CD Pipeline সাতটি মূল ধাপ নিয়ে গঠিত। কিছু ধাপ সমান্তরালভাবে চলে, অন্যগুলি ক্রমিকভাবে। ধাপগুলির সঠিক সেট টেক স্ট্যাক এবং টিমের পরিপক্কতার উপর নির্ভর করে, তবে মূল অংশ একই থাকে।
পাইপলাইন রিপোজিটরি ক্লোন করা এবং নির্ভরতা ইনস্টল করার মাধ্যমে শুরু হয়: Android-এর জন্য Gradle/Maven, iOS-এর জন্য CocoaPods বা SPM। রানগুলির মধ্যে নির্ভরতা ক্যাশিং ইনস্টলেশন সময় 3–5 মিনিট থেকে কয়েক সেকেন্ডে কমিয়ে আনে — সমস্ত আধুনিক CI পরিষেবা এই অপ্টিমাইজেশন সমর্থন করে।
বিল্ডের আগে, কোড লিন্টার (Android-এর জন্য ktlint, detekt, iOS-এর জন্য SwiftLint) এবং স্ট্যাটিক বিশ্লেষক (Android Lint, SonarQube) দ্বারা পরীক্ষা করা হয়। লিন্টিং টেস্ট চালানোর আগে সম্ভাব্য বাগ, কোড স্টাইল লঙ্ঘন এবং বাতিল API সনাক্ত করে — ফেল-ফাস্ট নীতি টিমের সময় বাঁচায়।
বিল্ড ধাপে, সম্পূর্ণ প্রজেক্ট কম্পাইল করা হয় এবং আর্টিফ্যাক্ট তৈরি হয়: Android-এর জন্য APK এবং AAB, iOS-এর জন্য IPA। Android-এর জন্য Gradle টাস্ক (assembleDebug, bundleRelease) ব্যবহার করা হয়, iOS-এর জন্য — xcodebuild বা xcrun। বিল্ড CI সার্ভারের বিচ্ছিন্ন পরিবেশে সম্পাদিত হয়, যা পুনরুৎপাদনযোগ্যতা নিশ্চিত করে।
# GitHub Actions-এ Android-এর জন্য CI/CD Pipeline উদাহরণ
name: Android CI Pipeline
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
- uses: gradle/actions/setup-gradle@v4
- run: ./gradlew ktlintCheck detekt
- run: ./gradlew assembleDebug
- run: ./gradlew testDebugUnitTest
- run: ./gradlew assembleRelease
- uses: actions/upload-artifact@v4
with:
name: release-apk
path: app/build/outputs/apk/release/*.apk
বিল্ডের পরে, ইউনিট টেস্ট, ইন্টিগ্রেশন টেস্ট এবং UI টেস্ট চলে। ইউনিট টেস্টের জন্য JUnit এবং MockK, Android UI-র জন্য Espresso এবং Compose Test, iOS-এর জন্য XCTest এবং XCUITest। ফলাফল একটি রিপোর্টে প্রকাশিত হয় এবং গুরুত্বপূর্ণ টেস্ট ব্যর্থ হলে পাইপলাইন ব্লক করে।
রিলিজ বিল্ডের জন্য, ডিজিটাল সার্টিফিকেট সইকরণ (Android-এর জন্য APK Signer, iOS-এর জন্য codesign) এবং কোড অবফাসকেশন করা হয়। Android-এর জন্য ProGuard বা R8 APK আকার 15–30% হ্রাস করে। সই কীগুলি CI সার্ভারের গোপন তথ্যে সংরক্ষণ করা হয় — রিপোজিটরিতে কখনও কমিট করা হয় না।
পাইপলাইনের চূড়ান্ত ধাপ হল আর্টিফ্যাক্ট প্রকাশনা: Google Play Console অভ্যন্তরীণ টেস্টিংয়ে APK আপলোড করা, TestFlight-এ IPA পাঠানো বা Firebase Distribution-এ প্রকাশনা। Continuous Delivery মানে এই ধাপে ম্যানুয়াল অনুমোদন প্রয়োজন, যেখানে Continuous Deployment স্বয়ংক্রিয়ভাবে চলে।
পাইপলাইন সম্পূর্ণ হওয়ার পরে, টিম ফলাফল সহ একটি বিজ্ঞপ্তি পায়: সফলতা/ব্যর্থতা, সম্পাদনের সময়, আর্টিফ্যাক্ট লিঙ্ক। Slack, Telegram বা ইমেল — বিজ্ঞপ্তি চ্যানেল টিমের প্রয়োজন অনুসারে বেছে নেওয়া হয়। যখন একটি ধাপ ব্যর্থ হয়, বিজ্ঞপ্তিতে নির্দিষ্ট ত্রুটি লগের লিঙ্ক অন্তর্ভুক্ত থাকে।
CI এবং CD শব্দগুলি প্রায়শই একটি একক ধারণা CI/CD হিসাবে ব্যবহৃত হয়, তবে এগুলির মধ্যে মৌলিক পার্থক্য রয়েছে। CI (Continuous Integration) প্রতিটি কোড ইন্টিগ্রেশনে গুণমান পরীক্ষার জন্য দায়ী, যখন CD (Continuous Delivery) রিলিজের জন্য কোডের প্রস্তুতি নিশ্চিত করে। পাইপলাইন ডিজাইন করার সময় পার্থক্য বোঝা গুরুত্বপূর্ণ।
CI প্রতিটি push বা pull request-এ চলে এবং বিল্ড, স্ট্যাটিক বিশ্লেষণ এবং টেস্টিং অন্তর্ভুক্ত করে। CI-র লক্ষ্য যত তাড়াতাড়ি সম্ভব সমস্যা সনাক্ত করা, যখন সেগুলি ঠিক করার খরচ ন্যূনতম। যদি CI ব্যর্থ হয় — কোড মূল শাখায় প্রবেশ করে না। মোবাইল প্রজেক্টের জন্য গড় CI সম্পাদনের সময় 5–15 মিনিট।
CD CI-তে রিলিজ প্রস্তুতির ধাপ যোগ করে: সইকরণ, অবফাসকেশন, রিলিজ নোট তৈরি, লাইসেন্স পরীক্ষা, পরীক্ষকদের জন্য স্টোরেজে প্রকাশনা। CD গ্যারান্টি দেয় যে মূল শাখায় যেকোনো কমিট একটি বাটন ক্লিকে প্রোডাকশনে পাঠানো যেতে পারে, কিন্তু রিলিজের জন্য ম্যানুয়াল অনুমোদন প্রয়োজন।
| বৈশিষ্ট্য | CI | CD |
|---|---|---|
| ফ্রিকোয়েন্সি | প্রতি push-এ | প্রতি merge-এ main-এ |
| লক্ষ্য | ইন্টিগ্রেশন ত্রুটি সনাক্তকরণ | রিলিজের জন্য বিল্ড প্রস্তুত করা |
| সময়কাল | 5–15 মিনিট | 10–30 মিনিট |
| অংশগ্রহণকারী | ডেভেলপার | QA + DevOps + ম্যানেজার |
| ফলাফল | সবুজ/লাল অবস্থা | টেস্ট স্ট্যান্ডে APK/IPA |
মোবাইল ডেভেলপমেন্টের জন্য CI/CD টুলস-এর ইকোসিস্টেম ক্লাউড পরিষেবা, সেলফ-হোস্টেড সমাধান এবং বিশেষায়িত প্ল্যাটফর্ম অন্তর্ভুক্ত করে। টুল নির্বাচন টিমের আকার, বাজেট এবং নিরাপত্তা প্রয়োজনীয়তার উপর নির্ভর করে। নীচে সবচেয়ে জনপ্রিয় বিকল্পগুলি দেওয়া হল।
GitHub-এ বিল্ট-ইন CI/CD, পাবলিক রিপোজিটরির জন্য মাসে 2000 মিনিটের বিনামূল্যের সীমা সহ। GitHub Actions প্রস্তুত অ্যাকশনের বিশাল ইকোসিস্টেম (মার্কেটপ্লেস), YAML-এর মাধ্যমে সহজ কনফিগারেশন এবং GitHub রিপোজিটরির সাথে নির্বিঘ্ন ইন্টিগ্রেশনের কারণে জনপ্রিয়। সীমাবদ্ধতা — বিনামূল্যের প্ল্যানে iOS বিল্ডের জন্য Windows রানার সমর্থন নেই।
শক্তিশালী YAML কনফিগারেটর সহ সেলফ-হোস্টেড এবং ক্লাউড সমাধান। GitLab CI সমান্তরাল জব, ক্যাশিং, আর্টিফ্যাক্ট এবং পরিবেশ সমর্থন করে। নিজস্ব পরিকাঠামোতে ডিপ্লয় করার ক্ষমতা এবং ডেটার উপর সম্পূর্ণ নিয়ন্ত্রণের কারণে এন্টারপ্রাইজ সেগমেন্টে জনপ্রিয়।
ক্লাসিক ওপেন-সোর্স CI সার্ভার। Jenkins প্লাগইনের মাধ্যমে কনফিগার করা হয় (1800-এর বেশি), Groovy ফরম্যাটে Declarative Pipeline সমর্থন করে এবং যেকোনো পরিবেশে চলে: Windows, macOS, Linux। ডেডিকেটেড অ্যাডমিনিস্ট্রেশন প্রয়োজন তবে সর্বাধিক কনফিগারেশন নমনীয়তা প্রদান করে।
গতি এবং সরলতার উপর ফোকাস করা ক্লাউড CI পরিষেবা। CircleCI স্বয়ংক্রিয়ভাবে নির্ভরতা ক্যাশ করে, বিচ্ছিন্ন বিল্ডের জন্য Docker ইমেজ সমর্থন করে এবং iOS বিল্ডের জন্য macOS-এর সাথে ইন্টিগ্রেট করে। মূল্য নির্ধারণ ক্রেডিট-ভিত্তিক — কর্মক্ষমতা মূল্য দেয় এমন টিমের জন্য উপযুক্ত।
আসুন GitHub Actions এবং Fastlane ব্যবহার করে একটি iOS অ্যাপের জন্য সম্পূর্ণ CI/CD Pipeline দেখি। Fastlane মোবাইল প্রজেক্টের জন্য একটি অটোমেশন টুল যা জটিল বিল্ড, সইকরণ এবং প্রকাশনা অপারেশনগুলিকে সহজ কমান্ডে সংক্ষিপ্ত করে।
# Fastfile — iOS CI/CD-এর জন্য Fastlane কনফিগারেশন
default_platform(:ios)
platform :ios do
desc "টেস্ট ও লিন্টিং চালানো"
lane :ci do
cocoapods
swiftlint
run_tests(scheme: "MyApp", devices: ["iPhone 16 Pro"])
end
desc "রিলিজ বিল্ড এবং TestFlight-এ আপলোড"
lane :release do
match(type: "appstore")
build_app(scheme: "MyApp", export_method: "app-store")
pilot(skip_waiting_for_build: true)
end
end
Fastlane match সার্টিফিকেট এবং প্রোভিশনিং প্রোফাইল পরিচালনা করে, build_app IPA তৈরি করে, pilot বিল্ড TestFlight-এ আপলোড করে। fastlane release কমান্ড সমস্ত ধাপ ক্রমিকভাবে সম্পাদন করে: সার্টিফিকেট পায়, বিল্ড করে, সই করে, বিটা টেস্টারদের জন্য App Store Connect-এ আপলোড করে।
Fastlane-কে GitHub Actions-এর সাথে ইন্টিগ্রেট করা প্রধান শাখায় pull request-এ সম্পূর্ণ পাইপলাইন স্বয়ংক্রিয়ভাবে চালানোর অনুমতি দেয়। iOS কোড কম্পাইলেশনের জন্য macOS-এ সেলফ-হোস্টেড রানার প্রয়োজন — GitHub বিনামূল্যের প্ল্যানে macOS রানার সরবরাহ করে না।
name: iOS CI/CD Pipeline
on:
pull_request:
branches: [main]
push:
branches: [main]
jobs:
ci-checks:
runs-on: macos-14
steps:
- uses: actions/checkout@v4
- uses: ruby/setup-ruby@v1
with:
ruby-version: 3.3
- run: bundle install
- run: bundle exec fastlane ci
- if: github.ref == 'refs/heads/main'
run: bundle exec fastlane release
env:
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
FASTLANE_APPLE_ID: ${{ vars.APPLE_ID }}
একটি কার্যকর CI/CD Pipeline তৈরি করতে কেবল টুল বাছাই নয়, প্রমাণিত অনুশীলন অনুসরণ করাও প্রয়োজন। সঠিক সংগঠন ছাড়া, পাইপলাইন একটি প্রতিবন্ধক হয়ে উঠতে পারে, যা উন্নয়নকে ত্বরান্বিত না করে ধীর করে দেয়। নীচে পরিণত মোবাইল টিমের অভিজ্ঞতার ভিত্তিতে মূল সুপারিশগুলি দেওয়া হল।
দ্রুততম পরীক্ষাগুলি (লিন্টিং, ইউনিট টেস্ট) প্রথমে চলে। যদি সেগুলি ব্যর্থ হয় — পাইপলাইন দীর্ঘ UI টেস্ট বা রিলিজ বিল্ড না চালিয়েই শেষ হয়। Fail fast CI সময়ের মিনিট বাঁচায় এবং ডেভেলপার প্রতিক্রিয়া দ্রুত করে। প্রথম ব্যর্থতা পর্যন্ত গড় সময় 2–3 মিনিটের বেশি হওয়া উচিত নয়।
Gradle ক্যাশ, CocoaPods ক্যাশ এবং SPM ক্যাশ রানগুলির মধ্যে পুনরুদ্ধার করা উচিত। GitHub Actions actions/cache-এর মাধ্যমে ক্যাশিং সমর্থন করে, GitLab CI cache কীওয়ার্ডের মাধ্যমে। ক্যাশিং ছাড়া, প্রতিটি বিল্ড সমস্ত নির্ভরতা নতুন করে ডাউনলোড করে — পাইপলাইন সময়ে 3–10 মিনিট যোগ করে।
স্বাধীন ধাপগুলি (Android এবং iOS-এর জন্য লিন্টার, বিভিন্ন মডিউলের ইউনিট টেস্ট) সমান্তরাল জব হিসাবে চলে। সমান্তরালীকরণ মোট পাইপলাইন সময় 20–30 মিনিট থেকে 5–10 মিনিটে হ্রাস করে। বেশিরভাগ CI পরিষেবা সমান্তরাল জবের জন্য আলাদাভাবে চার্জ করে — প্ল্যান বাছাই করার সময় এটি বিবেচনা করুন।
প্রতিটি পাইপলাইন রান একটি পরিচ্ছন্ন পরিবেশে সম্পাদিত হয়: Docker কন্টেইনার, ভার্চুয়াল মেশিন বা অস্থায়ী রানার। বিচ্ছিন্নকরণ পূর্ববর্তী বিল্ডগুলিকে বর্তমানকে প্রভাবিত করা থেকে রোধ করে। প্রজেক্টের মধ্যে শেয়ার্ড রানার ব্যবহার এড়িয়ে চলুন — ক্রস-প্রজেক্ট পরিবেশ দূষণ অনির্ধারিত ব্যর্থতার দিকে নিয়ে যায়।
API কী, সই সার্টিফিকেট এবং অ্যাপ স্টোর অ্যাক্সেস টোকেন CI সার্ভারের এনক্রিপ্টেড ভল্টে সংরক্ষণ করা হয়। কখনও নয় লগ, আর্টিফ্যাক্ট বা পরিবেশ ভেরিয়েবলে SECRET_ উপসর্গ ছাড়া গোপন তথ্য অন্তর্ভুক্ত করবেন না। iOS সার্টিফিকেট ব্যবস্থাপনার জন্য Fastlane match-এর মতো টুল ব্যবহার করুন।
সচরাচর জিজ্ঞাসিত প্রশ্ন
সাধারণ বিল্ড একটি ম্যানুয়াল বা আধা-স্বয়ংক্রিয় প্রক্রিয়া যা ডেভেলপারের মেশিনে সম্পাদিত হয়। CI/CD Pipeline কমিট থেকে রিলিজ পর্যন্ত সমস্ত ধাপ সম্পূর্ণরূপে স্বয়ংক্রিয় করে, বিচ্ছিন্ন পরিবেশে বিল্ড পুনরুৎপাদনযোগ্যতা নিশ্চিত করে এবং সমস্যাযুক্ত পরিবর্তনগুলিকে প্রোডাকশন শাখায় পৌঁছানোর আগে ব্লক করে।
GitHub Actions-এর সাথে Android-এর জন্য মৌলিক সেটআপ 2–4 ঘন্টা সময় নেয়। টেস্ট, সইকরণ এবং ডিপ্লয়মেন্ট সহ সম্পূর্ণ পাইপলাইন — 2–5 দিন। iOS macOS রানারের প্রয়োজন এবং Apple Developer Portal-এর মাধ্যমে সার্টিফিকেট ব্যবস্থাপনার কারণে জটিলতা যোগ করে।
Android-এর জন্য, GitHub Actions (পাবলিক রিপোজিটরির জন্য বিনামূল্যে), GitLab CI এবং CircleCI উপযুক্ত। iOS-এর জন্য, macOS রানার প্রয়োজন — সর্বোত্তম বিকল্প হল CircleCI, Bitrise বা Mac mini-তে সেলফ-হোস্টেড রানার। ক্রস-প্ল্যাটফর্ম প্রজেক্টের (Flutter, React Native) জন্য, উভয় বিল্ড টাইপ সমর্থন করে এমন পরিষেবা বেছে নিন।
হ্যাঁ, এমনকি একক ডেভেলপারের জন্যও CI/CD Pipeline উপযোগী: মার্জের আগে স্বয়ংক্রিয় টেস্ট পরীক্ষা, বিল্ড সইকরণে মানবিক ত্রুটি দূরীকরণ, TestFlight বা Google Play Console-এ স্বয়ংক্রিয় প্রকাশনা। GitHub Actions-এর বিনামূল্যের সীমা (2000 মিনিট/মাস) একক প্রজেক্টের জন্য যথেষ্ট।
যখন CI/CD Pipeline ব্যর্থ হয়, ধাপের লগ পরীক্ষা করুন — সেগুলি CI সার্ভার ওয়েব ইন্টারফেসে উপলব্ধ। Gradle বা xcodebuild-এর জন্য --verbose ফ্ল্যাগ ব্যবহার করুন। স্থানীয়ভাবে পুনরুৎপাদনের জন্য, একই পরিবেশ সহ Docker কন্টেইনারে একই কমান্ড চালান। রানারে SSH অ্যাক্সেস (যদি সমর্থিত হয়) ডায়াগনস্টিক দ্রুত করে।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন