منبع اصلی نوشتار زیر در این لینک قرار دارد

لذت برنامه نویسی: جای خالی Continuous Integration

اینم یه تجربه پراکنده دیگه!

این هفته از نظر کاری بسیار شلوغ بوده من و دوستانم سعی میکردیم که یه پروژه که به زبان C++ نوشته شده بود رو تحویل بدیم. اولا که بسیار تجربه لذت بخشی بود. هم چیزهای جدید راه گرفتیم هم اینکه بالاخره کاری انجام دادیم. اما یه چیزایی توی این هفت کلی اذیت کرد.

  • یکیش این بود که با توجه به اینکه توسعه دهنده‌ها توی محیط‌های متفاوتی برنامه می‌نوشتن، اینکه کدشون واقعا روی سیستم عملیاتی کار کنه همیشه سوال بود و زمان قابل توجهی حدودا ۱۰ درصد زمان توسعه برای تست این موضوع به کار میرفت. سیستم عملیاتی قرار بود یه Ubuntu server 14.04 باشه و سیستم من یک fedora 20 و سیستم دوستانم هم فکر کنم ubuntu desktop و یا debian باشه.
  • دومیش این بود که خب حالا کد آماده شده و موقع تحویل رسیده، روند استاندارد deploy چیه؟ چطور اولا کد پکیج بشه؟ طبق چه روند کد روی سیستم نهایی کار کنه؟
  • سومیش هم این بود که مستندات پروژه چطور تحویل داده بشه. منظور از مستندات الزاما مستندات توی کد که معمولا توسط doxygen درون کد گذاشته میشه نیست. مثلا مستند مربوط به نحوه deploy کردن یا آماده کردن مستند مربوط به پایگاه داده. اینها مستندات عملیاتی هستن نه مستندات زمان توسعه.

خب خیلی خلاصه بخوام بگم من به نظرم حضور یه سیستم Continuous Integration میتونه برخی از این مشکلات رو حل کنه. این سیستم‌ها معمولا اینجوری هستن که کدهای شما رو که فرض میشه توی یک repository هستن دانلود میکنن و اونها رو کامپایل کرده و روی باینری تست‌های توسعه داده شده رو اجرا میکنن. تهش اگه موفقیت آمیز بود میتونن یه کد رو منتشر یا deploy کنن و در صورت عدم موفقیت خبررسانی کنن. خب حالا این سیستم چه مشکلاتی رو حل میکنه

  • کد رو توی محیط شبیه محیط عملیاتی کامپایل و تست میکنن که به نظر من سربار ۱۰ درصد  توسعه در محیط‌های مختلف رو میتونن به ۴ یا ۵ درصد کاهش بدن
  • احتمالا میتونه روند استاندارد deploy تعریف کنه. من الان خیلی مطمئن نیستم که این رو میشه تعریف کرد یا نه. اما با ابزاری شبه ansible یا chef میشه این روند رو بصورت استاندارد تعریف کرد
  • مشکل پکیج کردن رو بصورت کامل حل میکنه. چون من دیدم پروژه‌های زیادی الان دارن از این ابزارها واسه release نهایی استفاده میکنن.
  • این سیستم میتونی توی روندی که برای package کردن استفاده میکنه مستندات ثانویه روهم از فرمتی مثلا markdown به فرمت مستندات نهایی تبدیل کنه.

به هر حال من جای خالی نبود این سیستم رو برای پروژه نه چندان بزرگی که داشتم انجام میدادم حس کردم اما من تا به حال جایی رو ندیدم که از این دست سیستم‌ها استفاده کنن. امیدوارم روزی برسه که این سیستم‌ها همه گیر تر شن و ما منظم تر بشیم.

همین

پ.ن. البته میشه یه بخش از این مشکلات رو هم با استفاده از docker حل کرد اما من در این پروژه به دلایل زیادی نمی‌خوام و نمی‌تونم از docker استفاده کنم.



برچسب ها : , , ,