برنامه نویسی

خط لوله CI/CD با استفاده از جنکینز و داکر

Summarize this content to 400 words in Persian Lang
امروز ما یک خط لوله CI/CD در Jenkins ایجاد خواهیم کرد که کد را از github واکشی می کند و یک تصویر از Dockerfile ایجاد می کند و برنامه ما را در یک ظرف داکر اجرا می کند و پس از زمان برنامه ریزی شده به طور خودکار خاتمه می یابد.

1. ایجاد نمونه های EC2

من از AWS EC2 برای راه‌اندازی یک نمونه ubuntu استفاده کرده‌ام که تحت لایه رایگان قرار دارد، می‌توانید آن را روی دستگاه محلی خود امتحان کنید یا از یک VM از هر ارائه‌دهنده ابر عمومی استفاده کنید.

حالا به نمونه وصل شوید

2. راه اندازی Jenkins & Docker

ما باید مدیر بسته نصب خود را به روز کنیم

$ sudo apt update

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

جنکینز برای اجرا به جاوا نیاز دارد، بنابراین ابتدا به نصب جاوا ادامه می دهیم

$ sudo apt install openjdk-11-jre

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بررسی کنید که آیا جاوا به درستی نصب شده است یا خیر

اکنون جنکینز را با استفاده از دستور curl دانلود می کنیم

$ curl -fsSL https://pkg.jenkins.io/debian/jenkins.io.key | sudo tee \ /usr/share/keyrings/jenkins-keyring.asc > /dev/null

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ما آن را به مدیر بسته خود اضافه می کنیم

$ echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \ https://pkg.jenkins.io/debian binary/ | sudo tee \ /etc/apt/sources.list.d/jenkins.list > /dev/null

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اجازه دهید یک بار مدیر بسته خود را به روز کنیم

$ sudo apt-get update

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

حالا jenkins را نصب کنید

$ sudo apt-get install jenkins

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

قبل از اینکه بتوانیم از جنکینز استفاده کنیم، ابتدا باید آن را فعال کنیم

$ sudo systemctl enable jenkins

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سرور جنکینز را راه اندازی کنید

$ sudo systemctl start jenkins

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

وضعیت جنکینز را بررسی کنید

$ sudo systemctl status jenkins

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

شما چنین پاسخی دریافت خواهید کرد

جنکینز به طور پیش فرض روی پورت 8080 اجرا می شود، برای دسترسی به آن به localhost:8080 بروید.از آنجایی که من یک VM در فضای ابری ارائه کرده ام، باید پورت 8080 را باز کنم تا امکان اتصال فراهم شودمن به گروه های امنیتی شبکه رفتم و شماره پورتی را که می خواهم به آن دسترسی داشته باشم اضافه کردم.

از آنجایی که نمی‌خواهم همه بتوانند به جنکینز دسترسی داشته باشند، پورت را فقط به یک میزبان محدود کرده‌ام

حالا وقتی وارد پورت 8080 می شوم با یک صفحه ورود به سیستم جنکینز مواجه می شوم.

اکنون برای ورود نیاز به اعتبار داریمنام کاربری admin استرمز عبور را می توان از طریق دستور زیر پیدا کرد

$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پس از ورود به jenkins رمز عبور خود را تغییر دهید و jenkins از شما می خواهد که افزونه ها را نصب کند و اجازه می دهد آنها را نصب کند

اکنون با صفحه ای مانند این کلیک بر روی آیتم جدید استقبال می کنیم

از آنجایی که قصد دارم آن را ساده نگه دارم، روی پروژه آزاد کلیک کنید

پس از افزودن نام برای برنامه خود، مخزن github خود را که می خواهید متصل کنید، اضافه کنید

پس از افزودن یک مخزن، باید به جنکینز بگوییم چگونه به مخزن دسترسی داشته باشد و مجوز لازم را به آن بدهیم تا بتواند کد را از مخزن دریافت کند.برای رسیدن به این هدف، من از کلیدهای SSH به سادگی یک کلید ssh تولید کرده و کلید عمومی را در github اضافه کرده ام

