۳۰ آذر ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

راهنمای خریدار CI/CD: نحوه انتخاب پلت فرم CI/CD ابری

میزبانی CI/CD در فضای ابری می تواند تعاملات بین خطوط لوله توسعه و مخازن کد منبع را سرعت بخشد و زندگی را برای توسعه دهندگان آسان تر کند. تعداد شگفت انگیزی از گزینه ها وجود دارد.

میزبانی CI/CD در فضای ابری می تواند تعاملات بین خطوط لوله توسعه و مخازن کد منبع را سرعت بخشد و زندگی را برای توسعه دهندگان آسان تر کند. تعداد شگفت انگیزی از گزینه ها وجود دارد.

اگر اهداف شما توسعه نرم‌افزار با سرعت بالا و تحویل مکرر ساخت‌های کاری به تولید است، باید حداقل بخشی از فرآیند آزمایش و تحویل را خودکار کنید. در حالت ایده‌آل، این به معنای پیاده‌سازی خطوط لوله CI/CD برای پروژه‌های خود، همراه با مجموعه‌های آزمایشی برای تشخیص خطاها قبل از دیدن نرم‌افزار توسط مشتریان، و اسکریپت‌هایی است که مراحل خطوط لوله را اجرا می‌کنند.

یکپارچه‌سازی مداوم (CI) روشی برای خودکارسازی ساخت‌ها، بسته‌بندی‌ها و آزمایش‌های نرم‌افزار به روشی ثابت است. CI به تیم کمک می کند تا اطمینان حاصل کند که تغییراتی که آنها در کنترل نسخه کد منبع بررسی می کنند، ساخت را خراب نمی کند یا اشکالاتی را در نرم افزار ایجاد نمی کند. نقطه پایانی CI معمولاً یک ورود کامل به شاخه اصلی یک مخزن نرم افزار است.

تحویل مداوم (CD) تحویل نرم افزار آزمایش شده را به محیط های زیرساخت خودکار می کند. این معمولاً به این معنی نیست که آن را مستقیماً به تولید بیندازید تا ببینید آیا مشتریان شکایت دارند یا خیر. به طور معمول، سازمان ها با فشار دادن ساختن به یک محیط توسعه شروع می کنند. پس از اینکه خود توسعه دهندگان بیلد جدید را شکست دادند و آن را منتشر کردند، معمولاً به یک محیط آزمایشی می رود، جایی که گروه وسیع تری از کاربران از آن استفاده می کنند (گاهی اوقات فقط تسترهای داخلی اختصاصی، گاهی اوقات کادر بزرگتری از کاربران برای آزمایش بتا ثبت نام می کنند یا “غذای سگ”) و از نزدیک تحت نظر قرار گرفت. در نهایت، اگر همه چیز خوب پیش برود، آزمایش‌کنندگان آن را امضا می‌کنند و نسخه جدید را به محیط تولید منتقل می‌کنند.

در هر مرحله از CD، گزینه‌هایی برای بازگشت سریع به یک ساخت قدیمی‌تر و ایجاد بلیط‌های گزارش اشکال برای توسعه‌دهندگان وجود دارد تا در ساخت جدید به آن رسیدگی کنند. هدف این نیست که تعداد زیادی از بیلدها را به سمت تولید سوق دهیم، بلکه هدف این است که به طور مداوم نرم افزار را بدون ایجاد رگرسیون بهبود و ارتقا دهیم. اصطلاح دیگر برای این شیوه‌ها “devops” است.

چرا CI/CD را در ابر میزبانی کنیم؟

میزبانی یک پلت فرم CI/CD در مرکز داده خود یک گزینه مناسب است، به خصوص برای شرکت هایی که میزبانی برنامه ها و داده های خود را در داخل فایروال الزامی می کنند. عیب انجام این کار این است که برای حفظ زیرساخت به یک تیم اختصاصی نیاز دارید و هزینه‌های سرمایه‌ای برای سرورها متحمل خواهید شد.

