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

در این مطلب میخواهیم مثالی از پیاده سازی و استفاده از CI در مهندسی نرم افزار را با هم بررسی کنیمابتدا لازم است تعریفی از Continuous Integration داشته باشیمتعریف Continuous Integrationروشی در مهندسی نرم افزار که به واسط آن میتوان توسعه پروژه را به ازای هر تغییر را سریع تر و مطمئن تر کرد را گویند!به زبانی دیگر اگر شما سیستم کنترل ورژن دارید به ازای هر کامیت در این سیستم بعد از تست از پروژه build گرفته شود و مثلا به شما اطلاع داده شود برای مثال در تصویر زیر چند نفر در حال توسعه پروژه ای هستند هر فرد کد خود را در commit می کند سیستم به صورت خودکار متوجه تغییرات در repository می شود بعد از Build و Test نتیجه را اطلاع می دهدdotnetvibes ابزار های مورد استفاده Continuous Integrationابزار های زیادی برای اینکار وجود دارد ولی ما در این مطلب از jenkins و gitlab استفاده می کنیمسیستم gitlab برای ما نقش source control را دارد و سیستم jenkins برای ما نقش automate کردن فرآیند build و test را داردبرای نصب gitlab لینوکس میتوانید از این لینک استفاده کنیدبرای نصب jenkins میتوانید از این لینک استفاده کنیداگر به مشکلی خوردید احتمالا قبل از دیباگ شاید مشکل در پورت های سیستم باشداگر خواستید پورت مربوط به gitlab را در centos7 تغییر دهید به این مسیر بروید/etc/gitlab/gitlab.rbو این خط را تغییر دهیدexternal_portو سپس دستور های زیر را وارد کنیدgitlab-ctl reconfiguregitlab-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 کلیک می کنیم,سپس فرمی نسبتا طویل برای ما باز می شوددر این فرم تیک های زیر را به ترتیب می زنیمابتدا گزینه 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 فعال می شودمنابعآموزش یکپارچه‌سازی پیوسته (Continuous Integration) احمد طاهانی باویتککم و کاستی های این مطلب را به بزرگی خودتان ببخشیدلطفا هر نظری و انتقادی و پشنهادی داشتید اینجا کامنت کنید با تشکر از شما