خط لوله CI/CD با استفاده از جنکینز و داکر
![خط لوله CI/CD با استفاده از جنکینز و داکر 1 خط لوله CI/CD با استفاده از جنکینز و داکر](https://nabfollower.com/blog/wp-content/uploads/2024/07/خط-لوله-CICD-با-استفاده-از-جنکینز-و-داکر-780x470.jpg)
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 از هر ارائهدهنده ابر عمومی استفاده کنید.
حالا به نمونه وصل شوید
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 کلیک کنید
ساخت شروع شده است
من انتظار دارم که نام کانتینر با شماره ساخت پایان یابد، اجازه دهید بررسی کنیم
همانطور که انتظار می رود کار می کند
و خط لوله موفقیت آمیز است زیرا ما می توانیم برنامه خود را ببینیم
اکنون اجازه دهید چیزی را در مخزن تغییر دهیم و ببینیم آیا جنکینز آن را برمی دارد و خط لوله را اجرا می کند
پس زمینه و مقداری متن را تغییر دادم
همانطور که انتظار می رود کار می کند
ما این پروژه را با موفقیت به پایان رساندیم
اگر سوالی دارید در زیر کامنت کنید خوشحال می شوم کمک کنم