در قسمت قبل با تعاریف اصلی CI/CD و همچنین مزایای آنها آشنا شدیم، در این قسمت با مفاهیم مرتبط با CI/CD که در حین کار با آن برخورد می کنیم آشنا می شویم.
داکر و داکرایز کردن سرویس ها
ابتدا در این پست تعریف ساده ای از داکر را با هم می خوانیم :
با استفاده از داکر به خوبی میتوان مواردی که برای یک پروژه نیاز است را در کنار هم جمعآوری کرد و به صورت کامل آنها را در یک پکیج قرار داد. یعنی به اختصار هر آن چیزی که یک نرمافزار نیاز خواهد داشت اعم از پکیجهای وابسته (Dependency Package) و کتابخانهها (library) مورد نیاز در یک کانتینر آماده خواهد شد و همواره همراه نرمافزار در هر محیط که نیاز به راهاندازی دارد منتقل خواهد شد.
همانطور که مطالعه کردید، بطور کلی داکر یک تکنولوژی می باشد که یکی از مزایای آن امکان یکپارچه سازی وابستگی های یک سرویس یا نرم افزار است. برای درک عمیق تر داکر این پست را مطالعه کنید.
با توجه به وضعیت های مختلفی که در مراحل تولید و توسعه نرم افزارهای یک سازمان وجود دارد، ممکن است سازمان از تکنولوژی داکر در مراحل توسعه نرم افزار خود استفاده نکند، با در نظر گرفتن اینکه فرایند داکرایز کردن نرم افزارها برای انتشار و نگهداری نسخه های نرم افزاری بسیار با ارزش و سودمند می باشد، با داکرایز کردن نرم افزارهای و سرویس های سازمان، علاوه بر استفاده از فوایدی که داکرایز کردن به خودی خود دارد (از جمله سرعت لود بالاتر نسبت به ماشین مجازی و سیستم عامل ها، امکان تعیین میزان دلخواه سی پی یو و رم برای نرم افزار، قابل حمل بودن image ها، ...) از مزایای آن در انتشار نسخه های جدید نرم افزارها که یکی از اصلی ترین آن پیکربندی آسان تر و یکپارچه بودن با سیستم های رایج CI/CD است استفاده شود.
تست اتومات
بعد از انتشار یک نسخه نرم افزاری بصورت دستی، در اکثر مواقع توسعه دهندگان نرم افزار مجبور به تست بخش به بخش قسمت های جدید و قسمت هایی که تغییرات در آن اعمال شده است می باشند تا از صحت عملکرد موارد تغییر داده شده مطلع شوند. با توجه به هزینه بر بودن تست دستی و همچنین امکان وجود خطا در فرایند تست دستی، می توان به تدریج و بصورت مرحله به مرحله به هرکدام از نرم افزارها و سرویس های موجود در سازمان، تست هایی از قبیل تست واحد، تست یکپارچه سازی هر چند بصورت ابتدایی اضافه شود تا در کنار انتشار خودکار نسخه های جدید نرم افزار، عملکرد بخش های مختلف نرم افزار یک بار بصورت کامل تست شود تا نسخه جدید با اطمینان خاطر بیشتری در محیط عملیاتی قرار گیرد. با افزودن تست های ذکر شده مزیتهایی که برای سازمان حاصل می شود شامل اطمینان توسعه دهندگان نرم افزار و مدیران پروژه از صحت کارکرد موارد تغییر داده شده در نسخه منتشر شده و همچنین کارکرد درست نرم افزار برای کاربران(درون سازمانی یا برون سازمانی) می باشد.
از آنجا که وجود تست اتومات بعنوان یک مزیت برای CI/CD مطرح می شود، همانطور که ذکر شد توصیه می شود شروع اتوماسیون کردن تست ها بصورت ابتدایی و مرحله به مرحله به نرم افزارها و سرویس های موجود در سازمان اضافه شود. از جمله فوایدی که برای تست اتومات می توان برشمرد به شرح زیر می باشد :
Rollback کردن نسخه های منتشر شده
بعد از انتشار یک نسخه نرم افزار با استفاده از CI/CD ، به دلایل مختلف ممکن است کارکرد نرم افزار با مشکل مواجهه شود و تیم توسعه نیاز داشته باشد تا وضعیت نرم افزار را به حالت قبل از انتشار بازگرداند. برای انجام این کار چند استراتژی وجود دارد که در زیر به آن اشاره شده است :
مانیتورینگ عملیات های CI/CD
از آنجا که هدف اصلی CI/CD خودکار سازی و سرعت بخشی هر چه بیشتر به فرایند توسعه و انتشار نسخه های نرم افزاری می باشد، معمولا فرایندهای درگیر در توسعه و انتشار در صورت پیکربندی مناسب کمتر با خطا یا شکست مواجهه می شوند، اما با توجه به اهمیت نرم افزارهای موجود در سازمان ها، نیاز است با استفاده از ابزارهای موجود در طی مراحل تست، بیلد خودکار، انتشار در محیط های مختلف تستی و عملیاتی مانیتورینگ و پایش توسط تیم توسعه صورت بگیرد تا در صورت وجود شکست در یک مرحله، تیم توسعه با دریافت یک نوتیفیکیشن( که ممکن است ازطریق یکنرم افزار نصب شده در تلفن همراه توسعه دهندگان و یا ایمیل و اس ام اس دریافت شود) از بروز خطا مطلع شود و قبل از اینکه کاربران وجود خطا را حس کنند اقدام به رفع مشکل و اصلاح فرایندهانمایند. با استفاده از مانیتورینگ مراحل انتشار نرم افزار، مدیران پروژه های نرم افزاری و توسعه دهندگان از تمامی مراحل در فرایند نسخه گذاری نرم افزار مطلع می شوند و می توانند با راهکارهایی اقدام به بهتر شدن مراحل انتشار نرم افزار نمایند.
** نرم افزارهای متفاوتی در حوزه اعلام رویدادهای جدید(نوتیفیکیشن و پیام رسانی) وجود دارد که از معروف ترین آن ها سرویس Slack می باشد که علی رغم به همراه داشتن امکانات متنوع و یکپارچه سازی بالا با دیگر نرم افزارها، طی سالهای گذشته استفاده از آن با مشکلات و چالشهای مختلفی از جمله کندی،تحریم(تا زمان انتشار این پست) و هزینه بالای استفاده از آن در نسخه های تجاری در داخل ایران وجود داشته که استفاده از آن را پر هزینه کرده است.
در قسمت بعد بصورت عملی و با استفاده از Microsoft Azure Devops اقدام به اعمال CI/CD بر روی یک نرم افزار خواهیم کرد.