متصل کردن Gitlab به Jira

مقدمه

این روز ها، Gitlab یکی از اصلی ترین ابزار هایی است که بیشتر برنامه‌نویس ها و متخصصان حوزه نرم‌افزار با آن سر و کار دارند. Gitlab در واقع مجموعه ای کامل از ابزار های توسعه محصول، از برنامه‌ریزی تا استقرار را شامل می‌شود.

  • با استفاده از Gitlab Issue Tracker می‌توان issue ها (کارهایی که برای بهبود محصول لازم است مثل پیاده‌سازی قابلیت های جدید یا رفع باگ ها) را برنامه‌ریزی و پیگیری کرد. معروف ترین رقیب Gitlab Issue Tracker نرم افزار Jira است که بسیاری از افراد فعال در حوزه مدیریت پروژه های نرم افزاری آن را ترجیح می‌دهند.
  • با استفاده از Gitlab Version Control می‌توان سورس‌کد نرم‌افزار ها را مدیریت کرد. معروف ترین رقیب Gitlab Version Control، سایت Github است که اخیراً کاربران ایرانی را تحریم کرده و به همین دلیل، شرکت ها استفاده از Gitlab Version Control را ترجیح می‌دهند.
  • با استفاده از Gitlab CI/CD می‌توان فرآیندهای Build و Test و Deploy نرم‌افزار ها را خودکار‌سازی کرد. معروف ترین رقیب Gitlab CI/CD نرم‌افزار Jenkins است که محبوب ترین ابزار در حوزه CI/CD محسوب می‌شود.

مجموعه نرم‌افزار Gitlab در واقع تمام ابزار های لازم برای توسعه نرم‌افزار در قالب متدولوژی های توسعه‌ چابک (Agile Software Development) با فرهنگ DevOps را در قالب یک اکوسیستم یکپارچه ارایه داده است. با این حال، بسیاری از تیم های توسعه نرم‌افزار ترجیح می‌دهند که تنها از بخشی از این اکوسیستم گسترده بهره برده و برای سایر بخش ها از نرم‌افزار های دیگر استفاده کنند. یکی از مرسوم ترین این ترکیب ها، استفاده از نرم‌افزار Jira به عنوان Issue Tracker به همراه Gitlab Version Control است.

به لطف انعطاف پذیری بالای Gitlab می‌توان Gitlab Version Control را به نرم‌افزار Jira متصل کرد و از مزایای هر دو به صورت یکپارچه بهره برد.
به لطف انعطاف پذیری بالای Gitlab می‌توان Gitlab Version Control را به نرم‌افزار Jira متصل کرد و از مزایای هر دو به صورت یکپارچه بهره برد.


گاهی محصولات شما در یک Git Repository واحد ذخیره نمی‌شوند. مثلا ممکن است محصول شما یک پلتفرم تاکسی اینترنتی باشد که به رانندگان و مسافران در یک اپلیکیشن واحد سرویس می‌دهد. شما در واقع از نظر بیزنس دو محصول دارید. محصول رانندگان و محصول مسافران و این دو، issue ها و نیازمندی های خود را دارند که می‌توان در دو پروژه مستقل Jira آنها را مدیریت کرد. اما سورس کد های شما در قالب پنج پروژه مستقل در Gitlab ذخیره می‌شوند. برای مثال این پنج پروژه عبارتند از: Android Application و iOS Application و Web App و Backend و Admin Dashboard.
در چنین شرایطی، Gitlab Issue Tracker به شما اجازه مدیریت Issue ها در قالب دو محصول رانندگان و مسافران را نمی‌دهد و شما را مجبور می‌کند هر Git Repository را به عنوان یک پروژه در نظر بگیرید. حال فرض کنید میخواهید یک قابلیت جدید برای مسافران اضافه کنید تا بتوانند مکان های پر تردد خود را ذخیره کنند. Issue مربوط به این قابلیت در کدام پروژه باید ردگیری شود؟!
با اتصال Gitlab به Jira میتوان دو محصول رانندگان و مسافران را در Jira ایجاد کرد و Product Owner می‌تواند بدون درگیر شدن با مسایل فنی، Issue های هر کدام را به طور مستقل از طریق Jira پیگیری کند. برنامه‌نویسان Task های مربوط به هر Issue را در داخل یکی از پنج پروژه ی Gitlab انجام می‌دهند و با Commit کردن کد ها در Git، وضعیت Issue ها در Jira به صورت خودکار به روز می‌شود.

