استارت آپ Gitlab کم کم داره به رقیبی برای سایر محصولات در زمینه Software Development Lifecycle  تبدیل میشه. این شرکت به دو صورت software as a service در سایت Gitlab.com و نسخه قابل نصب روی سرورهای مشتری خدمات خودش رو ارائه میده.

تاریخچه شرکت Gitlab به صورت خلاصه به شرح زیره:

تاسیس 2011، تا سال 2013 این محصول تماما رایگان و متن باز و تحت لایسنس MIT بود. در سال 2013 این موضوع تغییر کرد و به دو نسخه Enterprise  و community تبدیل شد. در سال 2014 این شرکت مدل تجاری خودش رو به Open-Core تغییر داد.

"the open-core model primarily involves offering a "core" or feature-limited version of a software product as free and open-source software, while offering "commercial" versions or add-ons as proprietary software." (by Wikipedia)

در سال 2015 Gitorious رو خرید و بعد از اون تا الان تونستن 45.5 میلیون دلار به عنوان سرمایه جذب کنن و هدف نهایی اونها هم اینه که IPO بشن یا همون Going public. (سهامی عام بشن). در سال 2017 دیتابیس پروداکشن به صورت اتفاقی توسط DBA پاک شد و اطلاعات 6 ساعت issue ها و merge request ها از دست رفت. هدف بلند مدت این تیم (3 سال آینده) اینه که راه حل کامل DevOps رو ارائه بدن.

صادقانه بگم بعضی از امکاناتش یکم ابتدایی به نظر میاد ولی بعضی دیگه از امکاناتش واقعا در محصولات رقبا وجود نداره، خصوصا اینکه مستقیما از تکنولوژی های اوپن سورس استفاده می کنه. یک مثال میزنم، مایکروسافت VSTS رو به شکل متفاوتی روی سرورهای خودش نگهداری می کنه ولی وقتی TFS رو نصب می کنید اون امکانات خاص که در azure وجود دارن برای مانیتورینگ سرورهاتون دیگه در دسترس شما نیستن، کما اینکه شما خودتون باید زحمت تنظیم مانیتورینگ رو بکشید، نکته جالب Gitlab اینه که مانیتورینگ وضعیت سرورهای on-premise گیت لب شما و سرورهای تست و production شما  به صورت integrate شده در git lab وجود داره.

Gitlab ارتباطی با Github نداره و این دو محصول متعلق به شرکت های متفاوتی هستن(یادم میاد دوستی قبلا گفت گیت لب نسخه On Promise گیت هابه که درست نیست)

تیم فنی این شرکت در یوتیوب فعال هستن و بیشتر جلسات فنی اونها مثل جلسه retrospective آخر اسپرینت در یوتیوب برای همه قابل مشاهده است. در سایر موارد هم این شرکت بسیار شفاف عمل می کنه، گرچه از نظر بازاریابی بعضا شیطونی هایی در مقایسه خودشون با اطلسیان و مایکروسافت انجام میدن که در مقالاتی به تفاوت های راهکارهای ارائه شده توسط این شرکت خواهم پرداخت.

در نگاه اول ممکنه فکر کنید لوگوی این شرکت نشون دهنده یک روباهه، درسته؟ ولی این لوگو بر اساس جانور دیگه ایی طراحی شده، و اون جانور tanuki هست.(Japanese raccoon dog)

تکنولوژی ها

تکنولوژی هایی که در ساخت Gitlab به کار برده شدند شامل Ruby, Golang, mysql & postgresql, haproxy, prometheus, Vue.js, kubernetes و تقریبا ساختار مایکرو سرویس دارند. از نظر زیرساخت هم از خدمات Azure مایکروسافت استفاده می کنن ولی ظاهرا قراره تا چند ماه دیگه تمام زیرساخت خودشون رو به Google Cloud منتقل کنن(مدیر عامل گیت لب تاکید داشت که این تصمیم قبل از خرید github توسط مایکروسافت گرفته شده و علت این موضوع هم این بوده که kubernetes توسط گوگل توسعه داده شده و تجربه تیم گوگل در کار با این ابزار بیشتره  )

راهکارهای این محصول شامل تمام ابعاد ALM و SDLC و DevOps و Software Development Process میشه.(تا یک سال و اندی پیش فقط بخش Version Control رو داشتن و بعد از استخدام نیروهای متخصص جدیدی مثل آقای John Woods این رویه تغییر کرد)

همونطور که در تصویر بالا مشاهده می کنید گیت لب شامل دپلوی و حتی Analyze هم میشه. گرچه خب ابعاد بعضی بخش ها مثل Plan در حد assembla است نه jira یا بخش work متعلق به TFS/VSTS و مدل کارکردن با راهکارهای gitlab خیلی متفاوت تر از بقیه ابزارهای موجود در بازاره، مثل این میمونه که یکسری متخصص متعلق به یک تیم کوچیک و چابک نشسته باشن و برای اینکه کار خودشون راه بیفته یکسری ابزار تولید کردن و اتفاقا این ابزار رو به بقیه هم میفروشن.

