
فرض کنید Pipeline اجرا شده است.
توسعهدهنده کد را Push کرده، Build آغاز شده و همهچیز طبق برنامه پیش میرود. اما چند دقیقه بعد فرآیند متوقف میشود.
نه به خاطر باگ.
نه به خاطر کمبود منابع سرور.
فقط به این دلیل که پروژه نتوانسته یک Package موردنیاز را دانلود کند.
این اتفاق بیشتر از چیزی که فکر میکنیم رخ میدهد. بسیاری از پروژههای امروزی برای دریافت پکیجهای npm، NuGet، Docker Imageها یا حتی Repositoryهای لینوکس به اینترنت وابسته هستند. در چنین شرایطی هر اختلالی در اینترنت میتواند فرآیند توسعه، Build و Deploy را تحت تأثیر قرار دهد.
اما آیا راهی وجود دارد که این وابستگی را کاهش دهیم؟
Nexus Repository یک Repository Manager است که به شما اجازه میدهد پکیجها، Artifactها و Imageهای موردنیاز سازمان را در یک محل متمرکز نگهداری و مدیریت کنید.
به زبان ساده، به جای اینکه هر توسعهدهنده، سرور یا Pipeline مستقیماً به اینترنت متصل شود، همه درخواستها از طریق Nexus عبور میکنند.
به این ترتیب کنترل بیشتری روی منابع نرمافزاری سازمان خواهید داشت و وابستگی مستقیم به سرویسهای خارجی کاهش پیدا میکند.
اما قبل از اینکه سراغ مزایای Nexus برویم، بهتر است با نحوه نگهداری پکیجها در آن آشنا شویم.
در Nexus میتوان Repositoryها را به چند شکل مختلف ایجاد کرد. هر کدام از این Repositoryها کاربرد خاصی دارند و معمولاً در کنار یکدیگر استفاده میشوند.
سه نوع Repository که بیشتر از همه استفاده میشوند عبارتاند از:
Hosted Repository
Proxy Repository
Group Repository
Hosted Repository محلی است که فایلها و پکیجها مستقیماً داخل خود Nexus ذخیره میشوند.
برای مثال فرض کنید تیم شما یک Package اختصاصی NuGet توسعه داده است یا Docker Imageهای داخلی سازمان را تولید میکند.
در این حالت میتوانید آنها را داخل یک Hosted Repository منتشر کنید تا سایر سرویسها و توسعهدهندگان از همان مخزن استفاده کنند.
نمونه کاربردها:
پکیجهای اختصاصی NuGet
پکیجهای داخلی npm
Docker Imageهای سازمانی
فایلهای Release
Artifactهای خروجی Build
در واقع Hosted Repository نقش یک مخزن داخلی برای سازمان را ایفا میکند.
Proxy Repository یکی از مهمترین قابلیتهای Nexus است.
فرض کنید پروژه شما به یک Package از npm نیاز دارد.
بار اول که درخواست ارسال میشود، Nexus پکیج را از اینترنت دریافت میکند و در Cache خود ذخیره میکند.
از دفعات بعدی همان پکیج مستقیماً از Nexus تحویل داده میشود و دیگر نیازی به دانلود مجدد از اینترنت نیست.
مزایای این روش:
کاهش مصرف اینترنت
افزایش سرعت Build
کاهش وابستگی به سرویسهای خارجی
دسترسی به پکیجهای Cache شده در زمان اختلال اینترنت
برای مخازنی مانند npm، NuGet، Docker Hub و Repositoryهای لینوکس معمولاً از Proxy Repository استفاده میشود.
در بسیاری از سازمانها چندین Repository مختلف وجود دارد.
برای مثال:
یک Hosted Repository
چند Proxy Repository
چند مخزن اختصاصی دیگر
اگر کاربران مجبور باشند آدرس همه این Repositoryها را جداگانه تنظیم کنند، مدیریت سیستم پیچیده میشود.
Group Repository این مشکل را حل میکند.
در Group Repository چند Repository مختلف پشت یک آدرس واحد قرار میگیرند.
در نتیجه توسعهدهنده فقط یک آدرس را در npm، NuGet یا Docker تنظیم میکند و Nexus بهصورت خودکار Repository مناسب را پیدا میکند.
یکی از دلایل محبوبیت Nexus این است که محدود به یک اکوسیستم خاص نیست.
برخی از Repositoryهای قابل پشتیبانی:
npm
NuGet
Docker
Maven
PyPI
APT
Yum
Raw Repository
به همین دلیل اکثر تیمهای توسعه نرمافزار و DevOps میتوانند از آن استفاده کنند.
خیر.
بسیاری از سازمانها حتی با دسترسی کامل به اینترنت نیز از Nexus استفاده میکنند.
زیرا Nexus مزایای دیگری هم دارد:
افزایش سرعت Build و Deploy
مدیریت متمرکز Artifactها
کنترل دسترسی کاربران
نگهداری نسخههای مختلف نرمافزارها
کاهش وابستگی به سرویسهای خارجی
بهبود امنیت زنجیره تأمین نرمافزار
در واقع موضوع فقط «داشتن پکیجها در زمان قطعی اینترنت» نیست؛ بلکه داشتن یک نقطه مرکزی برای مدیریت تمام Artifactهای سازمان است.
اگر پروژه شما برای دریافت پکیجهای npm، NuGet، Docker Imageها یا Repositoryهای لینوکس به اینترنت وابسته است، Nexus میتواند بخش زیادی از این وابستگی را کاهش دهد.
با استفاده از Hosted Repository، Proxy Repository و Group Repository میتوان پکیجها را مدیریت، ذخیره و Cache کرد تا تیم توسعه و زیرساخت به منابع موردنیاز خود سریعتر و مطمئنتر دسترسی داشته باشند.
سؤال مهم این است:
اگر همین الان اینترنت قطع شود، کدام بخش از Pipeline شما از کار میافتد؟