مثال ساده ای از Continuous Integration

در این مطلب میخواهیم مثالی از پیاده سازی و استفاده از CI در مهندسی نرم افزار را با هم بررسی کنیم

ابتدا لازم است تعریفی از Continuous Integration داشته باشیم

تعریف Continuous Integration

روشی در مهندسی نرم افزار که به واسط آن میتوان توسعه پروژه را به ازای هر تغییر را سریع تر و مطمئن تر کرد را گویند!

به زبانی دیگر اگر شما سیستم کنترل ورژن دارید به ازای هر کامیت در این سیستم بعد از تست از پروژه build گرفته شود و مثلا به شما اطلاع داده شود

برای مثال در تصویر زیر چند نفر در حال توسعه پروژه ای هستند

هر فرد کد خود را در commit می کند

سیستم به صورت خودکار متوجه تغییرات در repository می شود

بعد از Build و Test نتیجه را اطلاع می دهد

dotnetvibes
dotnetvibes


ابزار های مورد استفاده Continuous Integration

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

سیستم gitlab برای ما نقش source control را دارد و سیستم jenkins برای ما نقش automate کردن فرآیند build و test را دارد

برای نصب gitlab لینوکس میتوانید از این لینک استفاده کنید

برای نصب jenkins میتوانید از این لینک استفاده کنید

اگر به مشکلی خوردید احتمالا قبل از دیباگ شاید مشکل در پورت های سیستم باشد

اگر خواستید پورت مربوط به gitlab را در centos7 تغییر دهید به این مسیر بروید

/etc/gitlab/gitlab.rb

و این خط را تغییر دهید

external_port

و سپس دستور های زیر را وارد کنید

gitlab-ctl reconfigure
gitlab-ctl restart

اگر خواستید پورت مربوط به jenkins را در centos7 تغییر دهید به این مسیر بروید

/etc/sysconfig/jenkins

و این خط را تغییر دهید

JENKINS_PORT

اگر خواستید url مربوط به jenkins را نیز تغییر بدهید به این مسیر بروید

[http/https]://ip:port/configure

و این خط را تغییر دهید

Jenkins Location

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

systemctl restart jenkins.service

سناریو شرکت طراحی وبسایت

فرض کنید توسعه دهنده ای بر روی پروژه طراحی وبسایت مشتری کار می کند

توسعه دهنده هر روز حدود ۲۵ کامیت دارد

میخواهیم با استفاده از continuous integration به توسعه دهنده کمک کنیم تا کدهای کامیت شده به صورت اتوماتیک build و test شود و به او نتیجه کار اعلام شود

ما برای اینکار مراحل زیر را انجام می دهیم

۱- سیستم های gitlab و jenkins را بر روی سرور داخلی شرکت نصب می کنیم

۲- پروژه مشتری را در داخل reposiroty در gitlab اضافه میکنیم

۳- در jenkins، نودی برای build و test ایجاد میکنیم

لازم به ذکر است نودی مربوط باید فقط و فقط jre را نصب داشته باشد

برای ساخت نود به این آدرس می رویم http://ip:port/computer و در New Nodes کلیک و به مانند تصویر عمل میکنیم

فقط لطفا آدرس Host و Credentials را با توجه به اطلاعات سرور خودتان تغییر دهید

بعد از تکمیل فرم save را می فشاریم

برای استفاده از این نود به صفحه اصلی jenkins می رویم و بر روی New Item کلیک می کنیم و یک item از نوع Freestyle project انتخاب می کنیم

برای استفاده از این نود به صفحه اصلی jenkins می رویم و بر روی New Item کلیک می کنیم,
برای استفاده از این نود به صفحه اصلی jenkins می رویم و بر روی New Item کلیک می کنیم,

سپس فرمی نسبتا طویل برای ما باز می شود

در این فرم تیک های زیر را به ترتیب می زنیم

ابتدا گزینه Restrict where this project can be run فعال می کنیم که به ما اجازه می دهد نود دلخواه را برای این job اضافه کنیم برای همین نام نودی که در مراحل قبل ایجاد کردیم را می نویسیم

سپس از بخش Source Code Management گزینه Git را فعال می کنیم

و در بخش Repositories آدرس repository مربوط به پروژه مشتری را وارد می کنیم

و از بخش Build Triggers گزینه زیر را فعال می کنیم

Build when a change is pushed to GitLab. GitLab webhook URL: http://ip:port/project/test

این گزینه به ما اجازه می دهد که بعد از push شدن commit این job فعال شود

سپس برای secret token ارتباطی git و jenkins در همین بخش از advance یک secret token انتخاب می کنیم

سپس در Build گزینه Execute shell را فعال می کنیم و کدی که میخواهیم بعد commit اتفاق بی افتد را وارد میکنیم

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

در آخر اگر میخواهیم با اتمام این job، job دیگری فعال شود از Post-build Actions

گزینه Build other projects را فعال میکنیم و نام job دیگر را تایپ می کنیم

دو کاری باید در gitlab انجام دهیم

ابتدا در پروژه مورد نظر به بخش Settings و Integrations می رویم

در این بخش url و secret token که در jenkins و در بخش Build Triggers بود را اینجا کپی می کنیم و Add webhook می کنیم

برای تست کار در همین صفحه گزینه Test را انتخاب می کنیم

اگر همه چیز درست کار کند مانند تصویر زیر job فعال می شود

منابع


کم و کاستی های این مطلب را به بزرگی خودتان ببخشید

لطفا هر نظری و انتقادی و پشنهادی داشتید اینجا کامنت کنید

با تشکر از شما