CI/CD - قسمت 1 - چالشها

امروزه سازمان ها و ارگان های مختلف، به دلیل نیاز به نرم افزارهای متنوع، تیم های فنی و توسعه نرم افزاری را در درون خود تشکیل داده اند. درخواست تولید، توسعه اعمال تغییرات گوناگون در نرم افزارهای این گونه سازمانها بسیار زیاد می باشد. یک سازمان ممکن است تعداد زیادی توسعه دهنده و برنامه نویس نرم افزار در واحد فناوری اطلاعات خود داشته باشد که هر کدام از این افراد، با توجه به نیاز سازمان و تشخیص مدیران مافوق، بصورت تیم های جداگانه و به همراه مهارت های مختلف روی یک یا چند پروژه نرم افزاری مورد نیاز سازمان مشغول به کار شوند. بعد از گذشت مدتی، هر کدام از تیم های نرم افزاری سازمان، محصولی را تولید و منتشر می کنند و کاربران مختلف اعم از کاربران درون سازمانی یا برون سازمانی شروع به استفاده از نرم افزارهای تولید شده می کنند. رفته رفته بعد از افزایش نیاز کاربران به ویژگی های جدید و همچنین کشف خطاها و نیاز به تغییرات به گروه های توسعه نرم افزاری ابلاغ می شود و تیم های نرم افزاری مجبور به اختصاص بخشی از زمان و انرژی خود برای به انجام رساندن رفع خطاها، افزودن ویژگیهای جدید و انتشار مجدد نرم افزار می شوند. با توجه به این که وظیفه و هدف اصلی تیم توسعه نرم افزار، تولید و توسعه و پشتیبانی نرم افزار می باشد، انجام کارهای موازی با این هدف مانند انتشار، تست و یکپارچه سازی بخش های نرم افزار انرژی، زمان و هزینه بسیار زیادی را به تیم های توسعه نرم افزاری وارد می کند.در کنار موارد ذکر شده، فرایندهایی که بصورت جزئی تر جدا از مرحله تولید و توسعه نرم افزار هستند،باعث کاهش بهره وری و هدر رفتن تمرکز نیروهای توسعه نرم افزاری بر روی فرایند های روتینی چون تست، یکپارچه سازی و انتشار نرم افزار می شود. در سالهای اخیر تیم های توسعه نرم افزاری در سرتارسر جهان به روشهایی دست یافته اند که امکان انجام خودکار فعالیتهای پیچیده مربوط به انتشار نرم افزار را به توسعه دهنگان می دهد. به مجموعه فعالیتهای موثری که باعث صرف جویی در زمان و هزینه در فرایندهای یکپارچه سازی کد، تست و انتشار نرم افزار می شود CI/CD می گویند که بعد تر مفصلا تشریح خواهد شد.Continuous Integration / Continuous Deliveryچالشهای پیش روتعداد نیرو های درگیر در یک پروژه در تیم های نرم افزاری مختلف، از یک نفر تا چند ده نفر متغیر می باشد، اگر یکپارچه سازی و ادغام تغییرات مربوط به کدهای یک گروه نرم افزاری به مدت چند روز یا چند هفته به تاخیر بیافتد، منجر به conflict(تداخل کدهای توسعه دهندگان مختلف) زیادی خواهد شد. در چنین شرایطی رفع خطا بسیار دشوار خواهد شد و نیاز به صرف زمان و هزینه های اضافی می شود که سازمان، مدیران و توسعه دهندگان را درگیر می کند.انتشار نرم افزار در تیم های نرم افزاری و فناوری اطلاعات عموما یک مسئله دشوار و تکراری به همراه خطا( به جهت فراموشی انجام یک یا چند مرحله از فرایند یا اجرای اسکریپت یا ...) می باشد، فرایند دستی و غیر خودکار انتشار و تست نرم افزار باعث انتشار نرم افزاری غیر قابل اتکا و همچنین تاخیر در زمان تحویل می شود.انجام دستی فرایند انتشار نرم افزار بصورت ناخواسته منجر به بوجود آمدن تیمی در سازمان می شود که اکثر وظایف آن حول پیرامون تست و انتشار نرم افزار می چرخد، حال آنکه با اتوماتیک کردن این فرایند نیاز به تیمی جداگانه برای این کار نخواهد بود.(در بعضی از سازمانها ممکن است این تیم بصورت رسمی وجود نداشته باشد اما در اکثر موارد، افرادی در سازمان هستند که اکثر زمانشان صرف نامه نگاری، تایید و انتشار نسخه های نرم افزاری می شود).عدم دسترسی به نرم افزار(توقف اجرای نرم افزار) در فرایند انتشار نسخه جدید، یکی از چالشهایی است که نه تنها تیم توسعه بلکه کاربران نرم افزار را به دلیل اینکه قادر به استفاده از نرم افزار در بازه زمانی خاصی نیستند درگیر خود می کند.تغییر موارد مربوط به پایگاه داده بعد از انتشار یک نسخه از نرم افزار و همچنین برگرداندن تغییرات در صورت وجود خطا یکی دیگر از چالشهایی می باشد که تیم های توسعه گاها با آن مواجهه می شوند. وجود چنین مشکلی با توجه به دستی بودن فرایند انتشار معمولا دور از انتظار نیست و برگردان تغییرات مربوط به نرم افزار، سرویس ها و پایگاه های داده به حالت قبل از شکست، یک معضل برای تیم توسعه می باشد که ممکن است با اعمال یک تغییر اشتباهی منجر به از دست دادن بخش وسیعی از اطلاعات موجود در پایگاه داده و یا ... شود که گاها هزینه های گزاف و جبران ناپذیری را برای سازمان به همراه دارد.بنابراین بصورت کلی سازمان با این مشکلات مواجهه است :توقف نرم افزار یا سرویس جهت انتشار نسخه جدیدمعطلی کاربران در صورت وجود مشکل در فرایند انتشار نرم افزاراحتمال به درستی انجام نشدن انتشار نسخه جدید و در نهایت وجود ناهماهنگی و باگ در نسخه مورد استفاده کاربرانتحویل کندتر ویژگی ها و تغییرات کاربران به جهت صرف زمان تیم توسعه بر روی مسائلی مربوط به تست و انتشارتخصیص زمان و افرادی درون تیم جهت انتشار نسخه های جدیداجرای اسکریپت ها اشتباه بر روی بانکهای اطلاعاتی به دلیل خطای انسانیفراموشی اعمال بعضی از موارد مربوط به پیکربندی جهت انتشار نسخه جدیدبه هم ریختن بعضی از وظایف زمانبندی شده در نرم افزارفرایندها، ابزارها و روشهای مورد استفادهبرای اعمال فرایندهای یکپارچه ­سازی کد، تست خودکار و انتشار خودکار نرم افزارها، از مفاهیم اصلی حوزه DevOps که اختصارا به آن CI/CD گفته می شود استفاده شده است. CI/CD مجموعه ای از مفاهیم، فرایندها و فعالیتهایی هستند که به واسطه آن، تیم های توسعه نرم افزاری سرعت، دقت و اطمینان بیشتری در توسعه و انتشار نرم افزار در سازمانها را خواهند داشت. هر کدام از این مفاهیم CI و CD بصورت جداگانه در قسمت بعد تشریح خواهد شد.