علیرضا کفطوسیان
علیرضا کفطوسیان
خواندن ۵ دقیقه·۱ سال پیش

ایجاد محیط CI/CD با GitLab (قسمت اول)


یکی از مفاهیم پايه‌ی DevOps و توسعه‌ی سریع نرم افزارها استقرار سیستم های CI/CD و تنظیم آن‌ها جهت توسعه، تست و انتشار سریع‌تر نرم‌افزار است.
برای این کار میتوان از GitLab یا Jenkins استفاده کرد که برای محیط های توسعه کوچک تا متوسط استفاده از گیتلب پیشنهاد میشود.

اگر تا به حال از محیط های CI/CD استفاده نکرده‌اید بهتر از یکی از آن‌ها را تست کنید و به سمت توسعه‌ی مدرن‌تر نرم‌افزارتان قدم بردارید.
همچنین در صورتی که مشتاق به راه اندازی یک محیط CI/CD با استفاده از GitLab و Docker هستید، خواندن این نوشته خالی از لطف نیست.

در ادامه ما قصد داریم راه اندازی اولیه GitLab با استفاده از Docker را انجام دهیم. ما از Docker در داخل یک VPS برای میزبانی نمونه GitLab خود استفاده خواهیم کرد، در هنگام ساختن، اجراکننده های GitLab را به دلخواه تولید می کنیم و ایمیج Docker ایجاد می کنیم. با انجام مراحل گفته شده، می‌توانیم build را با استفاده از استک دلخواه، اعم از Go، NodeJS، Java و غیره انجام دهیم.


انتخاب سخت افزار

برای انتخاب مناسب ترین سخت افزار ممکن، لازم است بدانیم دقیقا با سرورمجازی چکار میکنیم؟
در زیر لیست مواردی که بر روی سرور انجام میشود به همراه منابع مورد نیاز آورده شده است :

  • داکر (در لینوکس از منابع خود سیستم استفاده میکند.)
  • نسخه‌ی CE نرم‌افزار GitLab (نیازمند ۴ تا ۶ گیگابایت رم)
  • نرم افزار GitLab Runners (برای هر runner بین ۴۹ تا ۱۰۰ مگابایت مصرف رم دارد)

در صورتی که عملیات سنگیت با runner های فراوان اجرا کنید، نیازمند سخت افزار به مراتب قدرتمندتری خواهید بود.

در خصوص فضای دیسک مورد نیاز، لازم است بسیار سخاوتمندانه عمل کنید. GitLab بیش از حد از دیسک ذخیره سازی (هارددیسک) استفاده می کند. علاوه بر CI/CD و انجام آن، مخزن Git و حافظه پنهان ما نیز در همین سرور قرار خواهد گرفت. تنها چیزی که ما به صورت جدی نیاز داریم دیسک و رم است.
شما متیوانید میزان CPU کمتری را برای سرورمجازی خود سفارش دهید، چرا که این مورد صرفا زمان build شده نرم افزار را تحت تاثیر قرار میدهد و یک مورد حیاتی برای کارکرد سیستم CI/CD محسوب نمیشود.


راه‌اندازی GitLab در Docker

مراحل انجام کار به ترتیب آورده شده است :

  • نصب داکر
  • نصب گیت‌لب داخل یک کانتینر
  • نصب Nginx بر روی ماشن میزبان
  • نمایش و راه‌اندازی HTTPS بر روی Nginx با استفاده از Certbot
  • اضافه کردن gitlab runner های مورد نیاز و اتصال آن‌ها به gitlab نصب شده.
قبل از هرچیزی از نصب صحیح داکر و همچنین کارکرد آن مطمئن شوید.


پیاده‌سازی GitLab با استفاده از docker container مخصوص

پس از نصب Docker، اولین قدم برای تنظیم محیط، اجرای ایمیج GitLab در داخل دستگاه میزبان است. بنابراین GitLab در داخل یک کانتینر docker اجرا می شود، اما از دیسک ماشین میزبان برای ذخیره داده ها و بارگذاری تنظیمات استفاده می کند.

