علی سفیدموی
علی سفیدموی
خواندن ۵ دقیقه·۶ سال پیش

راه اندازی CI/CD Pipeline با استفاده از Jenkins و Docker

Docker + Jenkins
Docker + Jenkins

سلام به همه توسعه دهنده های عزیز :)

این اولین پست من در ویرگول هست. دوست داشتم راجع به موضوعاتی بنویسم که توی منابع فارسی، کمتر بهش پرداخته شده. یکی از این موضوعات، مباحث کاربردی در Devops هست.
بنابراین راه اندازی یک پایپلاینِ CI/CD توسط ابزار Jenkins که در اون از کامند های Docker هم استفاده شده رو برای اولین نوشته ام انتخاب کردم.

همین اول کار بگم که من خیلی در زمینه Devops حرفه ای نیستم و اگر اشکالی پیدا کردین، که حتما پیدا هم می کنین :) خوشحال میشم که توی کامنت ها بهم بگین. خب دیگه مقدمه چینی بسه و بریم سراغ راه اندازی پایپلاین مون.

کلیت داستان اینه که یک برنامه به زبان جاوا داریم که بر روی گیت هاب قرار داره. میخوایم زمانی که ما یک کامیت رو به برنچِ master ، پوش (push) می کنیم، Jenkins بفهمه و یه سری کار ها رو برامون انجام بده :

  • اول کد رو از روی گیت هاب pull کنه
  • پروژه رو برامون پکیج کنه (اینجا که برنامه جاوایی هست، فایل WAR رو برامون بسازه)
  • ایمیج داکر مربوط به پروژه رو برامون بسازه
  • از روی ایمیج مون یه کانتینر ایجاد کنه و اون رو اجرا کنه(در اینجا یک instance از Tomcat برامون اجرا کنه)

البته مراحل بالا مراحلی بود که خودم تعریف کردم و شما طبق نیازتون میتونین مراحل دیگه ای مثل تست کردن، push کردن ایمیج داکر به Dockerhub و ... رو تعریف کنین.


نیازمندی ها :

  • سرور دبیان یا اوبونتو با دسترسی Sudo (اینجا من سرور دبیان رو انتخاب کردم، شما می تونین هر توزیعی که دوست دارین رو انتخاب کنین)
  • جاوا
  • ابزار maven
  • داکر

بعد از این که جاوا، maven و داکر رو نصب کردیم، مراحل زیر رو انجام میدیم :

1. مرحله اول : نصب و راه اندازی Jenkins روی سرور

01. با دستور زیر، کلید GPG مربوط به مخزنِ Jenkins رو import می کنیم :

$ sudo wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -

خروجی دستور بالا باید OK باشد.

02. با دستور زیر، مخزنِ Jenkins رو به سیستم اضافه می کنیم :

$ sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'

03. حالا با دستورات زیر لیست پکیج مون رو آپدیت می کنیم و آخرین نسخه Jenkins رو نصب می کنیم :

$ sudo apt update
$ sudo apt install jenkins

04. سرویس Jenkins رو استارت می کنیم و همینطور اون رو enable می کنیم تا موقع بوت شدن سیستم به طور خودکار آغاز به کار کنه :

$ sudo systemctl start jenkins
$ sudo systemctl enable jenkins

05. داخل مرورگر به آدرس http://your_ip_or_domain:8080 می ریم. با صفحه زیر مواجه میشیم:

موقع نصب Jenkins ، یک رشته 32 کاراکتری به عنوان پسوورد ادمین، در محل زیر تولید میشه، این فایل رو باز کرده، پسوورد رو کپی می کنیم و اون رو داخل قسمت Administrator password وارد می کنیم :

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

در ادامه با صفحه زیر مواجه میشیم. اینجا گزینه سمت چپ رو انتخاب می کنیم :

در صفحه بعدی طبق عکسی که می بینید، Jenkins شروع به نصب پلاگین های مورد نیاز می کنه :

بعد از انجام شدن مرحله بالا، در صفحه بعد، Jenkins ازتون میخواد یک کاربر جدید بسازید. این کار رو انجام بدین. در نهایت با صفحه زیر مواجه میشین :