اگر مجاز به میزبانی در فضای ابری هستید، معمولاً گزینه بهتری است. هزینه میزبانی در فضای ابری بسیار کم است و این هزینه عملیاتی با خدمات ارائه شده جبران می شود: نصب، نگهداری زیرساخت، نگهداری امنیتی، پشتیبانی و نگهداری نرم افزار CI/CD. میزبانی نرم‌افزار CI/CD خود در فضای ابری معمولاً تعامل خطوط لوله با مخازن کد منبع شما را آسان‌تر و سریع‌تر می‌کند، البته اگر آنها نیز در فضای ابری باشند. اگر توسعه‌دهندگان و آزمایش‌کنندگان شما از نظر جغرافیایی توزیع شده‌اند، میزبانی مکرر مخازن شما در فضای ابری تجربه بهتری نسبت به میزبانی در سرورهای راه دور پشت فایروال‌ها به توسعه‌دهندگان می‌دهد.

همچنین امکان استقرار CI/CD در ترکیبی از سرورهای داخلی و ابری وجود دارد. چندین مورد از جدیدترین پیشنهادات CI/CD در کانتینرهای خوشه‌های Kubernetes اجرا می‌شوند که به همان اندازه در محل و در فضای ابری اجرا می‌شوند. در یک سناریوی استقرار ترکیبی، می‌توانید هر مؤلفه را در جایی قرار دهید که با توجه به موقعیت فیزیکی خود توسعه‌دهندگان و مکان‌های شبکه سرورهای دیگر در زیرساخت توسعه، منطقی‌تر باشد.

CI/CD باید با مخازن شما یکپارچه شود

همانطور که ممکن است هنگام خواندن «نقطه پایانی CI معمولاً یک ورود کامل به شعبه اصلی مخزن نرم‌افزار است» جمع‌آوری کنید، repos برای CI و CD ضروری است. مخازن نرم افزار علاوه بر اینکه نقطه پایانی فرآیند بررسی و آزمایش هستند، مکان ترجیحی برای ذخیره اسکریپت های CI و CD و فایل های پیکربندی شما هستند. بله، بسیاری از پلتفرم‌های CI/CD می‌توانند اسکریپت‌ها و فایل‌های دیگر را به صورت داخلی ذخیره کنند، اما معمولاً بهتر است آنها را در کنترل نسخه خارج از ابزار داشته باشید.

تقریباً همه ابزارهای CI/CD می‌توانند با Git تعامل داشته باشند. برخی نیز مستقیماً با GitHub، GitHub Enterprise، GitLab و/یا Bitbucket ادغام می شوند. تعداد کمی نیز از Subversion و/یا Mercurial پشتیبانی می‌کنند.

ابزارهای CI/CD شما باید از زبان‌ها و ابزارهای برنامه‌نویسی شما پشتیبانی کنند

هر زبان برنامه‌نویسی یا گروه زبان (زبان‌های JVM، زبان‌های کامپایل‌شده LLVM، زبان‌های دات‌نت و غیره) تمایل دارند ابزارهای ساخت و ابزارهای تست مخصوص به خود را داشته باشند. برای اینکه برای شما مفید باشد، یک ابزار CI/CD باید از تمام زبان هایی که بخشی از یک پروژه هستند پشتیبانی کند. در غیر این صورت، ممکن است لازم باشد یک یا چند افزونه برای ابزار بنویسید.

تصاویر

Docker برای استقرار نرم افزارهای توزیع شده، ماژولار و میکروسرویس اهمیت بیشتری پیدا می کنند. اگر ابزار CI/CD شما بداند چگونه با تصاویر Docker، از جمله ایجاد یک تصویر از کد منبع، باینری ها و پیش نیازها، و استقرار یک تصویر در یک محیط خاص، چگونه با تصاویر Docker مقابله کند، بسیار کمک می کند. باز هم، بدون این، ممکن است نیاز به نوشتن پلاگین یا اسکریپت برای اجرای عملکرد Docker مورد نیاز خود داشته باشید. به طور مشابه، می‌خواهید ابزار CI/CD شما از Kubernetes و سایر سیستم‌های ارکستراسیون کانتینری که در محیط‌های خود استفاده می‌کنید، پشتیبانی کند.

آیا توسعه دهندگان شما CI/CD و ابزارهایی را که در نظر می گیرید می دانند؟

