معرفی
جنکینز (Jenkins) یک سرور متنباز برای خودکارسازی فرایندهای ساخت، آزمون، انتشار و استقرار نرمافزار است. تیمها با آن پایپلاینهای یکپارچهسازی و تحویل مستمر (Continuous Integration and Continuous Delivery یا CI/CD) میسازند تا تغییرات کد پس از ثبت در مخزن، با مراحل مشخص و تکرارپذیر بررسی و آماده انتشار شوند.
هسته جنکینز معمولاً روی زیرساخت خود سازمان اجرا میشود. کنترلر Jenkins زمانبندی و اجرای Jobها را مدیریت میکند و Agentها مراحل کار را روی ماشینهای جداگانه، کانتینرها یا کلاستر Kubernetes اجرا میکنند. این مدل برای تیمهایی مفید است که به محیط اجرا، شبکه داخلی، ابزارهای ساخت یا فرایند استقرار خود کنترل دقیق نیاز دارند.
پایپلاین را میتوان در رابط جنکینز تعریف کرد، اما روش قابل نگهداریتر، ثبت آن در فایل Jenkinsfile کنار کد پروژه است. در این فایل مراحل دریافت کد، نصب وابستگیها، اجرای تست، ساخت خروجی ساخت (artifact)، انتشار تصویر Docker یا استقرار سرویس مشخص میشود. مهندس دواپس، توسعهدهنده بکاند و اعضای تیم انتشار معمولاً با جنکینز همکاری میکنند.
جنکینز بهتنهایی راهحل کامل DevOps نیست. برای کنترل نسخه به Git، برای ساخت کانتینر به Docker، برای استقرار کلاستری به Kubernetes و برای نگهداری خروجیهای ساخت نسخهدار معمولاً به ابزارهای مکمل نیاز دارید. برای نمونه، یک پایپلاین میتواند پروژه Java را با Maven یا Gradle بسازد و آزمون کند، اسکریپت Bash را برای آمادهسازی محیط اجرا کند، سپس با Ansible پیکربندی سرورها را اعمال کند. در سناریوی زیرساخت بهعنوان کد، Jenkins میتواند پس از بازبینی تغییرات، اجرای Terraform را برای ایجاد یا تغییر منابع زیرساختی کنترل کند. اما دسترسی Terraform و تأیید تغییرات عملیاتی باید جداگانه محدود و بازبینی شوند.
نرمافزار Jenkins هزینه مجوز ندارد، اما خودمیزبانی رایگانِ عملیاتی نیست. سرور یا کلاستر اجرا، پشتیبانگیری، بهروزرسانی هسته و افزونهها، پایش، مدیریت دسترسی و رسیدگی به خرابی Agentها به زمان و نیروی عملیاتی نیاز دارد. تیمی که به شبکه داخلی، محیط ساخت سفارشی، افزونههای خاص یا کنترل دقیق بر اجرای پایپلاین نیاز دارد، معمولاً از این کنترل سود میبرد. تیم کوچکتر یا تیمی که نمیخواهد زیرساخت CI را نگهداری کند، بهتر است CI میزبانیشده را نیز بررسی کند.
انتخاب میان Jenkins و گزینههای دیگر
GitLab CI برای تیمی مناسبتر است که مخزن، بازبینی کد و مدیریت کار خود را در GitLab انجام میدهد و یکپارچگی نزدیک با همان پلتفرم میخواهد. Jenkins در اتصال به محیطهای ناهمگون و فرایندهای سفارشی انعطاف بیشتری دارد، اما بار نگهداری بیشتری نیز ایجاد میکند.
TeamCity میتواند برای تیمهایی مناسب باشد که به محصول تجاری با امکانات آمادهتر و پشتیبانی فروشنده نیاز دارند. CircleCI نیز برای تیمهایی قابل بررسی است که مدل میزبانیشده و کاهش مسئولیت اداره سرور CI را ترجیح میدهند. در این انتخاب باید هزینه، محل اجرای Jobها و محدودیتهای دسترسی به شبکه داخلی را بررسی کنید.
ویژگیهای کلیدی
در ادامه، مهمترین موارد این بخش به تفکیک معرفی شدهاند.
-
پایپلاین بهعنوان کد با Jenkinsfile
میتوانید مراحل CI/CD را در Jenkinsfile داخل مخزن ثبت کنید تا تغییرات فرایند ساخت و استقرار نیز همراه کد بازبینی، نسخهبندی و تکرار شوند.
-
اجرای توزیعشده با Agent
کنترلر میتواند Jobها را به Agentهای لینوکسی، ویندوزی، کانتینری یا Agentهای موقت در Kubernetes واگذار کند. بنابراین اجرای ساختهای سنگین روی یک سرور متمرکز نمیماند.
-
مدیریت Credentialها
رمزها، توکنها و کلیدهای دسترسی را در Credential Store نگه میدارد و میتواند احتمال افشای ناخواسته آنها را در پیکربندی و لاگها کاهش دهد، اما این کار تضمین کامل نیست. دامنه Credential را به Job یا پوشه لازم محدود کنید، دسترسیها را کمینه نگه دارید، متغیرهای راز را چاپ نکنید و لاگها را بازبینی کنید.
-
افزونهها و یکپارچهسازی گسترده
افزونهها اتصال به Git، Docker، Kubernetes، ابزارهای ساخت، سامانههای اعلان و مخزن artifact را فراهم میکنند. پیش از نصب افزونه، سازگاری و وضعیت نگهداری آن را بررسی کنید.
-
ساخت و نگهداری Artifactها
خروجیهایی مانند فایل بسته نصب، گزارش تست یا فایل build را به Job متصل و بایگانی میکند. برای نگهداری بلندمدت و نسخهدار، معمولاً مخزن artifact جداگانه انتخاب میشود.
-
تعریف مرحلههای کنترل کیفیت
میتوان بررسیهای lint، تست واحد، تست یکپارچهسازی، تحلیل کیفیت کد و تأیید دستی پیش از استقرار را به مرحلههای مشخص پایپلاین تبدیل کرد.
کاربردها
موارد زیر تصویری کلی از این بخش برای این ابزار ارائه میکنند.
-
ساخت و آزمون خودکار پس از Push
پس از ثبت تغییر در Git، جنکینز کد را دریافت میکند، وابستگیها را نصب میکند و تستها را اجرا میکند. نتیجه ساخت و گزارش خطا برای تیم قابل مشاهده میشود.
-
ساخت و انتشار تصویر Docker
پایپلاین نسخه برنامه را میسازد، تست میکند، تصویر Docker تولید میکند و پس از احراز هویت با Credential محدود، آن را در رجیستری مورد تأیید تیم منتشر میکند.
-
استقرار کنترلشده در محیطهای مختلف
یک پایپلاین میتواند استقرار در محیط آزمایشی را خودکار کند و برای محیط عملیاتی به تأیید دستی، محدودیت شاخه یا اجرای مرحلهای وابسته باشد.
-
اجرای Jobهای زمانبندیشده عملیاتی
برای کارهایی مانند تهیه گزارش، پاکسازی دادههای موقت، اجرای اسکریپت نگهداری یا بررسی دورهای سلامت سرویسها میتوان Job زمانبندیشده تعریف کرد.
-
یکپارچهسازی پروژههای قدیمی
تیمهایی که برنامههای Java، .NET یا سرویسهای داخلی با فرایند ساخت اختصاصی دارند، میتوانند فرمانهای موجود را در Jobهای جنکینز قرار دهند و بهتدریج آنها را استاندارد کنند.
ابزارهای جایگزین
پرسشهای رایج درباره جنکینز
اگر درباره این ابزار پرسشی دارید، ممکن است پاسخ آن را در میان موارد زیر پیدا کنید.
آیا برای کار با Jenkins باید برنامهنویس باشم؟
برای ساخت پایپلاینهای ساده، آشنایی با Git، خط فرمان و یک زبان اسکریپتنویسی کافی است. برای طراحی پایپلاین قابل نگهداری، عیبیابی Agentها و اتصال به زیرساخت، دانش لینوکس، شبکه و CI/CD اهمیت بیشتری پیدا میکند.
Jenkinsfile چیست؟
Jenkinsfile فایلی است که مراحل پایپلاین را تعریف میکند و معمولاً در مخزن کد نگهداری میشود. با آن میتوانید فرایند ساخت، آزمون و استقرار را مانند کد بازبینی و نسخهبندی کنید.
Agent در جنکینز چه نقشی دارد؟
Agent محیطی است که Job روی آن اجرا میشود. Agent میتواند یک ماشین مجازی، سرور فیزیکی، کانتینر یا Pod در Kubernetes باشد. جداسازی Agent از کنترلر به مقیاسپذیری و کاهش ریسک اجرای Jobها کمک میکند.
Credentialها را چگونه در Jenkins نگهداری کنیم؟
توکن، گذرواژه و کلید خصوصی را در Credential Store ثبت کنید و آنها را فقط در محدوده Job یا پوشه لازم در دسترس قرار دهید. رازها را در Jenkinsfile، متغیرهای ثبتشده در مخزن یا خروجی لاگ قرار ندهید. قابلیت پنهانسازی Jenkins را تضمین کامل ندانید و لاگها را پس از اجرا بازبینی کنید.
تفاوت Jenkins با CI داخلی GitLab چیست؟
GitLab CI بخشی از پلتفرم GitLab است و تنظیمات آن معمولاً در فایل .gitlab-ci.yml قرار میگیرد. Jenkins ابزار مستقل و خودمیزبان با افزونهها و شیوههای اتصال متنوعتر است، اما نصب، بهروزرسانی و نگهداری آن نیز بر عهده تیم شماست.