صفحه اصلی Jenkins
صفحه اصلی Jenkins

2. مرحله دوم: پیکربندی های لازم برای CI/CD Pipeline

الف. نصب پلاگین های مورد نیاز :

01. در قسمت سمت چپ صفحه اصلی به آدرس زیر می رویم :

Manage Jenkins > Manage Plugins

در تبِ available ، به دنبال پلاگین های SSH Pipeline Steps و Github Integration Plugin میگردیم و آن ها را نصب می کنیم.

ب. راه اندازی Github Webhook :

سرویس webhook در واقع نوعی متد HTTP POST است که یک اپلیکیشن از آن برای فراهم کردن اطلاعات بلادرنگ (Realtime) به سایر اپلیکیشن ها استفاده می کند.

گیت هاب هم مثل خیلی از سرویس های دیگه دارای webhook هست که در ادامه اون رو راه اندازی میکنیم. اما این webhook به چه کارمون میاد؟ خُب. زمانی که ما یک کامیت رو به repository مون push می کنیم، گیت هاب با استفاده از این سرویس، به Jenkins اعلام می کنه که من یه Push جدید دریافت کردم، آقای Jenkins شما کدِ جدید رو از من بگیر و شروع به انجام مراحلی که برات توسط Pipeline تعریف شده بکن!

خوبی webhook اینه که این کار به صورت خودکار انجام میشه و دیگه لازم نیست بعد از این که کد رو به گیت هاب Push کردین بیاین داخل Jenkins و Build now رو بزنین.

01. ابتدا به صفحه repository خود داخل github رفته و به قسمت settings می رویم، سپس به قسمت Webhook می رویم و یک Webhook جدید ایجاد می کنیم

در قسمت payload URL آدرس زیر رو وارد می کنیم :

http://your_ip_or_domain:8080/github-webhook/

در ادامه Content-Type رو هم بر روی application/json قرار می دهیم، Just the push event رو انتخاب می کنیم و Add Webhook رو میزنیم.

ج. پیکربندی maven در Jenkins

به آدرس زیر رفته و maven رو پیکربندی می کنیم :

Manage Jenkins > Global Tool Configuration

در قسمت maven ، بر روی Add maven کلیک می کنیم. نام "maven3" و آدرس maven رو که قبلا بر روی سیستم نصب کرده ایم می دهیم. (نامی که اینجا دادیم رو به یاد داشته باشین، بعدا اون رو مورد استفاده قرار میدیم)

3. مرحله سوم: راه اندازی CI/CD Pipeline

01. در مسیر Root پروژه در حال توسعه مون، فایلی به نام Jenkinsfile (دقیقا به همین نام باید باشد) ایجاد می کنیم و خطوط زیر که پایپلاین مون هست و به زبان Groovy نوشته شده رو داخل اون قرار میدیم :

Jenkinsfile
Jenkinsfile

02. فایل دیگه ای که اون رو باید داخل مسیر روتِ پروژه قرار بدیم Dockerfile هست. این فایل ایمیج داکر نهایی مربوط به پروژه رو برامون میسازه. پس فایلی به همین نام ایجاد می کنیم و خطوط زیر رو در اون قرار میدیم :

Dockerfile
Dockerfile

02. به صفحه اصلی Jenkins رفته و یک Item جدید از نوع Pipeline ایجاد می کنیم.

در قسمت Build Triggers برای استفاده از Webhook ایجاد شده، عبارت زیر را علامت می زنیم :

اسکرول کرده و به پایین می آییم. در بخش Pipeline ، قسمت Definition را بر رویPipeline Script from SCM قرار می دهیم و آدرس repository خود را به همراه نام برنچ (در این جا master) معرفی می کنیم.

توجه : username و password مربوط به repository را داخل Jenkins باید به صورت credentials از قبل تعریف کرده باشیم.

از این که طولانی شد عذرخواهی می کنم.

موفق باشید ;)


jenkinsci cdمهندسی نرم افزارdockerdevops
یه کامپیوتریِ خوشحال، علاقه مند به یادگیری تکنولوژی های جدید ;)
شاید از این پست‌ها خوشتان بیاید