Добивки:
- Способност да се разбере концептот 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…), активирач и дали ќе биде распореден. Овие четири информации ја удвојуваат корисноста на излезот.
Чекор по чекор: Дизајнирање на цевковод со вештачка интелигенција
- Разјаснете ја целта. Како „изврши тестови при притискање до главното, градење на сликата, но распореди само кога ознаката е фрлена“.
- Нека се произведе скелетот. Прашајте ја вештачката интелигенција за основниот работен тек.
- Прочитајте и разберете ги чекорите. Потврдете што прави секоја линија за извршување и употреба.
- Проверете ги Тајните референци. Дали тајните се нарекуваат со ${{ secrets.NAME }} или се вградени во кодот?
- Пробајте го локално/CI. Вклучете го на мало складиште за тестирање, видете го црвено-зеленото однесување (неуспешно поминување).
- Проширете постепено. Прво само додадете CI (тест), потоа изградете, последно додадете распоредување.
Безбедност: тајна и дозвола во нафтоводот
CI/CD е едно од местата каде што најмногу протекуваат тајни. Три златни правила:
- Никогаш не пишувајте тајни во обичен текст во YAML. Користете го тајното складиште на платформата (GitHub Secrets, GitLab CI/CD Variables) и повикајте го со ${{ secrets.X }}.
- Најмалата привилегија. Токенот што ќе го дадете на Pipeline ќе има само онолку овластувања колку што е потребно. Намалете го ова со дозволите: блокирајте во GitHub Actions.
- Не притискајте тајна на дневникот. Линиите како 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 променлива.
- [ ] Ги намалив дозволите на минимум авторитет.
- [ ] Потврдив дека сите наречени дејства/шаблони навистина постојат.
- [ ] Го направив чекорот на распоредување контролиран со одобрение/заштита.