واحد 2 / 11

طراحی خطوط لوله CI/CD با هوش مصنوعی: GitHub Actions و GitLab CI

سود:

  • توانایی درک مفهوم CI/CD، آناتومی خط لوله (ماشه، کار، گام، دونده، مصنوع) و تفاوت‌های بین GitHub Actions و GitLab CI و داشتن هوش مصنوعی خطوط لوله را با زمینه مناسب تولید می‌کند.
  • امکان بررسی و ایمن سازی مراجع مخفی، مجوزها و وجود اجزای فراخوان در خط لوله تولید شده توسط هوش مصنوعی
  • امکان به کارگیری اصول عدم نوشتن اسرار در متن ساده، اعطای حداقل مجوز، و کنترل نگه داشتن استقرار با جدا کردن آن از CI

قلب نرم افزار مدرن خط لوله خودکاری است که از طریق آن کد از رایانه توسعه دهنده خارج می شود تا زمانی که به طور ایمن به دست مشتری برسد. این لوله CI/CD نام دارد. CI (ادغام پیوسته) کامپایل و آزمایش خودکار هر تغییر کد است. هدف آن این است که قبل از اینکه توسعه دهنده صفحه کلید را ترک کند، یک باگ را پیدا کند. CD (تحویل/ استقرار مداوم) آماده سازی خودکار یا حتی انتشار کد آزمایش شده است. خط لوله CI/CD یک فایل پیکربندی است که این مراحل را به ترتیب تعریف می کند - معمولاً در YAML (فرمت متن پیکربندی قابل خواندن برای انسان) نوشته می شود.

نوشتن این فایل های YAML با دست خسته کننده، پرمخاطب و مستعد خطا است. اگر تورفتگی به اندازه یک فاصله بلغزد، کل خط لوله می شکند. اینجاست که هوش مصنوعی وارد می شود: با زمینه مناسب، در عرض چند ثانیه یک پیش نویس کار تولید می کند. اما وظیفه شما این است که بفهمید و تأیید کنید که هر مرحله تولید شده چه کاری انجام می دهد - زیرا این لوله ای است که کد شما را به تولید می رساند.

آناتومی خط لوله CI/CD

هر خط لوله از چندین مفهوم اساسی تشکیل شده است. شما نمی توانید خروجی هوش مصنوعی را بدون دانستن این موارد کنترل کنید:

  • ماشه: چه چیزی خط لوله را شروع می کند؟ معمولاً یک فشار به یک شعبه، یک درخواست کشش (درخواست ادغام) یا یک برنامه زمانبندی.
  • شغل: واحد منطقی که یک سری مراحل را اجرا می کند. به عنوان مثال "تست"، "ساخت"، "استقرار".
  • مرحله: یک فرمان یا عمل واحد در یک کار.
  • Runner: ماشین مجازی یا ظرفی که کارها روی آن اجرا می شوند.
  • Artifact: خروجی تولید شده توسط یک کار و استفاده از کارهای بعدی (مثلاً یک فایل کامپایل شده).
  • Secret: اطلاعات محرمانه ای که Pipeline از آنها استفاده می کند اما نباید به صورت متن ساده در مخزن باقی بماند.