اتصال Gitlab به Jira به برنامه‌نویسان اجازه می‌دهد که هنگام Commit کردن کد‌های مربوط به یک Issue بتوانند به کارت مربوط به آن Issue در Jira، یک Comment و یا Worklog اضافه کنند و یا با Merge شدن Branch ها به صورت خودکار وضعیت Issue مربوط به آن در Jira را به Done تغییر دهند.

این یکپارچگی برای برنامه‌نویسان و البته مدیران پروژه بسیار ارزشمند است زیرا نیاز برنامه‌نویس به مراجعه به Jira برای افزودن Comment و Worklog و تغییر وضعیت Issue ها را به حداقل می‌رساند و از طرفی باعث می‌شود که وضعیت ها و Worklog های Jira همیشه به روز باشند.

یکی از گله هایی که همیشه Product Owner ها از برنامه‌نویسان دارند این است که به جای وارد کردن Worklog ها به صورت پیوسته و در طول اسپرینت، همه آنها را یک جا در انتهای اسپرینت وارد می‌کنند که این موضوع نه تنها باعث فراموشی زمان واقعی صرف شده برای یک Issue می‌شود بلکه تحلیل زمان در طول اسپرینت را برای Product Owner ناممکن می‌سازد.
دومین گله ای که همیشه Product Owner ها از برنامه‌نویسان دارند، مربوط به آپدیت نکردن وضعیت Issue ها در نرم‌افزار Issue Tracker است.
حق با چه کسی است؟! طبیعتا هر دو! آپدیت بودن وضعیت Issue ها و Worklog ها لازمه کار Product Owner است اما قطعا برنامه‌نویسان کار های مهمتری برای انجام دارند، پس بهتر است به جای آزار خود و دیگران، تا جای ممکن این فرآیند ها را خودکار کنیم.

تنظیمات مربوط به Jira

۱. با اکانت Administrator وارد Jira شوید.

۲. از منوی تنظیمات Jira (چرخ‌دنده بالا سمت راست) گزینه User Management را انتخاب کنید.

۳. در صورت نیاز، مجددا پسورد Administrator را وارد کنید.

۴. با کلیک بر روی دکمه Create User یک کاربر به نام gitlab ساخته و پسورد آن را در جایی یادداشت کنید. این کاربر به نرم افزار Gitlab اجازه می‌دهد تا بتواند بر روی Issue های Jira تغییراتی را اعمال کند. بنابراین در مرحله بعد به این کاربر اجازه نوشتن روی همه پروژه های Jira را خواهیم داد.

۵. در سمت چپ صفحه بر روی Groups کلیک کنید. در سمت راست با وارد کردن نام gitlab-developers و فشردن دکمه Add Group یک گروه جدید با این نام ایجاد کنید.

گروه gitlab-developers به لیست گروه ها در پایین صفحه اضافه می ‌‌‌‌شود.

۶. با کلیک کردن بر روی گزینه Edit members در روبروی آن، وارد صفحه افزودن کاربر به این گروه می‌شویم تا کاربری که ساخته ایم را به آن اضافه کنیم.

۷. در بخش Add members to selected groups نام کاربری که ساخته بودید (gitlab) را وارد کرده و بر روی دکمه Add selected users کلیک کنید. در ستون دوم می‌توانید ببینید که کاربر gitlab به گروه gitlab-developers اضافه شده است.

۸. برای اینکه Gitlab بتواند روی Issue ها، Comment و ... بگذارد، لازم است که به گروه gitlab-developers دسترسی نوشتن (Write) روی همه پروژه های Jira را بدهیم. برای این کار از منوی تنظیمات Jira (چرخ‌دنده بالا سمت راست) گزینه Issues را انتخاب کنید.

۹. در سمت چپ صفحه روی گزینه Permission Schemes کلیک کرده و در سمت راست، دکمه Add Permission Scheme را بزنید.

۱۰. در صفحه بعد یک نام به Permission Scheme داده و بر روی Add کلیک کنید.

با کلیک بر روی دکمه Add به صفحه قبل بازگشته و میبینید که Permission Scheme ای که ساختید به لیست اضافه شده است.

