اتوماسیون جریان کار: فرایند گیت و دیپلوی داکر

سلام و عرض ادب خدمت جامعه برنامه نویسان ایران زمین، و تمام فارسی زبانان! ?

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

بعدش هم داکر رو با توجه به تغییرات، دوباره ران کنید و کانتینر جدیدتون رو بذارید بالا.

و خوب این کارها بعد از یه مدتی چون روتین هستن، خسته کننده می شن. و چون هر کاری رو که بیشتر از پنج بار تکرار بشه رو باید اتومیت کرد، تو پینتو یه اسکریپت نوشتیم که این کار ها رو انجام بده و نیازی نباشه شما دوباره چرخ رو اختراع کنید، ما این کار رو انجام دادیم. ?

این هم دارما چاکراست یه گوگل کنید جالبه؛ همون چرخ فلک خودمونه یه جورایی.
این هم دارما چاکراست یه گوگل کنید جالبه؛ همون چرخ فلک خودمونه یه جورایی.

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

خوب پس. بزن بریم.


مهم نیست با چه تکنولوژی ای کار می کنید، برنامه نویس کدوم ساید هستید؛ در نهایت گیت و داکر دو تا ابزاری هستن که همه جا کاربرد دارن. پروسه بیلد کردن معمولا اینه :
۱- آخرین تغییرات رو از سرور گیت هاب ( یا لب) فچ می کنیم و دعا میکنیم که کانفلیکت نده ?

۲- داکر کامپوز رو با توجه به مود پروژه (دولوپ، استیج یا پروداکشن) اجرا می کنیم?

۳- دوباره دعا می کنیم که تست ها پاس بشن ?

۴- پروسه رو از یک دوباره دنبال میکنیم.

و این می تونه دقیقا شبیه به گوش دادن به بار میلیونیم یه آهنگ قدیمی باشه که اون جا مغز ? می گه داداش دیگه بسه یه چیز جدید نداری گوش بدیم؟!

و این جاست که پینتو راننر به کار میاد! هدفم از گفتن موسیقی این بود که بعضی کارها خسته کننده هستن و تکراری و انجام دادنشون بعد یه مدت آزار دهنده می شه.

تازه فقط هم آزار نیست. به این داستان شونصد هزار تا خطای انسانی رو اضافه کن که تو اون میلیون بار، یادت رفته git pull کنی و تازه یادت نرفته ولی مجبور بودی روی برنچ production یه سری هات فیکس انجام بدی که یادت رفته اون ها رو تو دولوپ مرج کنی و پول کردی ولی ارور داشته و تغییرات نرفتن بالا ...

نگم برات. از این ها =>???. به دریا رفته می داند مصیبت های دریا را.

کلا اگه اتومیشن نداشته باشی بدون که تو دردسر افتادی.

خوب. حالا این پینتو راننر دلاور ?‍♂️ چطوری به ما کمک می کنه؟

۱- منتظر می شید لوگوی خوشگل گرافیتی طور تون بیاد بالا:

۲- یه سری چیز ها رو انتخاب می کنید: پروژه ی مورد نظرتون، برنچ مورد نظرتون، این که تگ می خواید ببرید بالا یا کامیت آخر رو، و این که می خواید داکر رو prune بکنید یا نه.

۳- بعد پینتو بیلدر میاد اول سی دی می کنه تو پروژه، بعد گیت رو هارد ریست می کنه، آخرین تغییرات رو فچ می کنه، میاد داکر کامپوز رو بر اساس برنچ می خونه، و در نهایت داکر که کارش تموم شد، پیغام موفقیت نشون می ده!

و تمام!

تازه می تونید به یه پیام رسان خارجی (چون تقریبا در ایتا و بله داکیومنتشن درستی پیدا نکردم) وصلش کنید و وقتی اجرا می شه پیام بده ( مثل تلگرام و اسلک). حتی تو اسلک می تونید یه اینترفیس تعریف کنید که از اون جا یه سری وب هوک رو ران کنه که براتون بیلدر رو اجرا کنه که ما البته تو این پست واردش نمی شیم و خودش یه پست جداست.

می شه این راننر رو به  اسلک وصل کنید و به راحتی از این جا بیلد بگیرید.
می شه این راننر رو به اسلک وصل کنید و به راحتی از این جا بیلد بگیرید.



خوب یه ذره کد هم با هم ببینیم اگه دوست دارید:

  • همون طور که می بینید پروژه بر پایه nodejs ساخته شده. برای هر پروژه ای هم مبتنی بر این که چی هست، یه استراتژی داریم که اگه فرایند های بیلد پروژه ها با هم فرق کنه از اون جا بتونیم کنترلش کنیم. مثلا بیلد front با back با android متفاوته و کار های مختلفی قبل و بعدش ممکنه احتیاج باشه علاوه بر گیت و داکر انجام بشن.
  • سعی کردم ماجولار این رو توسعه بدم. مثلا cdToProject مشخصه که کارش جابه جایی به پوشه ی پروژه است یا مثلا getArgs برای این استفاده می شه که آرگیومنت از cli بگیریم برای مدل های auto . ( این رو هم بگم که همون طور که می بینید دو مدل می شه پینتو راننر رو اجرا کرد یه مدل runScript که برای manuall هست و یه مود که با استفاده از آرکومان ها می تونید اجراش کنید)
  • فایل env برای نگه داری توکن های اسلک، و توکن های تلگرام استفاده می شه. فایل env.copy رو تغییر نام بدید و مقادیر رو جاگذاری کنید اگه می خواید استفاده کنید. دیفالت پیام رسانش slack هستش.
  • مدل LICENSE برای این پروژه ISC هستش.
  • توی پروژه یه types.ts اضافه کردم که البته در آینده می خوام پروژه رو ببرم روی typescript.

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

به کارتون بیاد.

علی ?

پ.ن: راستی یه پست هم توی مدیوم گذاشتم اگه دوست داشتید اون رو هم ببینید. البته رویکرد اون متفاوت ازینه که این جا فارسی نوشتم.