Единица 2 / 11

Дизајнирање CI/CD Pipelines со вештачка интелигенција: GitHub Actions и GitLab CI

Добивки:

  • Способност да се разбере концептот CI/CD, анатомијата на цевководот (активирање, работа, чекор, тркач, артефакт) и разликите помеѓу GitHub Actions и GitLab CI и вештачката интелигенција произведува цевководи со правилен контекст
  • Способност за проверка и обезбедување тајни референци, дозволи и постоење на наречени компоненти во нафтоводот произведени од вештачка интелигенција
  • Способност да се применат принципите на непишување тајни во обичен текст, давање минимално овластување и контролирање на распоредувањето со негово одвојување од CI

Срцето на современиот софтвер е автоматизираниот цевковод низ кој кодот го напушта компјутерот на развивачот додека безбедно не стигне до клиентот. Оваа цевка се нарекува CI/CD. CI (Continuous Integration) е автоматско компилирање и тестирање на секоја промена на кодот; Неговата цел е да фати грешка пред развивачот дури и да ја напушти тастатурата. ЦД (Континуирана испорака/распоредување) е автоматска подготовка или дури и ослободување на тестираниот код. CI/CD цевководот е конфигурациска датотека што ги дефинира овие чекори по редослед - обично напишана во YAML (конфигурациски текстуален формат што може да се чита од човек).

Рачното пишување на овие YAML-датотеки е досадно, опширно и склоно кон грешки; Ако вдлабнувањето се лизне за еден простор, целиот цевковод се кине. Тука влегува вештачката интелигенција: со вистинскиот контекст, таа произведува работен нацрт за неколку секунди. Но, ваша задача е да разберете и да потврдите што прави секој генериран чекор - затоа што ова е цевката што го носи вашиот код до продукција.

Анатомија на цевководот CI/CD

Секој гасовод се состои од неколку основни концепти. Не можете да го контролирате излезот со вештачка интелигенција без да ги знаете овие:

  • Активирање: Што го започнува гасоводот? Обично притискање до филијала, барање за повлекување (барање за спојување) или распоред.
  • Работа: Логичка единица која извршува низа чекори; на пример „тест“, „изградба“, „распоредување“.
  • Чекор: Една команда или дејство во рамките на една работа.
  • Runner: виртуелната машина или контејнер на кој работат работните места.
  • Артефакт: Излезот произведен од една задача и користен од следните задачи (на пример, компајлирана датотека).
  • Тајна: доверливи информации што ги користи Pipeline, но не треба да останат во обичен текст во складиштето.

