نرم افزار gitlab

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

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

تاسیس ۲۰۱۱، تا سال ۲۰۱۳ این محصول تماما رایگان و متن باز و تحت لایسنس MIT بود. در سال ۲۰۱۳ این موضوع تغییر کرد و به دو نسخه Enterprise  و community تبدیل شد. در سال ۲۰۱۴ این شرکت مدل تجاری خودش رو به 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)

در سال ۲۰۱۵ Gitorious رو خرید و بعد از اون تا الان تونستن ۴۵٫۵ میلیون دلار به عنوان سرمایه جذب کنن و هدف نهایی اونها هم اینه که IPO بشن یا همون Going public. (سهامی عام بشن). در سال ۲۰۱۷ دیتابیس پروداکشن به صورت اتفاقی توسط DBA پاک شد و اطلاعات ۶ ساعت issue ها و merge request ها از دست رفت. هدف بلند مدت این تیم (۳ سال آینده) اینه که راه حل کامل DevOps رو ارائه بدن.

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

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

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

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

لوگوی gitlab

تکنولوژی ها

تکنولوژی هایی که در ساخت 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)، جالبه همین ۴ کاراکتر در عنوان مرج رکواست باعث میشه ظاهر صفحه عوض بشه و شما نتونید مرج رو کامل کنید.

مثال دوم: همونطور که در 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

خودشون اعتقاد دارن که تنها ابزاری که تمام  SDLC رو به صورت یکجا پیاده سازی کرده gitlab هست، و این موضوع در تصویر زیر که کامنت من زیر پس تبریک gitlab به github (خرید گیت هاب توسط مایکروسافت) قابل مشاهده است.

همونطور که در کامنت های آقای john woods میبینید ایشون اشاره ایی به ابعاد ماژولها ندارن فقط روی عنوان “تنها ابزاری که تمام  SDLC رو به صورت یکجا پیاده سازی کرده gitlab هست” تاکید دارن، که در واقع به غیر از تقریبا کیس VSTS/TFS دارن درست می گن، حرفشون درباره ابزارهای atlassian درسته و داشتن ستاپ های جدا باعث شده اتلسیان از معادله ایشون حذف بشه، درباره VSTS/TFS هم باید گفت این دو ابزار هم برای مانیتورینگ به خدمات Azure احتیاج دارن (VSTS توسط شرکت هایی مثل بوینگ در حال استفاده است و مجبوره کلان تر به موضوع نگاه کنه) و ریز اطلاعاتی که توسط Azure ارائه میشه فوق العاده است. من فکر می کنم یک حرف یک تکنیک بازاریابیه و در واقع gitlab رقیب سایر راهکارها و ابزارهای موجوده و نه بلعکس.

gitlab ابزار جالبیه با نگاه و طرز تفکری متفاوت.