اکنون باید کلید خصوصی را در jenkins اضافه کنیم تا بتواند با github احراز هویت شود و کد را از مخزن ما استخراج کند.روی افزودن اعتبار زیر کلیک کنید و جنکینز را انتخاب کنید

یک نام به اعتبار خود بدهید و کلید خصوصی را اضافه کنید

قبل از اینکه به مرحله بعد برویم، افزونه ای به نام Github Integration را که در Jenkins موجود است نصب کنید، می توانید این کار را با رفتن به مدیریت jenkins و انتخاب افزونه ها و جستجوی افزونه انجام دهید.

اکنون مراحل ساخت اپلیکیشن را اضافه کرده و آن را اجرا کنید. از آنجایی که برنامه ما روی node.js اجرا می‌شود، از یک داکر کانتینر استفاده خواهم کرد. من یک Dockerfile ایجاد کرده ام برای انجام این.من از پوسته اسکریپت برای اجرای کانتینر در یک پوسته و خروج از آن استفاده می کنم

دستورات در تصویر بالا کارهای زیر را انجام می دهند:

تصویر داکر را بسازید
برنامه را در یک ظرف در پورت 8000 اجرا کنید
این برنامه به مدت 5 دقیقه زنده خواهد بود
پس از آن ظرف متوقف شده و از دستگاه خارج می شود

Build ID با $ یک متغیر محیطی است که با توجه به ساخت jenkins تغییر می کند، بنابراین ما در هر اجرا یک کانتینر جدید دریافت می کنیم و هیچ مشکلی وجود نخواهد داشت، زیرا ما همیشه یک کانتینر را اجرا نمی کنیم.

پس از اتمام روی ذخیره کلیک کنید

اگر برنامه را روی دستگاه خود نصب نکرده اید، برای اجرای برنامه به داکر نیاز داریم

$ sudo apt install docker.io

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ما همچنین به یک Dockerfile نیاز داریم می توانید آن را در مخزن من اینجا پیدا کنید

Dockerfile کارهای زیر را انجام می دهد:

آخرین تصویر گره را از DockerHub می کشد
فهرست کار به عنوان برنامه تنظیم شده است
npm install را اجرا می کند و تمام کتابخانه ها و بسته ها دانلود می شوند
این پورت 8000 را برای برنامه ما نشان می دهد
دستور را اجرا می کند node app.js در یک پوسته

بیایید به مرحله بعدی برویم

3. پیکربندی Github

ما باید مطمئن شویم که وقتی تغییری در مخزن ما شناسایی می‌شود، جنکین‌ها خط لوله را به‌طور خودکار اجرا می‌کنند، ما از webhooks برای رسیدن به این هدف استفاده می‌کنیم.

به تنظیمات > Webhooks برای مخزن خود بروید نه حساب خود

اکنون آدرس جنکینز خود را در جایی که میزبانی شده است اضافه کنید و سپس /github-webhook/ را اضافه کنید و روی ذخیره کلیک کنید.

4. آزمایش برنامه ما

اکنون اجازه دهید یک اجرا خشک انجام دهیم و ببینیم آیا خط لوله ما همانطور که انتظار می رود کار می کند یا خیر

برای اجرای خط لوله روی build now کلیک کنید

ساخت شروع شده است

من انتظار دارم که نام کانتینر با شماره ساخت پایان یابد، اجازه دهید بررسی کنیمهمانطور که انتظار می رود کار می کند

و خط لوله موفقیت آمیز است زیرا ما می توانیم برنامه خود را ببینیم

اکنون اجازه دهید چیزی را در مخزن تغییر دهیم و ببینیم آیا جنکینز آن را برمی دارد و خط لوله را اجرا می کند پس زمینه و مقداری متن را تغییر دادم

همانطور که انتظار می رود کار می کند

ما این پروژه را با موفقیت به پایان رساندیم

اگر سوالی دارید در زیر کامنت کنید خوشحال می شوم کمک کنم

امروز ما یک خط لوله CI/CD در Jenkins ایجاد خواهیم کرد که کد را از github واکشی می کند و یک تصویر از Dockerfile ایجاد می کند و برنامه ما را در یک ظرف داکر اجرا می کند و پس از زمان برنامه ریزی شده به طور خودکار خاتمه می یابد.

1. ایجاد نمونه های EC2

من از AWS EC2 برای راه‌اندازی یک نمونه ubuntu استفاده کرده‌ام که تحت لایه رایگان قرار دارد، می‌توانید آن را روی دستگاه محلی خود امتحان کنید یا از یک VM از هر ارائه‌دهنده ابر عمومی استفاده کنید.

تصویر نمونه EC2

حالا به نمونه وصل شوید

2. راه اندازی Jenkins & Docker

ما باید مدیر بسته نصب خود را به روز کنیم

$ sudo apt update
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

جنکینز برای اجرا به جاوا نیاز دارد، بنابراین ابتدا به نصب جاوا ادامه می دهیم

$ sudo apt install openjdk-11-jre
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بررسی کنید که آیا جاوا به درستی نصب شده است یا خیر
جاوا رو چک کن

اکنون جنکینز را با استفاده از دستور curl دانلود می کنیم

$ curl -fsSL https://pkg.jenkins.io/debian/jenkins.io.key | sudo tee \   /usr/share/keyrings/jenkins-keyring.asc > /dev/null
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ما آن را به مدیر بسته خود اضافه می کنیم

$ echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \   https://pkg.jenkins.io/debian binary/ | sudo tee \   /etc/apt/sources.list.d/jenkins.list > /dev/null
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اجازه دهید یک بار مدیر بسته خود را به روز کنیم

$ sudo apt-get update
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

حالا jenkins را نصب کنید

$ sudo apt-get install jenkins
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

قبل از اینکه بتوانیم از جنکینز استفاده کنیم، ابتدا باید آن را فعال کنیم

$ sudo systemctl enable jenkins
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سرور جنکینز را راه اندازی کنید

$ sudo systemctl start jenkins
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

وضعیت جنکینز را بررسی کنید

$ sudo systemctl status jenkins
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

شما چنین پاسخی دریافت خواهید کرد
وضعیت جنکینز

جنکینز به طور پیش فرض روی پورت 8080 اجرا می شود، برای دسترسی به آن به localhost:8080 بروید.
از آنجایی که من یک VM در فضای ابری ارائه کرده ام، باید پورت 8080 را باز کنم تا امکان اتصال فراهم شود
من به گروه های امنیتی شبکه رفتم و شماره پورتی را که می خواهم به آن دسترسی داشته باشم اضافه کردم.

NSG در AWS

از آنجایی که نمی‌خواهم همه بتوانند به جنکینز دسترسی داشته باشند، پورت را فقط به یک میزبان محدود کرده‌ام

حالا وقتی وارد پورت 8080 می شوم با یک صفحه ورود به سیستم جنکینز مواجه می شوم.

ورود جنکینز

اکنون برای ورود نیاز به اعتبار داریم
نام کاربری admin است
رمز عبور را می توان از طریق دستور زیر پیدا کرد

$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پس از ورود به jenkins رمز عبور خود را تغییر دهید و jenkins از شما می خواهد که افزونه ها را نصب کند و اجازه می دهد آنها را نصب کند

اکنون با صفحه ای مانند این کلیک بر روی آیتم جدید استقبال می کنیم
داشبورد جنکینز

از آنجایی که قصد دارم آن را ساده نگه دارم، روی پروژه آزاد کلیک کنید
راه اندازی

پس از افزودن نام برای برنامه خود، مخزن github خود را که می خواهید متصل کنید، اضافه کنید
Git repo اضافه می شود

پس از افزودن یک مخزن، باید به جنکینز بگوییم چگونه به مخزن دسترسی داشته باشد و مجوز لازم را به آن بدهیم تا بتواند کد را از مخزن دریافت کند.
برای رسیدن به این هدف، من از کلیدهای SSH به سادگی یک کلید ssh تولید کرده و کلید عمومی را در github اضافه کرده ام

اعتبار برای Github

اکنون باید کلید خصوصی را در jenkins اضافه کنیم تا بتواند با github احراز هویت شود و کد را از مخزن ما استخراج کند.
روی افزودن اعتبار زیر کلیک کنید و جنکینز را انتخاب کنید

