GitLab — مبانی، قابلیت‌ها و CI/CD

نویسنده: IT Sectr منتشر شده: 2026-05-09 زمان مطالعه: 8 دقیقه

GitLab — یک پلتفرم DevOps با کد منبع باز است که مخزن Git، CI/CD داخلی، ثبت کانتینرها و ابزارهای امنیتی را در یک برنامه واحد ترکیب می‌کند. این پلتفرم که در سال ۲۰۱۱ توسط سید سیبراندت و دیمیتری زاپروژتس تأسیس شد، هم سرویس ابری (GitLab.com) و هم نسخه خودمدیریت (Self-Managed) برای محیط‌های شرکتی ارائه می‌دهد. به گزارش GitLab, 2024، بیش از ۳۰ میلیون کاربر ثبت‌نام‌شده از این پلتفرم استفاده می‌کنند.

نکات اصلی

  • GitLab — یک پلتفرم یکپارچه DevOps با Git، CI/CD، ثبت و امنیت به صورت پیش‌فرض.
  • GitLab CI/CD از پیکربندی YAML در فایل .gitlab-ci.yml برای توصیف pipeline‌ها استفاده می‌کند.
  • Self-Managed — امکان نصب GitLab روی سرور خود بدون محدودیت runner.
  • Container Registry داخلی و Dependency Proxy ساخت برنامه‌های کانتینری را سرعت می‌بخشند.
  • Security Scanning شامل SAST، DAST، اسکن کانتینرها و وابستگی‌ها است.

GitLab چیست؟

GitLab — یک پلتفرم کامل DevOps با کد منبع باز تحت مجوز MIT است. برخلاف GitHub که خدمات مختلف را از طریق یکپارچه‌سازی‌ها ترکیب می‌کند، GitLab یک ابزار واحد برای کل چرخه عمر توسعه ارائه می‌دهد: از مدیریت کد و بازبینی کد تا CI/CD، نظارت، امنیت و استقرار. این پلتفرم برای اکثر وظایف DevOps به خدمات شخص ثالث نیاز ندارد.

تاریخچه GitLab در سال ۲۰۱۱ به عنوان یک پروژه داخلی توسط توسعه‌دهندگان اوکراینی آغاز شد. اولین نسخه عمومی در سپتامبر ۲۰۱۱ منتشر شد و در سال ۲۰۱۵ GitLab به اولین پروژه در GitLab.com تبدیل شد و میزبانی ابری را راه‌اندازی کرد. در سال ۲۰۱۷، GitLab یک فرآیند مهاجرت دردناک اما آموزنده را انجام داد — انتقال کل زیرساخت از Azure به Google Cloud که به صورت زنده پخش و در یک سری پست‌ها مستند شد.

معماری GitLab از سه مؤلفه اصلی تشکیل شده است: GitLab Rails (برنامه وب در Ruby on Rails)، GitLab Shell (پردازش عملیات Git از طریق SSH) و Gitaly (سرور gRPC برای دسترسی به داده‌های Git). CI/CD از طریق GitLab Runner — یک برنامه جداگانه که روی سرورهای ساخت نصب می‌شود و job‌ها را در محیط‌های ایزوله (Docker، Kubernetes، VirtualBox) اجرا می‌کند — تأمین می‌شود.

GitLab CI/CD: pipeline‌ها و runner‌ها

GitLab CI/CD — یک سیستم یکپارچه تحویل و یکپارچه‌سازی مداوم داخلی است که مزیت کلیدی پلتفرم محسوب می‌شود. برخلاف GitHub Actions، GitLab CI/CD از ابتدا در معماری گنجانده شده است و به پیکربندی جداگانه نیاز ندارد: هر پروژه پس از افزودن فایل .gitlab-ci.yml به ریشه مخزن، به طور خودکار CI/CD دریافت می‌کند.

Pipeline (pipeline) از مرحله‌هایی (stages) تشکیل شده است که به صورت ترتیبی یا موازی اجرا می‌شوند: build → test → deploy. هر مرحله شامل یک یا چند job است که روی runner‌ها اجرا می‌شوند. اگر یک job در مرحله با خطا پایان یابد، کل مرحله به عنوان failed علامت‌گذاری می‌شود و مراحل بعدی به طور پیش‌فرض اجرا نمی‌شوند. در زیر نمونه pipeline برای یک پروژه موبایل آورده شده است:

yaml
# .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 از چندین executor (اجراکننده) پشتیبانی می‌کند: Docker (توصیه شده)، Kubernetes، SSH، VirtualBox و Parallels. محبوب‌ترین گزینه اجراکننده Docker است که هر job را در یک کانتینر جداگانه اجرا می‌کند. Runner می‌تواند به عنوان مختص یک پروژه یا به صورت مشترک (shared) برای کل گروه ثبت شود. GitLab.com runner‌های مشترک رایگان با محدودیت ۲۰۰۰ دقیقه در ماه ارائه می‌دهد.

قابلیت‌های پیشرفته CI/CD

GitLab CI/CD از اجرای دستی (when: manual)، اجرای تأخیری (when: delayed)، اجرای موازی (parallel: 5)، ماتریس (matrix)، pipeline‌های پویا (child pipelines) و pipeline‌های چندسطحی (parent-child) پشتیبانی می‌کند. این امکان ساخت سناریوهای پیچیده را فراهم می‌کند: مثلاً تولید پویای pipeline برای هر ماژول در مخزن یکتا یا اجرای ساخت‌های موازی برای معماری‌های مختلف Android (arm64, x86_64).

GitLab در مقابل GitHub: تفاوت‌های کلیدی

GitLab و GitHub — دو رقیب اصلی در بازار پلتفرم‌های Git هستند، اما فلسفه و معماری آنها اساساً متفاوت است. GitHub بر جامعه باز، اکوسیستم یکپارچه‌سازی‌ها و ویژگی‌های اجتماعی (fork، ستاره) تمرکز دارد. GitLab بر چرخه جامع DevOps متمرکز است و همه ابزارها را به صورت پیش‌فرض ارائه می‌دهد: از برنامه‌ریزی تا نظارت.

تفاوت معماری اصلی: GitLab — یک برنامه یکپارچه است که توسعه‌دهنده آن را به طور کامل نصب می‌کند. همه ویژگی‌ها (CI/CD، Container Registry، Security Scanning، Pages) داخلی هستند و بلافاصله پس از نصب کار می‌کنند. GitHub — پلتفرمی با API است که بیشتر ویژگی‌ها از طریق یکپارچه‌سازی با خدمات شخص ثالث پیاده‌سازی می‌شوند: Travis CI، CircleCI، Jenkins، SonarQube. جدول زیر ویژگی‌های کلیدی را مقایسه می‌کند:

معیارGitLabGitHub
CI/CDداخلی، YAML در .gitlab-ci.ymlActions، YAML در .github/workflows
Self-Hostedرایگان (Community Edition)پرداختی (Enterprise Server)
مجوزMIT (کد باز)مالکیتی
RegistryContainer + Dependency ProxyPackages (کانتینرها + بسته‌ها)
SecuritySAST، DAST، Fuzzing، Container ScanningDependabot + CodeQL (محدود)

انتخاب بین GitLab و GitHub به نیازهای تیم بستگی دارد. اگر اولویت استقرار سریع با پیکربندی صفر و جامعه باز است — GitHub را انتخاب کنید. اگر کنترل کامل زیرساخت، میزبانی خود و امنیت داخلی مورد نیاز است — GitLab ترجیح داده می‌شود. طبق نظرسنجی Stack Overflow (۲۰۲۴)، ۹۰٪ توسعه‌دهندگان از GitHub و ۳۳٪ از GitLab (اغلب هر دو پلتفرم همزمان) استفاده می‌کنند.

Self-Managed GitLab: نصب روی سرور خود

Self-Managed GitLab (قبلاً On-Premises) امکان نصب پلتفرم روی سرور خود و کنترل کامل داده‌ها، زیرساخت و در دسترس بودن را فراهم می‌کند. این امر به ویژه برای سازمان‌های با الزامات انطباق اهمیت دارد: بخش مالی، مؤسسات دولتی، سازمان‌های پزشکی که داده‌ها نمی‌توانند روی سرورهای شخص ثالث ذخیره شوند.

نصب GitLab در Ubuntu، Debian، CentOS و از طریق Docker پشتیبانی می‌شود. بسته رسمی Omnibus شامل همه مؤلفه‌ها است: وب‌سرور (NGINX)، پایگاه داده (PostgreSQL)، حافظه نهان (Redis)، پردازنده Git (Gitaly) و فرآیندهای پس‌زمینه. حداقل نیازها: ۴ گیگابایت RAM و ۲ CPU برای تیم تا ۱۰۰ نفر. برای نصب‌های بزرگ با بار بالا، جداسازی مؤلفه‌ها روی سرورهای جداگانه توصیه می‌شود.

bash
# نصب GitLab CE روی Ubuntu از طریق Omnibus
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 ندارد — همه runner‌ها متعلق به سازمان هستند و قدرت آنها فقط توسط سخت‌افزار خود محدود می‌شود. همچنین Geo-replication برای مناطق، لاگ‌های حسابرسی، مسدودسازی IP و یکپارچه‌سازی با ارائه‌دهندگان LDAP/SAML شرکتی در دسترس است. GitLab هر ماه (در ۲۲ام) به‌روزرسانی‌هایی با ویژگی‌های جدید و رفع مشکلات امنیتی منتشر می‌کند.

ابزارهای امنیتی داخلی GitLab

امنیت در GitLab در سطح پلتفرم تعبیه شده است و شامل چندین اسکنر است که در هر مرحله از pipeline کار می‌کنند. SAST (Static Application Security Testing) کد منبع را برای آسیب‌پذیری‌ها بدون اجرای برنامه تحلیل می‌کند و بیش از ۱۵ زبان از جمله Java، Kotlin، Swift، Python و JavaScript را پشتیبانی می‌کند. DAST (Dynamic Application Security Testing) برنامه وب در حال اجرا را برای آسیب‌پذیری‌ها از داخل تست می‌کند.

ابزارهای اضافی: Container Scanning تصاویر Docker را برای آسیب‌پذیری‌ها در لایه‌های پایه بررسی می‌کند؛ Dependency Scanning وابستگی‌های پروژه را تحلیل و درباره CVE‌های شناخته شده هشدار می‌دهد؛ Secret Detection کلیدهای API، رمزهای عبور و توکن‌هایی که به طور تصادفی commit شده‌اند را پیدا می‌کند؛ Fuzz Testing تست خودکار با داده‌های نادرست برای یافتن باگ‌های غیر آشکار انجام می‌دهد. همه نتایج اسکن در یک Security Dashboard نمایش داده می‌شوند.

GitLab همچنین Compliance — ابزارهایی برای رعایت الزامات نظارتی ارائه می‌دهد. Compliance Dashboard وضعیت انطباق همه پروژه‌ها را نشان می‌دهد، Audit Events هر اقدام مدیر و توسعه‌دهنده را ثبت می‌کند، و Compliance Frameworks امکان اعمال اجباری سیاست‌های پیکربندی برای گروه‌های پروژه خاص را فراهم می‌کند. این امر GitLab را به یک انتخاب محبوب در محیط‌های شرکتی با الزامات امنیتی سخت تبدیل می‌کند.

Container Registry و Dependency Proxy

GitLab Container Registry — یک ثبت Docker داخلی یکپارچه با CI/CD است. پس از ساخت تصویر Docker در pipeline، می‌توان آن را بلافاصله در Registry با استفاده از متغیرهای محیطی CI_REGISTRY و CI_REGISTRY_USER منتشر کرد. Registry از کش pull-through، برچسب‌گذاری، سیاست‌های پاکسازی و اسکن آسیب‌پذیری مستقیماً در ثبت پشتیبانی می‌کند.

Dependency Proxy — مکانیزمی برای کش کردن کانتینرها و تصاویر از ثبت‌های خارجی (Docker Hub، Quay، GCR). وقتی pipeline تصویر ubuntu:latest را درخواست می‌کند، GitLab ابتدا کش خود را بررسی می‌کند — اگر تصویر قبلاً بارگذاری شده باشد، دوباره دانلود نمی‌شود. این کار بار روی ثبت‌های خارجی را کاهش می‌دهد، pipeline‌ها را سرعت می‌بخشد و در برابر محدودیت‌های نرخ Docker Hub محافظت می‌کند.

برای توسعه‌دهندگان موبایل، GitLab GitLab Pages را برای میزبانی مستندات و گزارش‌های تست فراهم می‌کند. پس از اجرای تست‌ها، مصنوعات (گزارش‌های HTML، اسکرین‌شات‌ها، لاگ‌ها) را می‌توان به عنوان Pages منتشر کرد و لینکی برای ارسال به تیم QA دریافت کرد. این کار راحت‌تر از بارگذاری گزارش‌ها در فضای ابری است، زیرا همه چیز در همان پروژه GitLab قرار می‌گیرد.

API و Webhook‌های GitLab

GitLab API (REST و GraphQL) دسترسی به تمام منابع پلتفرم را فراهم می‌کند: پروژه‌ها، کاربران، pipeline‌ها، Merge Request، ثبت. API برای خودکارسازی استفاده می‌شود: ایجاد پروژه از الگو، تعیین بازبین، دریافت وضعیت pipeline. Webhook‌ها امکان ارسال اعلان‌های HTTP به سیستم‌های خارجی در رویدادها را فراهم می‌کنند: push، merge، ایجاد Issue. Webhook‌ها با Mattermost، Slack، Telegram و سیستم‌های نظارت داخلی یکپارچه می‌شوند.

GitLab Pages برای مستندات موبایل

GitLab Pages به طور خودکار وبسایت‌های ایستا را از مخزن منتشر می‌کند. برای پروژه‌های موبایل، Pages برای قرار دادن مستندات API، گزارش‌های پوشش تست و نتایج تحلیل lint مناسب است. انتشار پس از pipeline موفق به طور خودکار انجام می‌شود — کافی است مرحله deploy با انتشار در Pages را در .gitlab-ci.yml مشخص کنید. نتیجه در آدرس https://namespace.gitlab.io/name-project قابل دسترسی است.

سوالات متداول

GitLab به زبان ساده چیست؟

GitLab — برنامه‌ای برای ذخیره کد و خودکارسازی ساخت است. توسعه‌دهندگان کد را بارگذاری می‌کنند و GitLab خود آن را تست می‌کند، برنامه را می‌سازد و به سرور می‌فرستد.

GitLab رایگان است یا پولی؟

GitLab CE (Community Edition) با کد باز کاملاً رایگان است. GitLab EE (Enterprise Edition) تعرفه‌های پرداختی از ۱۹ دلار به ازای هر کاربر در ماه با ویژگی‌های امنیتی اضافی دارد.

تفاوت GitLab Runner با pipeline چیست؟

Runner — عاملی است که job‌ها را اجرا می‌کند. Pipeline — توالی job‌هایی است که در .gitlab-ci.yml توصیف شده است. Runner به طور فیزیکی کد را روی سرور اجرا می‌کند و pipeline مشخص می‌کند که چه چیزی و به چه ترتیبی اجرا شود.

آیا می‌توان مخزن را از GitHub به GitLab منتقل کرد؟

بله، GitLab یک واردکننده داخلی از GitHub، Bitbucket و سایر پلتفرم‌ها ارائه می‌دهد. وارد کردن کد، commit‌ها، شاخه‌ها، Issues، Wiki و Pull Request را با حداکثر حفظ تاریخچه منتقل می‌کند.

چگونه GitLab CI را برای پروژه iOS تنظیم کنیم؟

برای iOS یک macOS-runner (Mac فیزیکی یا Mac در ابر) لازم است. pipeline شامل نصب Xcode، اجرای xcodebuild برای ساخت، اجرای تست‌ها و خروجی فایل .ipa برای TestFlight است.

خلاصه

  • GitLab — یک پلتفرم یکپارچه DevOps با کد باز که Git، CI/CD، امنیت و ثبت‌ها را ترکیب می‌کند.
  • GitLab CI/CD pipeline‌ها را در .gitlab-ci.yml با پشتیبانی از Docker، Kubernetes و ساخت‌های ماتریسی توصیف می‌کند.
  • Self-Managed امکان نصب GitLab روی سرورهای خود بدون محدودیت دقیقه و کاربر را فراهم می‌کند.
  • ابزارهای امنیتی داخلی شامل SAST، DAST، Dependency Scanning و Secret Detection هستند.
  • Container Registry و Dependency Proxy ساخت را سرعت می‌بخشند و بار روی ثبت‌های خارجی را کاهش می‌دهند.
  • GitLab برای سازمان‌هایی که نیاز به کنترل کامل زیرساخت و داده‌ها دارند، از GitHub بهتر است.
  • شروع کنید با ایجاد پروژه در GitLab.com و افزودن .gitlab-ci.yml — پیکربندی پایه کمتر از یک ساعت طول می‌کشد.

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید