در این فصل با مفاهیم اولیه ی Continuous Integration and Continuous Delivery یا CI/CD آشنا می شویم. اکثر محصولات نرم افزاری درست و حسابی، مراحل مهمی را طی میکنند تا به production برسند و عرضه شوند. CI/CD شامل مراحل بین development و production است. به لطف Docker استفاده از CI/CD بسیار ساده تر شده و میتوانیم به راحتی Docker را در platform های مختلف CI/CD بکار ببریم.
در این فصل تمرکز ما روی GitHub و Jenkins و SonarQube است و از آنها برای انتشار تصاویر داکری خود استفاده میکنیم.
نکته:
به شخصه مدتهاست که از Jenkins استفاده نمیکنم و github actions (فصل 23) را ترجیح میدهم. علت استفاده از Jenkins در این فصل پیچیدگی بیشتر آن و درک عمیق تر فلوی CI/CD برای شماست و با یادگیری این فصل مباحث پایه و تئوری CI/CD را بهتر درک خواهید کرد.
مقدمه
در فصل های قبلی docker-compose و networking و storage و کانتینرها و سرویس ها را دیدید. با دانش فعلی خود میتوانید واقعا یک توپولوژی شبکه ی درست و حسابی بچینید و یک سرور دیپلویمنت درست و درمان بسازید. هدف این فصل اما تکمیل چرخه ی نرم افزار است که به عنوان یک توسعه دهنده باید با تکمیل آن آشنا باشید و بتوانید هر عمل تکراری قابل اتوماسیون را اتومیت کنید.
گفتیم که CI/CD به معنای Continuous Integration and Continuous Delivery است. گاهی CD را به معنای Continuous Deployment نیز بکار میبریم. Deployment به معنای عرضه ی برنامه ( گاها دسترسی پذیر توسط یک URL خاص) به صورت automated pipeline workflow است. Delivery نیز به معنای آماده سازی برنامه برای دیپلوی شدن است.
تمرکز ما در این فصل تنها خود مفهوم CI/CD است.
نکته:
راه های رسیدن به خدا در CI/CD بسیار زیاد است و هر تیم و هر فرد راه مورد علاقه ی خود را دارد اما مفهوم CI/CD در تمام این موارد و راه ها مشترک است پس بدانید که بعدا با توجه به تجربیات خود ممکن است رویکرد متفاوتی را نسبت به شخص من اتخاذ کنید و این مسئله کاملا نرمال است.
چرا Jenkins ؟
در این فصل شروع به ساخت یک pipeline برای CI/CD می کنیم. Jenkins را نیز به صورت یک کانتینر بالا می آوریم. Jenkins یک سرور automation است که open-source هم هست. میتوانیم با Jenkins فرایند های build و test و deploy و دیگر عملیات رایج CI/CD را با استفاده از آن انجام دهیم تا بخش هایی از فرآیند توسعه نرم افزار خود را اتومیت کنیم. میتوانیم Jenkins را به صورت برنامه ی نصب شده نیز داشته باشیم ولی طبیعتا کانتینر راحت تر است و نیاز نیست به فکر تنظیمات خاص سیستم عاملی برای آن باشیم.