اصول CI و CD ممکن است واضح به نظر برسند، اما جزئیات اینطور نیست. ابزارهای مختلف CI/CD سطوح مختلف پشتیبانی و مستندسازی دارند. چندین کتاب در مورد جنکینز وجود دارد که جای تعجب نیست زیرا قدیمی‌ترین کتاب از این دسته است. برای سایر محصولات، ممکن است مجبور باشید تالارهای گفتمان پشتیبانی و مستندات و گزینه‌های پشتیبانی پولی را به عنوان بخشی از دقت لازم در انتخاب ابزار بررسی کنید.

برای پیشینه کلی در مورد CI، کتاب ادیسون-وسلی را در نظر بگیرید ادغام مداوم< /em> توسط دووال و همکاران. به طور مشابه، برای پیشینه کلی روی سی دی، تحویل مداوم توسط Humble و فارلی. هر دو کتاب پس از انتشار برنده جوایز Jolt شدند.

شما می توانید ابزارهای مختلف CI/CD را برای پروژه های مختلف انتخاب کنید

در حالی که این راهنما در مورد انتخاب یک پلت فرم CI/CD است، لطفاً تصور نکنید که یک پلت فرم برای همه پروژه های توسعه نرم افزار شما بهینه است. اکثر فروشگاه ها از چندین زبان و محیط برنامه نویسی استفاده می کنند و هر پلتفرم CI/CD از همه آنها به خوبی پشتیبانی نمی کند.

به جای یافتن یک پلتفرم سازشکار، راحت باشید پلتفرم های CI/CD را انتخاب کنید که برای هر یک از پروژه های شما بهترین کار را دارند. اصول کلی CI و CD از یک پلتفرم به پلتفرم دیگر منتقل می شوند، حتی اگر اسکریپت هایی که برای آنها می نویسید همیشه قابل حمل نباشند. در حالی که زمان نصب اضافی برای هر پلتفرم جدید ممکن است برای تیم توسعه دهنده شما هزینه داشته باشد، به احتمال زیاد هزینه کمتری نسبت به سفارشی کردن ابزار CI/CD به طور گسترده دارد.

برنامه انتقال آتی CI/CD

در همین راستا، لطفاً تصور نکنید که یک پلتفرم CI/CD معین برای همیشه نیازهای پروژه‌های شما را برآورده می‌کند. همیشه شرط های خود را پوشش دهید، برای مثال با ذخیره اسکریپت ها در مخازن به جای ابزار CI/CD.

در صورت لزوم CI/CD بدون سرور را ترجیح دهید

به طور کلی، استقرار کانتینر ابری نسبت به استقرار نمونه سرور ابری هزینه کمتری دارد، و استقرار ابر بدون سرور نسبت به استقرار کانتینر هزینه کمتری دارد. متأسفانه، از زمان نوشتن این مقاله، تعداد کمی از پلتفرم‌های CI/CD می‌توانند بدون سرور اجرا شوند.

بدون سرور به این معنی است که ظرفی که فرآیند مورد نظر را اجرا می کند، در صورت لزوم، به طور کلی در پاسخ به یک رویداد، نمونه سازی می شود. برای CI/CD، رویداد راه‌اندازی معمولاً ورود کد به یک شعبه مخزن خاص است. پس از آن Webhook مخزن فرآیند بدون سرور را راه اندازی می کند. پس از تکمیل فرآیند، منابع آزاد می شوند.

یکی از معدود پلتفرم‌های CI/CD که می‌توانند بدون سرور اجرا شوند، CI/CD بدون سرور است. ، بخشی از Serverless Framework Pro، یک نسخه پیشرفته از منبع باز چارچوب بدون سرور. CI/CD بدون سرور برای استقرار برنامه های بدون سرور بهینه شده است و در حال حاضر فقط در AWS اجرا می شود. شما باید تعیین کنید که آیا برنامه شما به اندازه کافی برای استفاده از آن پشتیبانی می کند یا خیر.

دارایی‌های ابری فعلی شما کجا هستند؟

برای بهینه‌سازی یک پیکربندی CI/CD مبتنی بر ابر (یا هر برنامه کاربردی ابری)، اگر همه دارایی‌های شما «نزدیک» یکدیگر باشند، کمک می‌کند. “نزدیک” در این زمینه تا حدی به موقعیت جغرافیایی و تا حدی به موقعیت شبکه اشاره دارد.

به عنوان مثال، اگر پایگاه داده شما در استرالیا و برنامه شما در آمریکای شمالی است، هر بار که برنامه نیاز به خواندن یا نوشتن داده دارد، تاخیر زیادی خواهید داشت. در مقیاس کوچکتر، اگر برنامه و پایگاه داده شما در یک منطقه در دسترس بودن (AZ) باشند، تأخیر بین آنها به حداقل می رسد. اگر آنها در مناطق مختلف در یک منطقه باشند، تأخیر بیشتر خواهد بود، اما نه به اندازه ای که در مناطق مختلف هستند.

به طور مشابه، اگر پایگاه داده شما در Google Cloud Platform در ویرجینیا باشد و برنامه شما در Microsoft Azure در ویرجینیا باشد، تأخیر بیشتر از زمانی خواهد بود که هر دو در یک ارائه دهنده ابری در یک AZ باشند. همه اینها در مورد مخزن شما (که اساسا یک پایگاه داده است)، نرم افزار CI/CD، برنامه واقعی شما، و توسعه دهندگان و آزمایش کنندگان شما نیز صدق می کند. اگر همه «نزدیک» باشند، کمک می‌کند، اگرچه تأثیرات تأخیر در این موقعیت به اندازه‌ای که مثلاً برای یک بازی تعاملی بی‌درنگ وجود دارد، آشکار نیست.

اگر توسعه دهندگان بتوانند تعهدات کد را به طور قابل اعتماد و بدون زمان انتظار قابل توجه وارد مخزن اصلی کنند، معمولاً خوشحال خواهند شد. به طور مشابه، اگر کاربران و آزمایش‌کننده‌ها به اندازه کافی به برنامه نزدیک باشند تا زمان پاسخ‌دهی زیر ثانیه را دریافت کنند، آنها نیز خوشحال خواهند شد. برای نرم افزار CI/CD، کلید اتصالات قابل اعتماد به نقاط استقرار است. تا زمانی که باعث وقفه یا ریزش بسته‌ها نشود، می‌توان تاخیر کمی را تحمل کرد.

محصولات Cloud CI/CD

تعداد شگفت انگیزی از خدمات مبتنی بر ابر وجود دارد که از devops پشتیبانی می کنند. من ۱۴ فروشنده محصول CI/CD ابری را در اینجا به عنوان نمونه فهرست کرده ام. توجه داشته باشید که گنجاندن در این لیست یک توصیه نیست، و حذف یک محکوم نیست.

AWS CodePipeline

AWS CodePipeline یک سرویس تحویل مستمر کاملاً مدیریت شده است که به شما کمک می کند خطوط لوله انتشار خود را به صورت خودکار و سریع انجام دهید. به روز رسانی قابل اعتماد برنامه و زیرساخت CodePipeline مراحل ساخت، آزمایش و استقرار فرآیند انتشار شما را هر بار که یک کد تغییر می‌کند، بر اساس مدل انتشاری که تعریف می‌کنید، خودکار می‌کند. این به شما امکان می‌دهد تا ویژگی‌ها و به‌روزرسانی‌ها را سریع و قابل اعتماد ارائه دهید. شما به راحتی می توانید AWS CodePipeline را با خدمات شخص ثالث مانند GitHub یا با افزونه سفارشی خود ادغام کنید.

Azure DevOps

Azure DevOps خدمات توسعه‌دهنده‌ای را ارائه می‌دهد که به تیم‌ها در برنامه‌ریزی کار و همکاری کمک می‌کند. در مورد توسعه کد، و ساخت و استقرار برنامه های کاربردی. می‌توانید در فضای ابری با استفاده از خدمات Azure DevOps یا در محل با استفاده از سرور Azure DevOps کار کنید. Azure DevOps ویژگی های یکپارچه ای را ارائه می دهد که می توانید از طریق مرورگر وب یا مشتری IDE خود به آنها دسترسی داشته باشید. Azure Pipelines خدمات ساخت و انتشار را ارائه می دهد که از یکپارچه سازی و تحویل مداوم پشتیبانی می کند. سایر خدمات مستقل عبارتند از Azure Repos (کنترل منبع Git و Team Foundation)، Agile Boards (مجموعه ای از ابزارهای Agile)، Azure Test Plans (ابزارهایی برای آزمایش دستی/اکتشافی و آزمایش مداوم) و Azure Artifacts (به تیم ها اجازه می دهد بسته ها را از ثبت عمومی و خصوصی).

