پیکوسیستم خدمات فنی IT
دواپس و اتوماسیون

پایپ لاین CI/CD و استقرار خودکار با GitLab، Jenkins و ArgoCD

وقتی پایپ لاین CI/CD ندارید و انتشار هر نسخه یعنی SSH به سرور و اجرای چند دستور از حافظه، دیر یا زود یک نسخه خراب به دست کاربران می رسد. ما مسیر کد تا سرور را خودکار می کنیم. هر push تست و build می شود و با یک تأیید روی محیط اصلی می رود.

ابزارها و فناوری ها ci-cd
  • GitLab CI/CD
  • GitLab Runner
  • Jenkins
  • ArgoCD
  • Docker
  • Helm
  • HashiCorp Vault
  • SonarQube
5بخش کار
4خروجی
4مرحله

پایپ لاین CI/CD چیست؟

پایپ لاین CI/CD یعنی مسیری خودکار که بعد از هر push کد را تست و build می کند و نسخه جدید را با امکان rollback روی سرور منتشر می کند. این خدمت برای تیم نرم افزاری است که انتشار هر نسخه را یک نفر با SSH و چند دستور از حافظه انجام می دهد، یا به خاطر تحریم نمی تواند به GitHub Actions و GitLab.com تکیه کند. پیکوسیستم GitLab CE را روی سرور داخلی با بکاپ خودکار نصب می کند، مراحل lint، تست، build ایمیج، اسکن و استقرار را در .gitlab-ci.yml یا Jenkinsfile می نویسد، استقرار خودکار روی staging و انتشار production با تأیید دستی را تنظیم می کند، برای کوبرنتیز ArgoCD راه می اندازد و رمزها را از داخل کد به متغیرهای محافظت شده یا HashiCorp Vault منتقل می کند. در پایان پایپ لاین های فعال، راهنمای افزودن پروژه جدید و دستورالعمل rollback را تحویل می گیرید.

چه زمانی به پایپ لاین CI/CD نیاز دارید؟

  • هر انتشار را یک نفر با دست روی سرور انجام می دهد و فقط خودش می داند چطور.
  • بعد از هر آپدیت چیزی خراب می شود و برگرداندن نسخه قبل ساعت ها طول می کشد.
  • به خاطر تحریم نمی توانیم به GitHub Actions یا GitLab.com تکیه کنیم.
  • تست ها نوشته شده اند ولی هیچ وقت خودکار اجرا نمی شوند.

پایپ لاین CI/CD شامل چه کارهایی است؟

01

GitLab سازمانی

نصب GitLab CE روی سرور داخلی با بکاپ خودکار، اتصال به LDAP یا Active Directory و راه اندازی GitLab Runner.

02

طراحی پایپ لاین

مراحل lint، تست، build ایمیج، اسکن و استقرار در .gitlab-ci.yml یا Jenkinsfile، با cache وابستگی ها برای کوتاه شدن زمان اجرا.

03

staging و production

استقرار خودکار روی staging، انتشار روی production با تأیید دستی، تگ نسخه و rollback با یک کلیک.

04

GitOps با ArgoCD

برای کلاسترهای کوبرنتیز، وضعیت مطلوب در مخزن گیت نگهداری می شود و ArgoCD کلاستر را با آن هم سان می کند.

05

مدیریت secretها

انتقال رمزها و کلیدها از داخل کد به متغیرهای محافظت شده CI یا HashiCorp Vault.

بعد از پایپ لاین CI/CD چه چیزی تحویل می گیرید؟

  • پایپ لاین های فعال برای پروژه های توافق شده
  • GitLab و Runnerها با بکاپ تنظیم شده، در صورت نیاز
  • راهنمای افزودن پروژه جدید به پایپ لاین
  • دستورالعمل rollback و رفع خطاهای رایج پایپ لاین

راهنمای پایپ لاین CI/CD

GitLab Runner با کدام executor؟ shell، docker یا kubernetes

executor تعیین می کند jobهای پایپ لاین کجا و چطور اجرا شوند. shell executor دستورها را مستقیم روی سرور Runner اجرا می کند. ساده است، ولی jobها روی فایل های یکدیگر اثر می گذارند و نسخه ابزارها بین پروژه ها تداخل پیدا می کند.

docker executor هر job را در کانتینری تازه اجرا می کند و برای بیشتر تیم ها مناسب است. اگر job باید ایمیج Docker بسازد، به جای Docker-in-Docker در حالت privileged که عملاً دسترسی root به سرور Runner می دهد، Buildah یا BuildKit بدون root را پیشنهاد می کنیم. اگر کلاستر کوبرنتیز دارید، kubernetes executor هر job را به شکل pod اجرا می کند و ظرفیت Runner همراه کلاستر کم و زیاد می شود.

GitLab CI/CD variables: اشتباهات رایج در نگهداری رمزها

متغیری که در تنظیمات پروژه تعریف شده، خودبه خود امن نیست. اگر گزینه Masked فعال نباشد، مقدار آن با یک echo یا اجرای اسکریپت با set -x در لاگ job چاپ می شود و هر کسی که به لاگ دسترسی دارد آن را می بیند. اگر Protected نباشد، هر برنامه نویسی می تواند در یک branch تازه jobی بنویسد که کلید SSH سرور production را بخواند.

اشتباه رایج دیگر یک Runner مشترک برای همه پروژه هاست که کلید دسترسی به سرورهای اصلی رویش مانده. Runner پروژه های حساس را جدا کنید و استقرار production را به Runner اختصاصی با tag مشخص بسپارید. نبودن expire_in برای artifactها هم باعث می شود دیسک سرور GitLab چند ماه بعد پر شود.

پیش از راه اندازی پایپ لاین CI/CD چه چیزهایی را مشخص کنید؟

پایپ لاین روند فعلی انتشار را خودکار می کند، پس آن روند باید روشن باشد. مدل branch را مشخص کنید: همه روی main کار می کنند یا branchهای develop و release دارید. فهرست محیط ها و نوع دسترسی به هر کدام را هم آماده کنید.

دستورهایی که امروز برای build و اجرای تست ها به کار می روند، حتی اگر فقط در ذهن یک نفر باشند، باید نوشته شوند. تصمیم بگیرید migration دیتابیس خودکار اجرا شود یا با تأیید، و چه کسی اجازه تأیید انتشار روی production را دارد.

ArgoCD و Helm کنار GitLab CI/CD: هر کار با کدام ابزار است؟

در مدل رایج، GitLab CI ایمیج را build و تست می کند، آن را به رجیستری می فرستد و فقط تگ نسخه جدید را در مخزن تنظیمات استقرار به روز می کند. ArgoCD این مخزن را دنبال می کند و کلاستر را با آن هم سان می کند. به این ترتیب پایپ لاین به kubeconfig مدیر کلاستر نیاز ندارد.

برای هر محیط یک فایل values جداگانه در Helm chart نگه می داریم، مثل values-staging.yaml و values-production.yaml، و ArgoCD هر Application را از فایل خودش می سازد. اگر کسی با kubectl تغییری دستی روی کلاستر بدهد، ArgoCD آن را OutOfSync نشان می دهد و با selfHeal آن را برمی گرداند.

مراحل پایپ لاین CI/CD

  1. 01

    بررسی فرایند فعلی

    روش فعلی build و استقرار، ساختار مخزن ها و محیط ها را بررسی می کنیم و نقاط پرخطر را مشخص می کنیم.

  2. 02

    اجرای آزمایشی

    پایپ لاین را روی یک پروژه راه می اندازیم تا ایرادها پیش از گسترش پیدا شوند.

  3. 03

    گسترش به پروژه ها

    قالب پایپ لاین را مشترک می کنیم و بقیه پروژه ها را به همان الگو منتقل می کنیم.

  4. 04

    تحویل و آموزش

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

سؤالات متداول درباره پایپ لاین CI/CD

GitLab را انتخاب کنیم یا Jenkins؟

اگر مخزن کد هم لازم دارید، GitLab هر دو را در یک سرویس می دهد و برای بیشتر تیم ها ساده تر است. Jenkins برای سازمان هایی مناسب است که پایپ لاین های قدیمی یا پلاگین های خاص دارند. اگر Jenkins فعلی شما کار می کند، لازم نیست کنارش بگذارید.

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

بله. GitLab CE را روی سرور یا ماشین مجازی شما نصب می کنیم، رجیستری کانتینر داخلی آن را فعال می کنیم و بکاپ روزانه تنظیم می کنیم. به این ترتیب کد و پایپ لاین به سرویس خارجی وابسته نیست.

پایپ لاین CI/CD چیست و برای پروژه ای که تست خودکار ندارد هم فایده دارد؟

پایپ لاین CI/CD مراحل build، تست و استقرار را بعد از هر push به ترتیب و خودکار اجرا می کند. حتی بدون تست، build یکسان و استقرار خودکار با امکان rollback خطای انسانی را کم می کند. بعد از آن، اضافه کردن تست به پایپ لاین برای تیم ساده تر می شود.

جست وجوهای مرتبط

  • GitLab CI/CD
  • Jenkins pipeline
  • ArgoCD
  • CI/CD pipeline with GitLab
  • GitLab CI/CD variables
  • ArgoCD Helm

استعلام

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

چند خط درباره وضعیت فعلی و چیزی که می خواهید بنویسید. یک مهندس خودش تماس می گیرد، نه واحد فروش.

  1. 01درخواست را می خوانیم و اگر ابهامی بود تماس می گیریم.
  2. 02در صورت نیاز، بررسی اولیه ریموت یا بازدید انجام می شود.
  3. 03پیشنهاد مکتوب با دامنه کار، زمان بندی و هزینه می فرستیم.

اطلاعات شما فقط برای پاسخ به همین درخواست استفاده می شود.