با چندتا مثال این موضوع بهتر مشخص میشه.

مثال اول: برای اینکه به gitlab بفهمونید merge request شما( همون pull request  موجود در github و VSTS/TFS) به هنوز آماده مرج نهایی نیست و هنوز کارهایی مونده تا به نتیجه برسه می تونید عنوان merge request رو با WIP: شروع کنید (Work In Progress)، جالبه همین 4 کاراکتر در عنوان مرج رکواست باعث میشه ظاهر صفحه عوض بشه و شما نتونید مرج رو کامل کنید.

مثال دوم: همونطور که در git فایل .gitignore وجود داره، Gitlab هم فایل .gitlab-ci.yml رو به پروژه شما اضافه می کنه و فرآیند CI شما از طریق دستورات موجود در این فایل مشخص خواهد شد.

مثال سوم: مدل Issue tracking موجود در gitlab به شکل زیادی وابسطه به communication بین افراد تیمه، در مدل Scrum معمول بر اینه که PBI مشخص میشه و بعد task ها مشخص میشن و به افراد مرتبط اختصاص داده میشن و ...، ولی در gitlab کار یا issue مورد نظر در مراحل مختلف انجام تگ های متفاوتی میگیره و به افراد متفاوتی Assign میشه تا به نتیجه برسه مثل ماشینی که در خط تولید کارخونه جلو میره و در هر بخش یک متخصص روی ماشین کار می کنه. اصلا اون ساختار جیرا یا VSTS/TFS در gitlab وجود نداره.

البته اینکه این محصول به این شکل طراحی شده نشانه ضعفش نیست بلکه نشانه اینه که بخش متفاوتی از بازار رو هدف گرفته، یک سازمان بزرگ نمیتونه از این ابزار در بخش version control  و plan استفاده کنه(نسخه Gold گیت لب در سازمانی که agile باشه بدون مشکل کار می کنه) ولی یک استارت آپ کوچیک که میخواد سریع باشه و هزینه ایی هم پرداخت نکنه(باید اسناد گیت لب رو بخونید تا بتونید با این ابزار درست کار کنید وگرنه یکم محدود با امکانات کم و گیج کننده به نظر میاد) این ابزار براش جذاب خواهد بود. مثلا دوستان متخصصی که ایرانی نبودن اومدن و assembla رو با خودشون به دیجی کالا آوردن، assembla خوبه ولی نه در ابعاد دیجی کالا و نتیجه اینکه کسی از این ابزار راضی نبود.

یکی از موضوعات مهم درباره گیت لب موضوع هزینه اونه، همونطور که گفتم دو نسخه وجود داره، یکی ce یا همون community edition و دیگری ee یا enterprise edition.

نسخه ce در بخش های مختلف با محدودیت هایی مواجهه، اوجش از نظر من در بخش issue tracking هست، رسما استفاده ار بخش issues در نسخه ce کاری نشدنیه، چرا؟ چون وزن issue رو نمیتونید مشخص کنید، چون burn down chart ندارید، چون تنها یک Board خواهید داشت، چون ارتباط بین issue ها رو نمیتونید تعریف کنید و موارد دیگه.

پس میبینیم چیزی که به عنوان نسخه رایگان یا ce ارائه میشه در بعضی بخش ها برای کار تیمی و یا شرکتی غیر قابل استفاده است(قابل توجه دوستانی که روی رایگان بودن gitlab تاکید دارن).

ریز نسخه ها و امکانات اونها به شرح زیره:

gitlab در چهار نسخه Free, Bronze, Silver, Gold وجود داره. لیست زیر مواردی هستند که در نسخه Free ارائه نشدن. برای مشاهده لیست این موارد و اینکه هرکدام حداقل در چه نسخه ایی ارائه شدن و جزئیات این feature ها به بخش feature-comparison سایت gitlab مراجعه کنید.

Git LFS 2.0 support
Configurable Issue Boards
Issue Board Focus Mode
Multiple Issue Boards
Next business day support
Multiple approvals in code review
Related issues
Issue Weights
Burndown Charts for Project Milestones
Multiple assignees for issues
Group webhooks
Push rules
Block secret file push
Squash and merge
Remote repository pull mirroring
Display merge request status for builds on Jenkins CI
Lock project membership to group
Export issues as CSV
Merge request approvals
Code Quality
Restrict push and merge access to certain users
Include external files in CI/CD pipeline definition
Contribution Analytics
Custom Additional Text in Emails
Burndown Charts for Group Milestones
Reject unsigned commits
Verified Committer
Multi-project pipeline graphs
Environment-specific secret variables
Support for multiple Kubernetes clusters
Service Desk
File Locking
Deploy Boards
Incremental rollout deployments
Canary Deployments
JIRA development panel
Browser Performance Testing
CI/CD for external repo
CI/CD for GitHub
Epics
Roadmaps
Static Application Security Testing
Dependency Scanning
Container Scanning
Dynamic Application Security Testing
Kubernetes Cluster Monitoring
ChatOps
Coming soon: Portfolio Management
Coming soon: License management
Coming soon: Free guest users