sudo docker run --detach \ --hostname gitlab.example.com \ --publish 127.0.0.1:4443:443 --publish 127.0.0.1:4000:80 \ --name gitlab \ --restart always \ --volume /srv/gitlab/config:/etc/gitlab \ --volume /srv/gitlab/logs:/var/log/gitlab \ --volume /srv/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce:latest

در دستورات بالا، hostname ماشین gitlab.example.com در نظر گرفته شده است، پورت های 443, 80, 22 را بر روی سرور باز بگذارید و در دستور بالا آن‌ها را به پورت های مشابه بر روی کانتینتر map میکنیم و در ادامه‌ی این دستور volume های کانتینر را به ماشین میزبان یا همان هاست متصل میکنیم.


  • مسیر /srv/gitlab/config فایل های کانفیگ گیت لب را نگهداری میکند.
  • مسیر /srv/gitlab/logs فایل های لاگ گیت لب را نگهداری میکند.
  • مسیر /srv/gitlab/data دیتای مربوط به git repo را نگهداری میکند.
نکته : این پوشه‌ها در ماشین میزبان نگهداری می‌شوند، به این معنی که این مکان‌ها در راه‌اندازی مجدد کانتینر و ارتقای GitLab بدو تغییر خواهند ماند. اگر نسخه ارتقا یافته GitLab را با استفاده از یک کانتینر اجرا کنیم و همان پوشه ها را به همان مکان های میزبان نقشه برداری کنیم، می توانیم از داده های قدیمی شما با نسخه جدید GitLab دوباره استفاده کنیم.


همچنین دقت داشته باشید که در چنین حالتی مسیر تنظیمات پیش فرض نرم افزار gitlab که در آموزش ها و مستندات آن به صورت /etc/gitlab ذکر شده تبدیل به /srv/gitlab/config خواهد شد.
معمولا مستندات gitlab را طوری در نظر میگیرند که بر روی دستگه میزبان نصب شده باشد، اما در خصوص پروژه‌ی ما، این مورد با استفاده از کانتینر راه اندازی شده و اندکی متفاوت است.

همچنین در دستورات بالا چنین عبارتی را داریم : 127.0.0.1:4443:443 --publish 127.0.0.1:4000:80
این بدان معناست که i/o فقط به لوکال هاست محدود می شود. پورت های 4443 و 4000 کانتینر هرگز در معرض شبکه‌ی خارج از سرور میزبان قرار نمی گیرند و ما از یک پروکسی معکوس Nginx یا همان reverse proxy نصب شده در سرورمجازی برای دسترسی به URL ها استفاده خواهیم کرد.


ما می خواهیم GitLab فقط از طریق HTTPS و بر بستر یک SSL صحیح، با نام دامنه دلخواهمان، نمایش داده شده و لود شود، نام این دامنه را mydomain.com فرض میکنیم. برای تکمیل این مرحله، باید تنظیمات مورد نیازتان را سمت رجیسترار دامنه انجام دهید.
روش راه‌اندازی در ثبت‌کننده‌های نام دامنه متفاوت است، اما اصل قضیه یعنی تعریف رکوردهای مورد نیاز در تمامی پنل ها یکسان است.

در این کنترل پنل، نام سابدامین (در این مورد، git) را روی IP سرورمجازی خود قرار می دهیم. در اینجا تصور میکنیم که IP سرور 55.55.55.55 باشد. تنظیمات NameServer ما اکنون باید به این شکل باشد (ممکن است موارد بیشتری جهت تعریف وجود داشته باشد، اما آنها به سناریو مربوط نمیشوند)

NS of GitLab
NS of GitLab


در قسمت بعد به نصب و راه اندازی Nginx پرداخته و همچنین گواهینامه SSL بر روی سابدامین پروژه نصب کرده و به عنوان نمونه، یک پروژه بر روی این سناریو تعریف خواهیم کرد.

ci cdgitlabdockerdevopsداکر
شاید از این پست‌ها خوشتان بیاید