GitHub Actions این تعریف را در فایل‌های .github/workflows/*.yml نگه می‌دارد. واحد گردش کار → شغل → سلسله مراتب مرحله است. از طرف دیگر، GitLab CI از ساختار → job در فایل .gitlab-ci.yml استفاده می کند. هوش مصنوعی هر دو نحو را می شناسد، اما شما باید به صراحت بگویید کدام یک را می خواهید.

نکته: هنگام درخواست از AI برای خطوط لوله، همیشه موارد زیر را مشخص کنید: پلتفرم (GitHub Actions یا GitLab CI)، زبان/فریم ورک (Node، دات نت، پایتون...)، ماشه، و اینکه آیا مستقر خواهد شد یا خیر. این چهار قطعه اطلاعات مفید بودن خروجی را دوچندان می کند.

گام به گام: طراحی خط لوله با هوش مصنوعی

  1. هدف را روشن کنید. مانند «تست‌ها را روی فشار به اصلی، تصویر ساختن اجرا کنید، اما فقط زمانی که برچسب پرتاب می‌شود، اجرا می‌شود».
  2. اسکلت را تولید کنید. گردش کار اولیه را از هوش مصنوعی بخواهید.
  3. مراحل را بخوانید و درک کنید. بررسی کنید که هر خط اجرا و استفاده چه کاری انجام می دهد.
  4. مراجع مخفی را بررسی کنید. آیا رازها با ${{ secrets.NAME }} نامیده می شوند یا در کد تعبیه شده اند؟
  5. آن را به صورت محلی/CI امتحان کنید. آن را روی یک مخزن کوچک آزمایشی اجرا کنید، رفتار سبز-قرمز (عقب شکست) را ببینید.
  6. به تدریج گسترش دهید. ابتدا فقط CI (تست) را اضافه کنید، سپس بسازید، آخرین اضافه کردن استقرار.

امنیت: راز و اجازه در خط لوله

CI/CD یکی از مکان هایی است که اسرار بیشتر در آن درز می کند. سه قانون طلایی:

  1. هرگز اسرار را به صورت متن ساده در YAML ننویسید. از مخزن مخفی پلتفرم (GitHub Secrets، GitLab CI/CD Variables) استفاده کنید و آن را با ${{ secrets.X }} فراخوانی کنید.
  2. کمترین امتیاز توکنی که به Pipeline می‌دهید، تنها به اندازه‌ای که لازم است دارای اعتبار است. این را با مجوزها محدود کنید: در GitHub Actions مسدود کنید.
  3. راز را روی گزارش فشار ندهید. خطوطی مانند echo $TOKEN راز را در لاگ آشکار می کند. پلتفرم ها ماسک می کنند، اما مراقب باشید.
احتیاط: برای راحتی، AI گاهی اوقات مقادیر جاسازی شده مانند رمز عبور: 123456 یا مجوزهای بیش از حد گسترده: نوشتن همه را در خطوط لوله نمونه قرار می دهد. همیشه این را اصلاح کنید: تغییر مخفی به مرجع، اجازه کوچک کردن.

نمودار مقایسه

مفهوم

اقدامات GitHub

GitLab CI

فایل پیکربندی

github/workflows/*.yml

.gitlab-ci.yml

واحد ساختمان

گردش کار → کار → مرحله

مرحله ← شغل

ماشه

ده:

قوانین: / فقط:

راز احضار

${{ Secrets.NAME }}

$NAME (متغیرهای CI/CD)

جزء آماده

موارد استفاده: action@v4

شامل: /قالب

دونده

اجرا می شود:

برچسب ها:

سه کیف کوچک

مورد 1 - به 6 ساعت و 40 دقیقه کاهش یافت. تیمی می‌خواست فرآیند دستی ساخت-استقرار آزمایشی خود را خودکار کند، اما هیچ‌کس با YAML آشنایی نداشت. آنها YZ را به عنوان "پروژه Node.js، GitHub Actions، تست npm و ساخت npm در فشار به اصلی، فقط در تگ v* مستقر می‌کنند" توصیف کردند. هوش مصنوعی یک اسکلت کاری از 40 خط تولید کرد. تیم هر مرحله را تأیید کرد و در 40 دقیقه به صورت زنده پخش شد. اگر با دست نوشته بودند، کار یک روزه بود.

مورد 2 - احراز هویت یک آسیب پذیری امنیتی را شناسایی کرد. یک مهندس از هوش مصنوعی خواست تا گردش کار را گسترش دهد. خروجی شامل مجوزها بود: write-all - به این معنی که توکن می توانست در مخزن، بسته ها و همه چیز بنویسد. مهندس متوجه این موضوع شد و با مجوزها آن را محدود کرد: { contents: read, packages: write }. این خطر خطر یک وابستگی ربوده شده را که جایگزین کل مخزن شود، از بین برد.

مورد 3 - عمل توهم آور. یک تیم کاربردهای پیشنهادی هوش مصنوعی را اجرا کرد: خط اقدامات/deploy-to-aws@v3. چنین اقدام رسمی وجود نداشت، هوش مصنوعی نام را ساخت. خط لوله با "اقدام یافت نشد" منفجر شد. درس: در Marketplace بررسی کنید که هر جزء فراخوانی شده با استفاده از: در واقع وجود دارد.

چهار قالب قابل کپی

1) گردش کار پایه CI:

یک گردش کار CI برای GitHub Actions بنویسید. پروژه: [LANGUAGE/FRAMEWORK]. Trigger: فشار و کشش درخواست به شعبه اصلی. مراحل: نصب وابستگی ها، اجرای تست ها، اجرای lint. NO Deploy.Runner ubuntu-latest. هیچ رازی لازم نیست YAML را حاشیه نویسی کنید.

2) گردش کار سی دی مستقر (ایمن):

گردش کار استقرار را برای [PLATFORM] بنویسید. فقط باید روی تگ 'v*' کار کند. هدف: [MEDIA/CLOUD]. قوانین: - هرگز اسرار را با متن ساده ننویسید، آنها را با ${{ Secrets صدا کنید.

3) خط لوله موجود را شرح دهید:

خط به خط خط لوله [PLATFORM] زیر را توصیف کنید: هر کار چه کاری انجام می دهد، به چه ترتیبی اجرا می شود، از چه رازی استفاده می کند، و دو نقطه خطرناک آن کدامند؟ در نهایت، 3 بهبود را پیشنهاد کنید. خط لوله: [YAML CONTENT]

4) افزایش سرعت خط لوله:

خط لوله CI زیر به کندی اجرا می شود (مدت زمان: [X دقیقه]). استفاده از حافظه پنهان، کارهای موازی و مراحل غیر ضروری را بررسی کنید. 5 پیشنهاد واقعی و قابل اجرا برای شتاب ارائه دهید و تأثیر تخمینی هر کدام را یادداشت کنید. خط لوله: [YAML]

اعلان ضعیف / اعلان قوی

ضعیف: "Write GitHub Actions گردش کار."

نتیجه: مشخص نیست کدام زبان، کدام محرک، آیا استقرار وجود دارد یا خیر. هوش مصنوعی یک نمونه Node عمومی را ارائه می دهد، احتمالاً با پروژه شما مطابقت ندارد و می تواند رمز راز را رمزگذاری کند.

قوی: "رویت کاری GitHub Actions را بنویسید. پروژه Python 3.12، اجرای pytest + ruff در درخواست کشش و فشار اصلی؛ NO Deploy؛ سرعت بخشیدن به وابستگی ها با حافظه پنهان پیپ؛ بدون نیاز به اسرار. YAML را با نظرات صادر کنید."

تفاوت: اعلان دوم زبان، ماشه، دامنه (بدون استقرار)، انتظارات عملکرد و محدودیت امنیتی را می دهد. The output works directly.

اشتباهات رایج

  • جاسازی راز در YAML. رمز عبور/توکن متن ساده رایج ترین آسیب پذیری CI است.
  • مجوز بیش از حد گسترده به جای نوشتن همه، حداقل مجوز لازم را بدهید.
  • تکیه بر عمل/الگوی ناموجود. بررسی استفاده های ساخته شده توسط هوش مصنوعی: خطوط در بازار.
  • گیج شدن Deploy با CI. تست می تواند در هر فشار اجرا شود، اما استقرار باید کنترل و تایید شود.
  • عدم استفاده از کش نصب وابستگی ها از ابتدا در هر اجرا سرعت خط لوله را چند دقیقه کاهش می دهد.
  • اولین گردش کار را مستقیماً در مخزن اصلی امتحان کنید. ابتدا آن را در یک مخزن آزمایشی اجرا کنید.

به طور خلاصه

خطوط لوله CI/CD لوله های خودکاری هستند که کد را به طور ایمن به تولید انتقال می دهند و با YAML تعریف می شوند. هوش مصنوعی به سرعت طرح‌های کاری را برای GitHub Actions و GitLab CI تولید می‌کند – اما باید در مورد پلتفرم، زبان، راه‌اندازی و دامنه استقرار شفاف باشید. سه قانون در امنیت وجود دارد: تماس اسرار با مرجع، اعطای حداقل امتیاز، عدم چاپ اسرار در گزارش. این مسئولیت شماست که تأیید کنید که هر کدام از اجزای:/include: واقعاً وجود دارد و هر مرحله چه کاری انجام می دهد.

وظیفه کاربردی

یک پروژه نمونه ساده را انتخاب کنید (حتی یک "سلام جهان" به زبان شما این کار را می کند). از هوش مصنوعی بخواهید یک گردش کار با الگوی «جریان کاری پایه CI» در بالا ایجاد کند. سپس: (1) با کلمات خود بنویسید که هر مرحله چه کاری انجام می دهد. (2) بررسی کنید که هیچ رازی جاسازی نشده و مجوزها محدود هستند. (3) در صورت امکان، آن را در یک مخزن آزمایشی اجرا کنید و رفتار قرمز-سبز را مشاهده کنید.

چک لیست

  • [ ] من پلتفرم، زبان/چارچوب، ماشه و دامنه گسترش را به درخواست خود اضافه کردم.
  • [ ] می دانم که هر کار و مرحله در YAML تولید شده چه می کند.
  • [ ] هیچ رازی متن ساده نیست. همه ${{ secrets.X }} / متغیر CI.
  • [ ] من مجوزها را به حداقل اختیار محدود کردم.
  • [ ] من تأیید کردم که همه اقدامات/الگوهای نامیده شده واقعاً وجود دارند.
  • [ ] من مرحله استقرار را با تأیید/محافظت کنترل کردم.