SSH کلید خصوصی در حال افزودن تصویر

یک نام به اعتبار خود بدهید و کلید خصوصی را اضافه کنید
نامگذاری اعتبار

قبل از اینکه به مرحله بعد برویم، افزونه ای به نام Github Integration را که در Jenkins موجود است نصب کنید، می توانید این کار را با رفتن به مدیریت jenkins و انتخاب افزونه ها و جستجوی افزونه انجام دهید.

اکنون مراحل ساخت اپلیکیشن را اضافه کرده و آن را اجرا کنید. از آنجایی که برنامه ما روی node.js اجرا می‌شود، از یک داکر کانتینر استفاده خواهم کرد. من یک Dockerfile ایجاد کرده ام
برای انجام این.
من از پوسته اسکریپت برای اجرای کانتینر در یک پوسته و خروج از آن استفاده می کنم
اسکریپت پوسته

دستورات در تصویر بالا کارهای زیر را انجام می دهند:

  • تصویر داکر را بسازید
  • برنامه را در یک ظرف در پورت 8000 اجرا کنید
  • این برنامه به مدت 5 دقیقه زنده خواهد بود
  • پس از آن ظرف متوقف شده و از دستگاه خارج می شود

Build ID با $ یک متغیر محیطی است که با توجه به ساخت jenkins تغییر می کند، بنابراین ما در هر اجرا یک کانتینر جدید دریافت می کنیم و هیچ مشکلی وجود نخواهد داشت، زیرا ما همیشه یک کانتینر را اجرا نمی کنیم.

پس از اتمام روی ذخیره کلیک کنید

اگر برنامه را روی دستگاه خود نصب نکرده اید، برای اجرای برنامه به داکر نیاز داریم

$ sudo apt install docker.io 
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ما همچنین به یک Dockerfile نیاز داریم
می توانید آن را در مخزن من اینجا پیدا کنید

Dockerfile کارهای زیر را انجام می دهد:

  • آخرین تصویر گره را از DockerHub می کشد
  • فهرست کار به عنوان برنامه تنظیم شده است
  • npm install را اجرا می کند و تمام کتابخانه ها و بسته ها دانلود می شوند
  • این پورت 8000 را برای برنامه ما نشان می دهد
  • دستور را اجرا می کند node app.js در یک پوسته

بیایید به مرحله بعدی برویم

3. پیکربندی Github

ما باید مطمئن شویم که وقتی تغییری در مخزن ما شناسایی می‌شود، جنکین‌ها خط لوله را به‌طور خودکار اجرا می‌کنند، ما از webhooks برای رسیدن به این هدف استفاده می‌کنیم.

به تنظیمات > Webhooks برای مخزن خود بروید نه حساب خود
برگه Webhook

اکنون آدرس جنکینز خود را در جایی که میزبانی شده است اضافه کنید و سپس /github-webhook/ را اضافه کنید و روی ذخیره کلیک کنید.
جزئیات وب هوک

4. آزمایش برنامه ما

اکنون اجازه دهید یک اجرا خشک انجام دهیم و ببینیم آیا خط لوله ما همانطور که انتظار می رود کار می کند یا خیر

برای اجرای خط لوله روی build now کلیک کنید
اجرای خشک

ساخت شروع شده است
وضعیت خط لوله

من انتظار دارم که نام کانتینر با شماره ساخت پایان یابد، اجازه دهید بررسی کنیم
بررسی نام کانتینر
همانطور که انتظار می رود کار می کند

و خط لوله موفقیت آمیز است زیرا ما می توانیم برنامه خود را ببینیم
موفقیت خط لوله

اکنون اجازه دهید چیزی را در مخزن تغییر دهیم و ببینیم آیا جنکینز آن را برمی دارد و خط لوله را اجرا می کند
پس زمینه و مقداری متن را تغییر دادم

خط لوله با تغییرات
همانطور که انتظار می رود کار می کند

ما این پروژه را با موفقیت به پایان رساندیم

اگر سوالی دارید در زیر کامنت کنید خوشحال می شوم کمک کنم

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا