به نام خداوندی که به آدمی آنچه را که نمیدانست تعلیم داد.
مثال ساده ای از Continuous Integration
در این مطلب میخواهیم مثالی از پیاده سازی و استفاده از CI در مهندسی نرم افزار را با هم بررسی کنیم
ابتدا لازم است تعریفی از Continuous Integration داشته باشیم
تعریف Continuous Integration
روشی در مهندسی نرم افزار که به واسط آن میتوان توسعه پروژه را به ازای هر تغییر را سریع تر و مطمئن تر کرد را گویند!
به زبانی دیگر اگر شما سیستم کنترل ورژن دارید به ازای هر کامیت در این سیستم بعد از تست از پروژه build گرفته شود و مثلا به شما اطلاع داده شود
برای مثال در تصویر زیر چند نفر در حال توسعه پروژه ای هستند
هر فرد کد خود را در commit می کند
سیستم به صورت خودکار متوجه تغییرات در repository می شود
بعد از Build و Test نتیجه را اطلاع می دهد
ابزار های مورد استفاده 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 انتخاب می کنیم
سپس فرمی نسبتا طویل برای ما باز می شود
در این فرم تیک های زیر را به ترتیب می زنیم
ابتدا گزینه 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 فعال می شود
منابع
کم و کاستی های این مطلب را به بزرگی خودتان ببخشید
لطفا هر نظری و انتقادی و پشنهادی داشتید اینجا کامنت کنید
با تشکر از شما
مطلبی دیگر از این انتشارات
3 تا راه ساده که نذاری کامپیوترت ویروسی بشه.
مطلبی دیگر از این انتشارات
چطور در دنیای پرهیاهوی امروزی، زندگی کنیم؟
مطلبی دیگر از این انتشارات
دوره سریع آموزشی گیت و گیتهاب