۱۱. بر روی گزینه Permissions مقابل Permission Scheme اضافه شده کلیک کنید.

۱۲. در صفحه باز شده بر روی گزینه Edit در بخش Administer Projects کلیک کنید.


۱۳. در دیالوگ باز شده گزینه Group را از قسمت Granted to انتخاب کرده، سپس گروهی که ساخته بودید (gitlab-developers) را از منوی زیر آن انتخاب کنید و بر روی دکمه Grant کلیک کنید.

حال کاربر gitlab عضو گروه gitlab-developers است و اعضای این گروه اجازه نوشتن روی همه پروژه ها را دارند.


تنظیمات مربوط به Gitlab

۱. با اکانت Administrator وارد Gitlab شوید.

۲. از نوار منوی بالای صفحه بر روی علامت آچار (Admin Area) کلیک کنید.

۳. در سمت چپ صفحه ی باز شده بر روی Service Templates و در سمت راست صفحه بر روی سرویس Jira کلیک کنید.

۴. در صفحه باز شده، با کلیک بر روی گزینه Active سرویس Jira را فعال کنید. (توجه کنید که گزینه های Commit و Merge request نیز فعال باشند)

۵. در بخش Web URL، آدرس اینترنتی Jira (مثلا http://jira.school.ai) را وارد کنید.

۶. بخش Jira API URL را خالی بگذارید.

۶. نام کاربری و کلمه عبوری که برای Gitlab در Jira ساختید را در بخش های Username و Password وارد کنید.

۷. در بخش Transition IDs باید ID های مربوط به Transition های تعریف شده در Jira را به ترتیب وارد کرده و با کاما (,) از هم جدا کنید. در غیر اینصورت Gitlab نمی‌تواند وضعیت Issue ها در Jira را تغییر دهد. Transition ها در واقع همان وضعیت ها در Issue ها اند. (مثلا To-Do یا In Progress یا Done)

برای پیدا کردن Transition ID های Jira می‌توانید از API زیر استفاده کنید. با باز کردن آدرس زیر در مرورگر وب و بررسی پاسخ آن متوجه Transition ID ها در Jira خواهید شد.

https://jira.school.ai/rest/api/2/issue/DRIVER_232/transitions

لازم است در آدرس بالا، http://jira.school.ai را به آدرس اینترنتی Jira و DRIVER-232 را به شناسه یکی از Issue های موجود در Jira که در وضعیت Open قرار دارد تغییر دهید.

در آخر بر روی دکمه Save کلیک کنید.

حال که Gitlab به Jira متصل شده، باید لینک آن در منوی سمت چپ پروژه ها و در زیر بخش Issues قابل دسترس باشد.

۸. حال که از Jira استفاده می کنید در صورت تمایل می‌توانید Issue Tracker خود Gitlab را غیر فعال کنید. برای این کار از منوی سمت چپ پروژه وارد بخش Setting و سپس General شوید و از بخش Visibility, project features, permissions گزینه Issues را غیر فعال کنید.


تغییر وضعیت Issue ها در Jira با Commit کردن در Gitlab

به کمک مفهوم Smart Commit در Jira می‌توان بدون استفاده از دشبورد Jira و تنها با Commit کردن کد ها در Gitlab، روی Issue ها، Comment و Worklog گذاشت و یا وضعیت آنها را هنگام Merge شدن برنچ ها تغییر داد.

فرم کلی Message در Smart Commit به صورت زیر است:

<ignored text> <ISSUE_KEY> <ignored text> #<COMMAND> <optional COMMAND_ARGUMENTS>

به جای توضیحات بیشتر، مثال های زیر را در نظر بگیرید:

JRA-34 #comment develop favorite places feature.

این Smart Commit بر روی Issue با شناسه JRA-34 یک Comment ثبت می‌کند.

JRA-34 #time 1d 2h 30m develop favorite places feature.

این Smart Commit بر روی Issue با شناسه JRA-34 یک Worklog به اندازه یک روز و دو ساعت و سی دقیقه به همراه یک Comment ثبت می‌کند.

JRA-34 #comment develop favorite places feature. #time 2h 5m #resolve

این Smart Commit بر روی Issue با شناسه JRA-34 یک Comment و یک Worklog ثبت کرده و وضعیت آن را به Resolved تغییر می‌دهد.