GitHub Actions ја задржува оваа дефиниција во датотеките .github/workflows/*.yml; Единицата е работен тек → работа → хиерархија на чекори. GitLab CI, од друга страна, ја користи структурата на фаза → работа во датотеката .gitlab-ci.yml. Вештачката интелигенција ги знае двете синтакса, но мора експлицитно да кажете која ја сакате.

Совет: кога прашувате вештачка интелигенција за цевководи, секогаш наведете: платформа (GitHub Actions или GitLab CI), јазик/рамка (Јазол, .NET, Python…), активирач и дали ќе биде распореден. Овие четири информации ја удвојуваат корисноста на излезот.

Чекор по чекор: Дизајнирање на цевковод со вештачка интелигенција

  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 ја откриваат тајната во дневникот. Платформи маски, но бидете внимателни и вие.
Внимание: За погодност, вештачката интелигенција понекогаш става вградени вредности како лозинка: 123456 или премногу широки дозволи: запишете ги сите во цевководи за примероци. Секогаш поправајте го ова: сменете ја тајната во референца, колапсирајте ја дозволата.

споредбена табела

концепт

Акции на GitHub

GitLab CI

Конфигурациска датотека

.github/workflows/*.yml

.gitlab-ci.yml

градежна единица

работен тек → работа → чекор

фаза → работа

активирањето

десет:

правила: / само:

Повикај тајна

${{ тајни.NAME }}

$NAME (променливи CI/CD)

Подготвена компонента

користи: action@v4

вклучуваат: /шаблон

тркач

работи на:

ознаки:

три мини футроли

Случај 1 - Намалено на 6 часа и 40 минути. Еден тим сакаше да го автоматизира нивниот рачен процес на тестирање-изградба-распоредување, но никој не беше запознаен со YAML. Тие го опишаа YZ како „проект Node.js, GitHub Actions, npm тест и npm build in push to main, распоредени само во ознаката v*“. ВИ произведе работен скелет од 40 линии; Тимот го проверуваше секој чекор и излезе во живо за 40 минути. Да го пишуваа на рака, ќе беше еден ден работа.

Случај 2 - Автентикацијата откри безбедносна ранливост. Инженер побара од вештачката интелигенција да го распореди работниот тек. Излезот вклучуваше дозволи: write-all - што значи дека токенот може да пишува во складиштето, пакетите, сè. Инженерот го забележал ова и го стеснил со дозволи: { contents: read, packages: write }. Ова го елиминираше ризикот од киднапирана зависност што ќе го замени целото складиште.

Случај 3 - Халуцинаторно дејство. Еден тим ја водеше употребата предложени од вештачката интелигенција: линијата дејства/распоред-to-aws@v3; Немаше таква официјална акција, вештачката интелигенција го измисли името. Експлодираше гасовод со „акција не е пронајдена“. Лекција: Потврдете на Marketplace дека секоја компонента повикана со користи: всушност постои.

Четири шаблони за копирање

1) Основен работен тек на CI:

Напишете CI работен тек за GitHub Actions. Проект: [LANGUAGE/RAMEWORK]. Активирање: туркајте и повлечете барање до главната гранка. Чекори: инсталирајте зависности, извршете тестови, стартувајте lint. НЕ Deploy.Runner ubuntu-latest. Не е потребна тајна. Забелешка YAML.

2) Распореден работен тек на ЦД (безбедно):

Напишете го работниот тек за распоредување за [PLATFORM]. Треба да работи само на ознаката „v*“. Цел: [МЕДИУМИ/ОБЛАК]. Правила: - НИКОГАШ не пишувајте тајни во обичен текст, нарекувајте ги со ${{ тајни.

3) Опишете го постојниот гасовод:

Опишете ја следнава [ПЛАТФОРМА] линија по ред: што прави секоја работа, по кој редослед работи, која тајна ја користи и кои се нејзините две најризични точки? Конечно, предложете 3 подобрувања. Цевковод: [СОДРЖИНА НА YAML]

4) Забрзување на гасоводот:

Следниот CI гасовод работи бавно (времетраење: [X мин]). Проверете дали користите кеш, паралелни работи и непотребни чекори. Дајте 5 конкретни предлози за забрзување и запишете го проценетото влијание на секој од нив. Гасовод: [YAML]

Слаб промпт / Силен промпт

Слаб: „Write GitHub Actions workflow“.

Резултат: не е јасно кој јазик, кој активирач, дали има распоредување; Вештачката интелигенција дава генерички пример на јазол, веројатно нема да одговара на вашиот проект и може да ја кодира тајната.

Силно: "Напишете го работниот тек на GitHub Actions. Python 3.12 проект, извршете pytest + ruff во барањето за повлекување и главното притискање; НЕМА распоредување; забрзајте ги зависностите со кешот на пип; не се потребни тајни. Извезете YAML со коментари."

Разлика: вториот повик ги дава јазикот, активирањето, опсегот (без распоредување), очекувањата за изведба и безбедносните ограничувања. Излезот работи директно.

Вообичаени грешки

  • Вградување на тајната во YAML. Лозинката/токенот за обичен текст е најчестата ранливост на CI.
  • Премногу широка дозвола. Дајте ја потребната минимална дозвола наместо запишување на сите.
  • Потпирајќи се на непостоечко дејство/шаблон. Потврдете ја употребата на вештачката интелигенција: линиите во Marketplace.
  • Збунувачки Deploy со CI. Тестот може да се изврши при секое притискање, но распоредувањето мора да биде контролирано и одобрено.
  • Не користи кеш. Инсталирањето на зависности од нула на секое возење го забавува гасоводот за минути.
  • Пробајте го првиот работен тек директно во главното складиште. Прво стартувајте го на тест складиште.

Сумирано

CI/CD цевководи се автоматизирани цевки кои безбедно го преместуваат кодот во производство и се дефинирани со YAML. Вештачката интелигенција брзо создава работни планови за GitHub Actions и GitLab CI - но треба да бидете јасни за платформата, јазикот, активирањето и опсегот на распоредување. Постојат три правила во безбедноста: повикување тајни со референца, доделување минимални привилегии, не печатење тајни во дневникот. Ваша одговорност е да потврдите дека секоја користи:/вклучи: компонента всушност постои и што прави секој чекор.

Задача за апликација

Изберете едноставен примерок проект (дури и „здраво свет“ на вашиот јазик ќе го стори тоа). Вештачката интелигенција нека произведе работен тек со шаблонот „Основен CI работни тек“ погоре. Потоа: (1) напишете со свои зборови што прави секој чекор; (2) потврди дека не се вградени никакви тајни и дека дозволите се тесни; (3) Ако е можно, пуштете го во резервоар за тестирање и набљудувајте го црвено-зеленото однесување.

листа за проверка

  • [ ] Ги додадов платформата, јазикот/рамката, активирањето и опсегот на распоредување на мојот потсетник.
  • [ ] Разбирам што прави секоја работа и чекор во генерираната YAML.
  • [ ] Ниту една тајна не е обичен текст; сите ${{ тајни.X }} / CI променлива.
  • [ ] Ги намалив дозволите на минимум авторитет.
  • [ ] Потврдив дека сите наречени дејства/шаблони навистина постојат.
  • [ ] Го направив чекорот на распоредување контролиран со одобрение/заштита.