Continuous Delivery
Continuous Delivery یکی از پرکتیسهای مهم توسعه نرمافزار چابک است. Continuous Delivery بدین معنی است که فرآیند تولید محصول خود را به صورتی برپا میکنیم که هر زمان که قصد داشتیم بتوانیم، از محصولمان بیلد گرفته و آن را با اطمینان به محیط عملیاتی یا محیط استیچینگ منتشر کنیم.
این یک ویژگی جذاب غیر قابل انکار است. اما برای داشتن این ویژگی جذاب:
- نرم افزار ما باید همیشه قابلیت انتشار داشته باشد.
- تیم توسعه نسبت به نگه داتشن نرم افزار با کیفیت دارای قابلیت انتشار در هر لحظه توانایی داشته باشد. همچنین این موضوع باید برای تیم توسعه به یک امر مهم و پایهای تلقی شود. به عبارتی تیم توسعه نباید صرفا به داشتن ویژگیهای جدید(خروجی و نه اوت کام) که فقط کار میکنند اولویت قایل شود.
- هر کسی بتواند بازخورد سریع و اتوماتیک شده از محصول را در محیط عملیاتی بگیرد.
لازمه داشتن Continuous Delivery توجه کردن به Continuous Integration است. Continuous Integration بدین معنی است که تیم توسعه به جهت کوتاه کردن چرخه بازخورد محصول خود تا اندازه ممکن، توسعه ویژگیهای جدید در محصول را با نوشتن تستهای اتوماتیک به پیش میبرد. مهمترین مزیت این تستها کوتاه کردن چرخه بازخورد است. از این طریق تیم توسعه میتواند با اجرای این تستهای اتوماتیک و اطمینان از محصول، هر چه سریعتر تغییرات اعمال شده در سورس محصول را در سورس کنترلر ادغام کند.
مهمترین مزیتی که این روش میتواند برای ما داشته باشد این است که میتوان مطمئن شد، هر تغییری که توسط توسعه دهندگان به مخزن سورس محصول پوش میشود، محصول را از یک وضعیت قابل اتکا به وضعیت قابل اتکای بعدی میبرد. از این طریق میتوانیم محصول را خیلی زودتر و سریعتر به محیط شبیه محیط عملیاتی پوش کنیم. مهمترین مزیتی که از این طریق میتوانیم بدست بیاوریم این است که قادر خواهیم بود، بازخورد مطمئنی از محصول خود داشته باشیم. جهت نیل به این هدف ما باید به چرخه تولید محصول خود بیشتر فکر کنیم!
نکته کلیدی این است که ذینفعان کلیدی محصول می توانند در لحظه درخواست دهند که نسخه جاری محصول به محیط عملیاتی پوش شود. در این شرایط نباید کسی از تیم توسعه محصول نسبت به این موضوع نگرانی داشته باشد.
جهت رسیدن به ویژگی مهم است که بتوانیم:
- ارتباط نزدیک و سازنده بین همه افراد ذینفع و درگیر در توسعه محصول داشته باشیم-تیم توسعه، مالک محصول، متخصصان کسبوکار، متخصصان محیط عملیاتی و شبکه و … (به فرهنگ DevOps معروف است)
- تا جای ممکن تمامی بخش های فرآیند دلیوری محصول اتوماتیک شود. عموما توسط یک چرخه توسعه.
Continuous Delivery گاهی با مفهوم Continuous Deployment اشتباه گرفته می شود. عبارت دومی به این معنی است که هر تغییری به محض ارسال به سورس کنترل بصورت کاملا اتوماتیک به محیط عملیاتی پوش میشود. در نتیجه تعداد بسیار زیادی چرخه و نسخه انتشار عملیاتی در هر روز خواهیم داشت. در حالی که Continuous Delivery فقط به این معنا است که میتوانیم هر تغییری را به محیط عملیاتی پوش کنیم. این قابلیت مهم را داریم. به منظور اینکه بتوانیم Continuous Deployment داشته باشیم باید بتوانیم که Continuous Delivery را داشته باشیم.
Continuous Integration معمولا به معنی یکپارچه سازی سریع، بیلد کردن و تست کردن کد با محیط توسعه است. Continuous Delivery که بر روی این ویژگی ها سوار شده باشد، با مرحله نهایی برای انتشار در محیط عملیاتی همراه است.
از مزیت های عمده Continuous Deployment میتوان به این موارد اشاره کرد:
- کاهش Risk انتشار: از آنجایی که شما چیزی که انتشار میکنید در حقیقت بخاطر پایبندی به Continuous Integration تغییرات کوچک و ریزی هستند، در نتیجه شما همیشه مقدار کار کمتری دارید که احتمالا دارای خطا باشد. بهمین دلیل برطرف کردن آنها نیز ساده تر است.
- پیشرفت قابل باور: خیلی ها پیشرفت را با کار کردن آیتم ها می سنجند. اگر “انجام شده” برای شما بدین معنی است که توسعه دهندهی آن گفته “کار میکند” این متر و معیار مناسبی نیست.
- بازخورد کاربر: ریسک اصلی در هر نرم افزاری این است که شما نهایت چیزی می سازید که کاربر نیاز ندارد. هرچه بازخورد سریعتر و زودتر انجام شود این فرآیند می تواند خیلی بهتر و مناسب تر انجام شود. و میتواند بازخورد بگیرید که چقدر کار شما مناسب است- چیزی که به Observed Requirements معروف است.