Bitbucket Cloud

Atlassian Bitbucket Cloud ترکیبی از میزبانی کد Git و کنترل منبع است. و یک راه حل داخلی CI/CD در Bitbucket Pipelines. همچنین با ابزارهای Atlassian’s Jira (ردیابی ویژگی و مشکل) و Trello (مدیریت پروژه به سبک Kanban) یکپارچه‌سازی می‌شود و به تیم‌های توسعه یک مکان مرکزی برای برنامه‌ریزی پروژه‌ها، همکاری در کد، آزمایش و استقرار می‌دهد.

بیتریس

Bitrise یک پلتفرم توسعه‌دهنده و CI/CD است که برای توسعه‌دهندگان برنامه‌های تلفن همراه طراحی شده است. از طیف گسترده ای از فناوری های تلفن همراه از جمله Swift، Objective-C، Java، Kotlin، Cordova، Ionic، React Native و Flutter پشتیبانی می کند. می‌توانید Bitrise را با GitHub، GitHub، GitLab، Bitbucket و دیگر سرویس‌های کنترل منبع Git، هم در فضای ابری و هم در محل، یکپارچه کنید. Bitrise به‌عنوان «سی‌دی/سی‌دی با ویژگی‌های کامل تلفن همراه در فضای ابری، برای هر پلتفرمی، بدون نیاز به سخت‌افزار» ارائه می‌شود. این بدان معناست که، علاوه بر بیلدهایی که روی ماشین‌های لینوکس اجرا می‌شوند، ساخت‌های macOS نیز به‌طور کامل در همه برنامه‌ها، از جمله برنامه‌های مربوط به کاربران رایگان و پروژه‌های منبع باز، گنجانده شده‌اند.

CircleCI

CircleCI می‌تواند ساخت‌ها را در چندین محیط، هم مبتنی بر ابر و هم در محل، خودکار کند، با GitLab ادغام می‌شود. ، GitHub و Bitbucket و برای اهدافی از AWS، Azure و Google Cloud گرفته تا Artifactory و npm مستقر می شود. شما می توانید از بین هزاران ادغام موجود انتخاب کنید یا خود را بسازید، ساخت ها را برای سرعت بهینه سازی کنید و کارها را به صورت موازی اجرا کنید و اطمینان حاصل کنید که پروژه های شما ساخته، مستقر و ایمن نگهداری می شوند. محیط‌های ساخت عبارتند از Docker، Linux (از جمله شبیه‌سازهای Android)، macOS، Windows، GPU و Arm.

CloudBees

CloudBees یک راه‌حل اتوماسیون تحویل نرم‌افزار برای سازمان‌های بزرگ و دارای انطباق است که به تیم‌های توسعه نرم‌افزار < a>CI/CD مبتنی بر جنکینز، قابلیت‌های ارکستراسیون، مدیریت ویژگی، و مدیریت جریان ارزش را منتشر می‌کند، در حالی که قابلیت‌های کاهش ریسک، انطباق و مدیریت را برای مدیریت فراهم می‌کند. پلتفرم CloudBees ابزارهایی را ارائه می‌کند که به سازمان‌ها اجازه می‌دهد گردش‌های کاری خودسرویس، سریع و ایمن ایجاد کنند و تحویل نرم‌افزار را به نتایج کسب‌وکار متصل کنند.

Codefresh

Codefresh یک پلت فرم تحویل نرم افزار برای Kubernetes است که توسط Argo، با استفاده از یک مدل GitOps که در آن زیرساخت به عنوان کد در یک مخزن نسخه می شود. Codefresh از Argo CD، Argo Workflows، Argo Events و Argo Rollouts استفاده می‌کند که با قابلیت‌ها و ویژگی‌های ضروری برای استقرار سازمانی گسترش یافته است. Codefresh امنیت، قابلیت نگهداری، قابلیت ردیابی و یک صفحه کنترل واحد را برای همه ذینفعان، اعم از توسعه دهندگان، اپراتورها، صاحبان محصول یا مدیران پروژه ارائه می دهد. Codefresh از GitHub، GitLab و Bitbucket پشتیبانی می کند.

عملکردهای GitHub