GitLab — একটি ওপেন-সোর্স DevOps প্ল্যাটফর্ম যা একটি Git রিপোজিটরি, বিল্ট-ইন CI/CD, কন্টেইনার রেজিস্ট্রি এবং নিরাপত্তা টুলসকে একটি একক অ্যাপ্লিকেশনে একত্রিত করে। 2011 সালে Sid Sijbrandij এবং Dmitriy Zaporozhets দ্বারা প্রতিষ্ঠিত, প্ল্যাটফর্মটি এন্টারপ্রাইজ পরিবেশের জন্য ক্লাউড সার্ভিস (GitLab.com) এবং সেলফ-ম্যানেজড সংস্করণ (Self-Managed) উভয়ই অffer করে। GitLab, 2024 অনুযায়ী, প্ল্যাটফর্মটি 30 মিলিয়নেরও বেশি নিবন্ধিত ব্যবহারকারী ব্যবহার করেন।
মূল পয়েন্ট
GitLab — MIT লাইসেন্সের অধীনে একটি পূর্ণ-বৈশিষ্ট্যযুক্ত ওপেন-সোর্স DevOps প্ল্যাটফর্ম। GitHub-এর বিপরীতে, যা ইন্টিগ্রেশনের মাধ্যমে বিভিন্ন পরিষেবা একত্রিত করে, GitLab সম্পূর্ণ ডেভেলপমেন্ট জীবনচক্রের জন্য একটি একক টুল সরবরাহ করে: কোড ম্যানেজমেন্ট এবং কোড রিভিউ থেকে CI/CD, মনিটরিং, নিরাপত্তা এবং ডিপ্লয়মেন্ট পর্যন্ত। প্ল্যাটফর্মটির বেশিরভাগ DevOps কাজের জন্য থার্ড-পার্টি সার্ভিসের প্রয়োজন হয় না।
GitLab-এর ইতিহাস 2011 সালে ইউক্রেনীয় ডেভেলপারদের একটি অভ্যন্তরীণ প্রকল্প হিসাবে শুরু হয়েছিল। প্রথম পাবলিক সংস্করণ সেপ্টেম্বর 2011 সালে প্রকাশিত হয়েছিল এবং 2015 সালে GitLab GitLab.com-এ প্রথম প্রকল্প হয়ে ওঠে, ক্লাউড হোস্টিং চালু করে। 2017 সালে, GitLab একটি কঠিন কিন্তু শিক্ষণীয় মাইগ্রেশন প্রক্রিয়া সম্পাদন করে — Azure থেকে Google Cloud-এ সম্পূর্ণ অবকাঠামো স্থানান্তর, যা লাইভ সম্প্রচার করা হয়েছিল এবং ব্লগ পোস্টের একটি সিরিজে ডকুমেন্ট করা হয়েছিল।
GitLab-এর আর্কিটেকচারে তিনটি প্রধান উপাদান রয়েছে: GitLab Rails (Ruby on Rails-এ ওয়েব অ্যাপ্লিকেশন), GitLab Shell (SSH-এর মাধ্যমে Git অপারেশন হ্যান্ডলিং), এবং Gitaly (Git ডেটা অ্যাক্সেসের জন্য gRPC সার্ভার)। CI/CD প্রদান করা হয় GitLab Runner-এর মাধ্যমে — একটি পৃথক অ্যাপ্লিকেশন যা বিল্ড সার্ভারে ইন্সটল করা হয় এবং আলাদা পরিবেশে (Docker, Kubernetes, VirtualBox) জব সম্পাদন করে।
GitLab CI/CD — একটি বিল্ট-ইন ক্রমাগত ইন্টিগ্রেশন এবং ডেলিভারি সিস্টেম যা প্ল্যাটফর্মের একটি মূল সুবিধা। GitHub Actions-এর বিপরীতে, GitLab CI/CD শুরু থেকেই আর্কিটেকচারে নির্মিত হয়েছিল এবং এটির আলাদা কনফিগারেশনের প্রয়োজন নেই: রিপোজিটরি রুটে .gitlab-ci.yml ফাইল যোগ করার পর প্রতিটি প্রকল্প স্বয়ংক্রিয়ভাবে CI/CD পায়।
একটি পাইপলাইন ধাপগুলি (স্টেজ) নিয়ে গঠিত যা ক্রমিক বা সমান্তরালভাবে চলে: build → test → deploy। প্রতিটি ধাপে এক বা একাধিক জব থাকে যা রানারগুলিতে সম্পাদিত হয়। যদি কোনো ধাপে কোনো জব ব্যর্থ হয়, পুরো ধাপটি ব্যর্থ হিসাবে চিহ্নিত হয় এবং পরবর্তী ধাপগুলি ডিফল্টভাবে চালানো হয় না। নিচে একটি মোবাইল প্রকল্পের জন্য পাইপলাইনের উদাহরণ দেওয়া হল:
# .gitlab-ci.yml
stages:
- build
- test
- deploy
build-android:
stage: build
image: openjdk:17-jdk
script:
- ./gradlew assembleDebug
artifacts:
paths:
- app/build/outputs/
unit-tests:
stage: test
script:
- ./gradlew testDebugUnitTest
deploy-firebase:
stage: deploy
script:
- firebase appdistribution:distribute app.apk
GitLab Runner একাধিক এক্সিকিউটর সমর্থন করে: Docker (প্রস্তাবিত), Kubernetes, SSH, VirtualBox এবং Parallels। সবচেয়ে জনপ্রিয় বিকল্প হল Docker এক্সিকিউটর, যা প্রতিটি জবকে একটি পৃথক কন্টেইনারে চালায়। একটি রানার একটি প্রকল্পের জন্য নির্দিষ্ট বা পুরো গ্রুপের জন্য শেয়ার্ড হিসাবে নিবন্ধিত করা যেতে পারে। GitLab.com প্রতি মাসে 2000 মিনিট সীমা সহ বিনামূল্যে শেয়ার্ড রানার সরবরাহ করে।
GitLab CI/CD ম্যানুয়াল ট্রিগার (when: manual), বিলম্বিত ট্রিগার (when: delayed), সমান্তরাল এক্সিকিউশন (parallel: 5), ম্যাট্রিক্স, ডায়নামিক পাইপলাইন (child pipelines) এবং মাল্টি-লেভেল পাইপলাইন (parent-child) সমর্থন করে। এটি জটিল পরিস্থিতি তৈরি করতে দেয়: উদাহরণস্বরূপ, মনোরিপোতে প্রতিটি মডিউলের জন্য ডায়নামিকভাবে পাইপলাইন জেনারেট করা বা বিভিন্ন Android আর্কিটেকচারের (arm64, x86_64) জন্য সমান্তরাল বিল্ড চালানো।
GitLab এবং GitHub — Git প্ল্যাটফর্ম বাজারের দুটি প্রধান প্রতিযোগী, কিন্তু তাদের দর্শন এবং আর্কিটেকচার মৌলিকভাবে ভিন্ন। GitHub উন্মুক্ত সম্প্রদায়, ইন্টিগ্রেশনের ইকোসিস্টেম এবং সামাজিক বৈশিষ্ট্যগুলিতে (ফর্ক, স্টার) মনোনিবেশ করে। GitLab একটি ব্যাপক DevOps চক্রের উপর ফোকাস করে এবং সমস্ত টুল বাক্সের বাইরে সরবরাহ করে: পরিকল্পনা থেকে মনিটরিং পর্যন্ত।
প্রধান আর্কিটেকচারাল পার্থক্য: GitLab — একটি একক মনোলিথিক অ্যাপ্লিকেশন যা ডেভেলপার সম্পূর্ণরূপে ইন্সটল করে। সমস্ত বৈশিষ্ট্য (CI/CD, Container Registry, Security Scanning, Pages) বিল্ট-ইন এবং ইন্সটলেশনের পরপরই কাজ করে। GitHub একটি API সহ প্ল্যাটফর্ম যেখানে বেশিরভাগ বৈশিষ্ট্য থার্ড-পার্টি সার্ভিসের সাথে ইন্টিগ্রেশনের মাধ্যমে বাস্তবায়িত হয়: Travis CI, CircleCI, Jenkins, SonarQube। নিচের টেবিলটি মূল বৈশিষ্ট্যগুলির তুলনা করে:
| মানদণ্ড | GitLab | GitHub |
|---|---|---|
| CI/CD | বিল্ট-ইন, .gitlab-ci.yml-এ YAML | Actions, .github/workflows-এ YAML |
| Self-Hosted | বিনামূল্যে (Community Edition) | পেইড (Enterprise Server) |
| লাইসেন্স | MIT (ওপেন সোর্স) | মালিকানাধীন |
| রেজিস্ট্রি | Container + Dependency Proxy | Packages (কন্টেইনার + প্যাকেজ) |
| নিরাপত্তা | SAST, DAST, Fuzzing, Container Scanning | Dependabot + CodeQL (সীমিত) |
GitLab এবং GitHub-এর মধ্যে পছন্দ টিমের প্রয়োজনীয়তার উপর নির্ভর করে। যদি অগ্রাধিকার শূন্য কনফিগারেশন সহ দ্রুত ডিপ্লয়মেন্ট এবং একটি উন্মুক্ত সম্প্রদায় হয় — GitHub বেছে নিন। যদি আপনার সম্পূর্ণ অবকাঠামো নিয়ন্ত্রণ, সেলফ-হোস্টেড ডিপ্লয়মেন্ট এবং বিল্ট-ইন নিরাপত্তার প্রয়োজন হয় — GitLab উত্তম। Stack Overflow জরিপ (2024) অনুযায়ী, 90% ডেভেলপার GitHub ব্যবহার করেন, 33% GitLab ব্যবহার করেন (প্রায়শই উভয় প্ল্যাটফর্ম একসাথে)।
Self-Managed GitLab (পূর্বে On-Premises) আপনাকে আপনার নিজের সার্ভারে প্ল্যাটফর্ম ইন্সটল করতে এবং ডেটা, অবকাঠামো এবং আপটাইমের উপর সম্পূর্ণ নিয়ন্ত্রণ দেয়। এটি বিশেষ করে কমপ্লায়েন্স প্রয়োজনীয়তা সম্পন্ন প্রতিষ্ঠানের জন্য গুরুত্বপূর্ণ: আর্থিক খাত, সরকারি প্রতিষ্ঠান, চিকিৎসা সংস্থা যেখানে ডেটা থার্ড-পার্টি সার্ভারে সংরক্ষণ করা যায় না।
GitLab ইন্সটলেশন Ubuntu, Debian, CentOS এবং Docker-এর মাধ্যমে সমর্থিত। অফিসিয়াল Omnibus প্যাকেজে সমস্ত উপাদান অন্তর্ভুক্ত রয়েছে: ওয়েব সার্ভার (NGINX), ডেটাবেস (PostgreSQL), ক্যাশ (Redis), Git হ্যান্ডলার (Gitaly), এবং ব্যাকগ্রাউন্ড প্রক্রিয়া। ন্যূনতম প্রয়োজনীয়তা: 100 জন পর্যন্ত টিমের জন্য 4 GB RAM এবং 2 CPU। উচ্চ লোড সহ বড় ইন্সটলেশনের জন্য, উপাদানগুলিকে পৃথক সার্ভারে বিভক্ত করার সুপারিশ করা হয়।
# Omnibus-এর মাধ্যমে Ubuntu-তে GitLab CE ইন্সটল করা
curl -LO https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh
sudo bash script.deb.sh
# প্যাকেজ ইন্সটল করা
sudo EXTERNAL_URL="https://gitlab.example.com" apt install gitlab-ce
# স্ট্যাটাস দেখা
sudo gitlab-ctl status
sudo gitlab-ctl tail
Self-Managed GitLab-এ CI/CD মিনিটের কোনো সীমা নেই — সমস্ত রানার প্রতিষ্ঠানের মালিকানাধীন, এবং তাদের শক্তি শুধুমাত্র আপনার নিজস্ব হার্ডওয়্যার দ্বারা সীমিত। অঞ্চলগুলির জন্য জিও-রেপ্লিকেশন, অডিট লগ, আইপি ব্লকিং এবং কর্পোরেট LDAP/SAML প্রদাতাদের সাথে ইন্টিগ্রেশনও উপলব্ধ। GitLab প্রতিমাসে (22 তারিখে) নতুন বৈশিষ্ট্য এবং নিরাপত্তা ফিক্স সহ আপডেট প্রকাশ করে।
GitLab-এ নিরাপত্তা প্ল্যাটফর্ম স্তরে নির্মিত এবং এতে বেশ কয়েকটি স্ক্যানার অন্তর্ভুক্ত রয়েছে যা পাইপলাইনের প্রতিটি ধাপে কাজ করে। SAST (Static Application Security Testing) অ্যাপ্লিকেশন এক্সিকিউট না করেই সোর্স কোডে দুর্বলতা বিশ্লেষণ করে, যা Java, Kotlin, Swift, Python এবং JavaScript সহ 15টিরও বেশি ভাষা সমর্থন করে। DAST (Dynamic Application Security Testing) চলমান ওয়েব অ্যাপ্লিকেশন ভিতর থেকে পরীক্ষা করে।
অতিরিক্ত টুলস: Container Scanning বেস লেয়ারে দুর্বলতার জন্য Docker ইমেজ পরীক্ষা করে; Dependency Scanning প্রকল্পের ডিপেন্ডেন্সি বিশ্লেষণ করে এবং পরিচিত CVE সম্পর্কে সতর্ক করে; Secret Detection ভুলবশত কমিট করা API কী, পাসওয়ার্ড এবং টোকেন খুঁজে পায়; Fuzz Testing অস্পষ্ট বাগ খোঁজার জন্য ভুল ডেটা সহ স্বয়ংক্রিয় পরীক্ষা করে। সমস্ত স্ক্যান ফলাফল একটি ইউনিফাইড সিকিউরিটি ড্যাশবোর্ডে প্রদর্শিত হয়।
GitLab কমপ্লায়েন্স টুলসও সরবরাহ করে — নিয়ন্ত্রক প্রয়োজনীয়তা পূরণের জন্য। কমপ্লায়েন্স ড্যাশবোর্ড সমস্ত প্রকল্পের কমপ্লায়েন্স স্থিতি দেখায়, অডিট ইভেন্ট প্রশাসক এবং ডেভেলপারের প্রতিটি কাজ লগ করে এবং কমপ্লায়েন্স ফ্রেমওয়ার্ক প্রকল্পের নির্দিষ্ট গ্রুপের জন্য কনফিগারেশন নীতি বাধ্যতামূলকভাবে প্রয়োগ করতে দেয়। এটি GitLab-কে কঠোর নিরাপত্তা প্রয়োজনীয়তা সম্পন্ন এন্টারপ্রাইজ পরিবেশে একটি জনপ্রিয় পছন্দ করে তোলে।
GitLab Container Registry — CI/CD-এর সাথে সমন্বিত একটি বিল্ট-ইন Docker রেজিস্ট্রি। পাইপলাইনে Docker ইমেজ বিল্ড করার পরে, এটি পরিবেশ ভেরিয়েবল CI_REGISTRY এবং CI_REGISTRY_USER ব্যবহার করে তৎক্ষণাৎ রেজিস্ট্রিতে প্রকাশ করা যেতে পারে। রেজিস্ট্রি pull-through ক্যাশিং, ট্যাগিং, পরিষ্কার করার নীতি এবং সরাসরি রেজিস্ট্রিতে দুর্বলতা স্ক্যানিং সমর্থন করে।
Dependency Proxy — বাহ্যিক রেজিস্ট্রি (Docker Hub, Quay, GCR) থেকে কন্টেইনার এবং ইমেজের জন্য একটি ক্যাশিং মেকানিজম। যখন কোনো পাইপলাইন ubuntu:latest-এর মতো ইমেজ অনুরোধ করে, GitLab প্রথমে তার ক্যাশ চেক করে — যদি ইমেজ আগেই ডাউনলোড করা থাকে, তবে এটি আবার আনা হয় না। এটি বাহ্যিক রেজিস্ট্রিগুলির উপর লোড কমায়, পাইপলাইন দ্রুততর করে এবং Docker Hub রেট লিমিট থেকে রক্ষা করে।
মোবাইল ডেভেলপারদের জন্য, GitLab ডকুমেন্টেশন এবং টেস্ট রিপোর্ট হোস্ট করার জন্য GitLab Pages সরবরাহ করে। টেস্ট চালানোর পরে, আর্টিফ্যাক্ট (HTML রিপোর্ট, স্ক্রিনশট, লগ) Pages হিসাবে প্রকাশ করা যেতে পারে এবং QA টিমের সাথে লিঙ্ক শেয়ার করা যেতে পারে। এটি ক্লাউড স্টোরেজে রিপোর্ট আপলোড করার চেয়ে বেশি সুবিধাজনক কারণ সবকিছু একই GitLab প্রকল্পের মধ্যে থাকে।
GitLab API (REST এবং GraphQL) প্ল্যাটফর্মের সমস্ত রিসোর্সে অ্যাক্সেস সরবরাহ করে: প্রকল্প, ব্যবহারকারী, পাইপলাইন, মার্জ রিকোয়েস্ট, রেজিস্ট্রি। API অটোমেশনের জন্য ব্যবহৃত হয়: টেমপ্লেট থেকে প্রকল্প তৈরি করা, রিভিউয়ার নিয়োগ করা, পাইপলাইন স্থিতি পাওয়া। Webhooks ইভেন্টে বাহ্যিক সিস্টেমে HTTP বিজ্ঞপ্তি পাঠানোর অনুমতি দেয়: push, merge, Issue তৈরি। Webhooks Mattermost, Slack, Telegram এবং অভ্যন্তরীণ মনিটরিং সিস্টেমের সাথে সংহত হয়।
GitLab Pages রিপোজিটরি থেকে স্বয়ংক্রিয়ভাবে স্ট্যাটিক ওয়েবসাইট প্রকাশ করে। মোবাইল প্রকল্পের জন্য, Pages API ডকুমেন্টেশন, টেস্ট কভারেজ রিপোর্ট এবং lint বিশ্লেষণ ফলাফল হোস্ট করার জন্য সুবিধাজনক। প্রকাশনা একটি সফল পাইপলাইনের পরে স্বয়ংক্রিয়ভাবে ঘটে — শুধু .gitlab-ci.yml-এ Pages প্রকাশনার সাথে একটি ডিপ্লয় স্টেপ যোগ করুন। ফলাফল https://namespace.gitlab.io/project-name-এ উপলব্ধ।
সচরাচর জিজ্ঞাসিত প্রশ্ন
GitLab — কোড সংরক্ষণ এবং বিল্ড অটোমেশনের একটি প্রোগ্রাম। ডেভেলপাররা কোড আপলোড করে, এবং GitLab তা পরীক্ষা করে, অ্যাপ্লিকেশন তৈরি করে এবং সার্ভারে পাঠায়।
GitLab CE (Community Edition) ওপেন সোর্স সহ সম্পূর্ণ বিনামূল্যে। GitLab EE (Enterprise Edition)-এর অতিরিক্ত নিরাপত্তা বৈশিষ্ট্য সহ প্রতি ব্যবহারকারী প্রতি মাসে $19 থেকে শুরু করে পেইড প্ল্যান রয়েছে।
Runner — একটি এজেন্ট যা জব (কাজ) সম্পাদন করে। পাইপলাইন — .gitlab-ci.yml-এ বর্ণিত কাজের একটি ক্রম। Runner সার্ভারে কোড শারীরিকভাবে চালায়, যখন পাইপলাইন নির্ধারণ করে কী এবং কোন ক্রমে চালাতে হবে।
হ্যাঁ, GitLab GitHub, Bitbucket এবং অন্যান্য প্ল্যাটফর্ম থেকে একটি বিল্ট-ইন ইম্পোর্টার সরবরাহ করে। ইম্পোর্ট সর্বোচ্চ ইতিহাস সংরক্ষণের সাথে কোড, কমিট, শাখা, Issues, Wiki এবং পুল রিকোয়েস্ট স্থানান্তর করে।
iOS-এর জন্য একটি macOS রানার প্রয়োজন (ফিজিক্যাল Mac বা ক্লাউডে Mac)। পাইপলাইনে Xcode ইন্সটল করা, বিল্ডের জন্য xcodebuild চালানো, টেস্ট সম্পাদন করা এবং TestFlight-এর জন্য .ipa ফাইল এক্সপোর্ট করা অন্তর্ভুক্ত।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন