گیتلب
GitLab
مدیریت خودکار Issues، Merge Requests، Pipelines و CI/CD در GitLab
نمای کلی
نود GitLab چیست؟
نود GitLab امکان اتصال و خودکارسازی فرآیندهای DevOps را در n8n فراهم میکند. GitLab یک پلتفرم all-in-one برای توسعه نرمافزار است که با بیش از ۳۰ میلیون کاربر یکی از محبوبترین ابزارهای DevOps در جهان است.
قابلیتهای کلیدی:
- مدیریت Issues: ایجاد، ویرایش، بستن، label و assign کردن issues
- Merge Requests: ایجاد MR، مدیریت review، approve و merge
- Pipelines: مشاهده وضعیت، trigger و cancel کردن CI/CD pipelines
- Repository: مدیریت branches، tags، files و commits
- Releases: ایجاد release و مدیریت milestones
- Users & Groups: مدیریت دسترسیها و اعضای گروه
- Webhooks: دریافت eventها از GitLab
مزایای GitLab نسبت به GitHub:
- Self-hosted: امکان نصب روی سرور شخصی (مهم برای ایران)
- CI/CD یکپارچه: بدون نیاز به سرویس جداگانه
- Container Registry: ذخیره و مدیریت Docker images
- Security Scanning: اسکن امنیتی خودکار کد
- Package Registry: میزبانی پکیجهای npm، PyPI، Maven و...
محدودیتهای API:
- Authenticated: ۲,۰۰۰ درخواست در دقیقه (GitLab.com)
- Self-hosted: قابل تنظیم توسط admin
- Search API: ۱۰ درخواست در دقیقه
احراز هویت
احراز هویت GitLab
روش ۱: Personal Access Token (سادهترین)
- 1به User Settings > Access Tokens بروید
- 2نام، تاریخ انقضا و scopes را تنظیم کنید:
api: دسترسی کامل APIread_api: فقط خواندنread_user: اطلاعات کاربرread_repository: خواندن repowrite_repository: نوشتن در repo
- 1Token را کپی و در n8n وارد کنید
روش ۲: Project Access Token (توصیه شده)
مناسب برای دسترسی محدود به یک project خاص:
- 1به Project > Settings > Access Tokens بروید
- 2نام، role و scopes را تنظیم کنید
- 3Roleها: Guest, Reporter, Developer, Maintainer
مزایا:
- دسترسی فقط به project مشخص
- قابل مدیریت توسط project maintainers
- بدون وابستگی به اکانت شخصی
روش ۳: Group Access Token
مناسب برای دسترسی به همه projects یک group:
- 1به Group > Settings > Access Tokens بروید
- 2مشابه Project Access Token تنظیم کنید
روش ۴: OAuth2
- 1در Admin Area > Applications یک OAuth app بسازید
- 2Client ID و Client Secret را در n8n وارد کنید
- 3Redirect URI را تنظیم کنید
تنظیم GitLab Self-Hosted در n8n:
اگر از GitLab self-hosted استفاده میکنید:
- 1در n8n credential، GitLab Server URL را وارد کنید
- 2مثال:
https://gitlab.mycompany.com - 3مطمئن شوید سرور از n8n قابل دسترسی است
- 4SSL Certificate معتبر داشته باشد (یا self-signed تنظیم کنید)
عملیاتهای موجود
issue-create
ایجاد issue جدید در project
issue-update
ویرایش issue موجود
issue-list
دریافت لیست issues با فیلتر
issue-note
ارسال یادداشت روی issue
mr-create
ایجاد merge request جدید
mr-merge
Merge کردن merge request
mr-approve
Approve کردن merge request
mr-list
دریافت لیست MRها
pipeline-list
دریافت لیست CI/CD pipelines
pipeline-trigger
اجرای CI/CD pipeline جدید
pipeline-cancel
لغو یک pipeline در حال اجرا
pipeline-retry
اجرای مجدد jobهای failed در pipeline
repo-file-get
خواندن محتوای فایل از repository
repo-branch-list
دریافت لیست branches
release-create
ایجاد release جدید
کاربردهای متداول
کاربردهای رایج
۱. اطلاعرسانی Pipeline Failure
وقتی CI/CD pipeline شکست بخورد، تیم توسعه از طریق تلگرام یا Slack مطلع شود.
GitLab Trigger (Pipeline Hook - failed) → Telegram (ارسال پیام با جزئیات خطا)۲. Auto-Merge پس از Approve
وقتی MR approve شود و pipeline موفق باشد، خودکار merge شود.
GitLab Trigger (MR Hook - approved) → GitLab (merge when pipeline succeeds)۳. Deployment Notification
پس از موفقیت pipeline در branch production، تیم از deploy مطلع شود.
GitLab Trigger (Pipeline - success on main) → IF (branch = main) → Slack + Email (اطلاعرسانی)۴. Issue Triage خودکار
بر اساس محتوا و labels، issues خودکار به افراد مناسب assign شود.
GitLab Trigger (Issue Hook) → Code (تحلیل labels) → GitLab (assign به developer مرتبط)۵. همگامسازی Issues با Jira
وقتی issue در GitLab ایجاد شود، خودکار در Jira هم ساخته شود.
GitLab Trigger (Issue - opened) → Jira (ایجاد issue) → GitLab (اضافه کردن Jira link به کامنت)۶. Security Alert Monitoring
اسکن نتایج SAST/DAST و ارسال alert برای آسیبپذیریهای بحرانی.
Schedule (هر ساعت) → GitLab (لیست vulnerabilities) → Filter (critical/high) → Email + Telegram۷. Release Notes Generator
خودکار release notes از MRهای merge شده generate شود.
GitLab Trigger (Tag Push) → GitLab (لیست MRs) → Code (ساخت changelog) → GitLab (ایجاد release)۸. Code Review Reminder
هر روز MRهای بدون review بیش از ۲۴ ساعت پیدا شده و به reviewer یادآوری شود.
Schedule (روزانه) → GitLab (لیست open MRs) → Filter (بدون review > 24h) → Slack (mention reviewer)۹. Environment Cleanup
Environments قدیمی و غیرفعال را خودکار حذف کنید.
Schedule (هفتگی) → GitLab (لیست environments) → Filter (stopped > 30 days) → GitLab (delete environment)۱۰. Multi-Project Pipeline Dashboard
وضعیت pipeline آخرین commit همه projects را در یک داشبورد نمایش دهید.
Schedule (هر ۵ دقیقه) → GitLab (لیست projects) → GitLab (آخرین pipeline هر project) → Google Sheets (update dashboard)نکات حرفهای
نکات حرفهای
۱. از Project Access Token استفاده کنید
بجای Personal Token، از Project Access Token برای دسترسی محدود و امنتر استفاده کنید. وابستگی به اکانت شخصی ندارد.
۲. Self-Hosted GitLab در ایران
GitLab self-hosted گزینه عالی برای تیمهای ایرانی است: بدون نیاز به VPN، کنترل کامل دادهها، و سرعت بالاتر.
۳. Pipeline Variables
از pipeline variables برای پاس دادن پارامتر از n8n به CI/CD استفاده کنید. مثلاً: version number، environment name، یا feature flags.
۴. Merge Request Templates
از MR templates استفاده کنید تا همه MRها ساختار یکسانی داشته باشند. n8n میتواند خودکار template را پر کند.
۵. GitLab GraphQL API
برای کوئریهای پیچیده از GraphQL API استفاده کنید (/api/graphql). با HTTP Request node و یک query میتوانید چندین resource را دریافت کنید.
۶. Container Registry Integration
از GitLab Container Registry برای مدیریت Docker images استفاده کنید. n8n میتواند خودکار images قدیمی را cleanup کند.
۷. Environment Variables مخفی
اطلاعات حساس مثل API keys را در CI/CD Variables ذخیره کنید (masked + protected). از n8n میتوانید variables را مدیریت کنید.
۸. Multi-Project Pipelines
از downstream pipeline trigger برای اجرای pipeline در projectهای وابسته استفاده کنید.
۹. Approval Rules
قبل از auto-merge، بررسی کنید آیا تعداد approveهای کافی دریافت شده. از approvals_before_merge استفاده کنید.
۱۰. Issue Weight برای Sprint Planning
از Issue weight برای تخمین effort استفاده کنید. n8n میتواند خودکار burndown chart بسازد.
۱۱. GitLab Pages برای Documentation
از GitLab Pages برای host کردن مستندات استفاده کنید. n8n میتواند خودکار docs را از code generate و deploy کند.
۱۲. Protected Branches & Tags
مطمئن شوید operations خودکار (merge, push) با branch protection rules سازگار است. از deploy tokens برای CI/CD استفاده کنید.
۱۳. Audit Log Monitoring
از GitLab Audit Events API برای monitoring فعالیتهای حساس استفاده کنید. n8n میتواند alertها را خودکار ارسال کند.
۱۴. URL-Encoded Project Path
در API calls، اگر project path شامل / است، باید URL-encode شود: group%2Fproject.
۱۵. Pagination با keyset
برای لیستهای بزرگ از keyset pagination بجای offset pagination استفاده کنید. بسیار سریعتر است.
رفع مشکلات
رفع مشکلات رایج
❌ خطای 401 Unauthorized
علت: Token نامعتبر یا منقضی شده
راهحل
- Token را بررسی و در صورت نیاز regenerate کنید
- مطمئن شوید Token هنوز active است
- برای self-hosted GitLab، URL صحیح تنظیم شده باشد
❌ خطای 403 Forbidden
علت: دسترسی کافی ندارید
راهحل
- Scopes توکن را بررسی کنید (
apiبرای دسترسی کامل) - نقش شما در project باید Developer یا بالاتر باشد
- برای merge، نقش Maintainer لازم است
- Rate limit ممکن است تمام شده باشد
❌ خطای 404 Not Found
علت: Project یا Resource پیدا نشد
راهحل
- از Project ID عددی یا URL-encoded path استفاده کنید
- مثال:
group%2Fsubgroup%2Fprojectبجایgroup/subgroup/project - مطمئن شوید Token به project دسترسی دارد
❌ خطای 409 Conflict
علت: تداخل در عملیات
راهحل
- برای MR merge، conflictها را ابتدا resolve کنید
- برای file operations، آخرین commit SHA را استفاده کنید
❌ Pipeline اجرا نمیشود
علت: مشکل در trigger یا configuration
راهحل
- مطمئن شوید
.gitlab-ci.ymlصحیح است - Pipeline trigger token معتبر باشد
- Runnerهای فعال وجود داشته باشد
- Branch محافظتشده ممکن است pipeline را block کند
❌ Webhook Event دریافت نمیشود
علت: تنظیمات Webhook نادرست
راهحل
- URL باید publicly accessible باشد
- در Project > Settings > Webhooks events فعال باشد
- SSL verification را بررسی کنید (برای self-signed، غیرفعال کنید)
- در Recent Events خطاها را بررسی کنید
❌ خطای Rate Limit (429)
علت: تعداد درخواستها از حد مجاز عبور کرده
راهحل
- GitLab.com: ۲,۰۰۰ req/min
- Self-hosted: از admin بخواهید limit را افزایش دهد
- Wait node بین درخواستها اضافه کنید
❌ خطای "Merge blocked: pipeline must succeed"
علت: Pipeline هنوز در حال اجرا یا failed است
راهحل
- از
merge_when_pipeline_succeeds: trueاستفاده کنید - یا ابتدا وضعیت pipeline را بررسی کنید
