Jednostka 2 / 11

Projektowanie rurociągów CI/CD za pomocą sztucznej inteligencji: GitHub Actions i GitLab CI

Zyski:

  • Umiejętność zrozumienia koncepcji CI/CD, anatomii potoku (wyzwalacz, zadanie, krok, element uruchamiający, artefakt) i różnic między GitHub Actions a GitLab CI oraz umiejętność tworzenia potoków przez sztuczną inteligencję we właściwym kontekście
  • Możliwość sprawdzania i zabezpieczania tajnych referencji, uprawnień i istnienia wywoływanych komponentów w rurociągu wytwarzanym przez sztuczną inteligencję
  • Umiejętność stosowania zasad niepisania sekretów zwykłym tekstem, udzielania minimalnych autoryzacji i kontrolowania wdrożenia poprzez oddzielenie go od CI

Sercem nowoczesnego oprogramowania jest zautomatyzowany potok, przez który kod opuszcza komputer programisty, aż bezpiecznie dotrze do klienta. Ta rura nazywa się CI/CD. CI (Continious Integration) to automatyczna kompilacja i testowanie każdej zmiany kodu; Jego celem jest wyłapanie błędu, zanim programista opuści klawiaturę. CD (Continious Delivery/Deployment) to automatyczne przygotowanie lub nawet wydanie testowanego kodu. Potok CI/CD to plik konfiguracyjny, który definiuje kolejność tych kroków — zwykle zapisywany w YAML (format tekstu konfiguracyjnego czytelnego dla człowieka).

Ręczne pisanie tych plików YAML jest żmudne, szczegółowe i podatne na błędy; Jeśli wcięcie przesunie się o jedno miejsce, cały rurociąg pęknie. I tu właśnie pojawia się sztuczna inteligencja: w odpowiednim kontekście w ciągu kilku sekund tworzy wersję roboczą. Ale Twoim zadaniem jest zrozumienie i sprawdzenie, co robi każdy wygenerowany krok — ponieważ jest to potok, który przenosi Twój kod do prod.

Anatomia rurociągu CI/CD

Każdy potok składa się z kilku podstawowych pojęć. Nie możesz kontrolować wyników AI, nie znając następujących kwestii:

  • Wyzwalacz: Co uruchamia rurociąg? Zwykle push do gałęzi, żądanie ściągnięcia (żądanie połączenia) lub harmonogram.
  • Zadanie: Jednostka logiczna wykonująca serię kroków; na przykład „testuj”, „kompiluj”, „wdrażaj”.
  • Krok: Pojedyncze polecenie lub akcja w ramach zadania.
  • Runner: maszyna wirtualna lub kontener, na którym uruchamiane są zadania.
  • Artefakt: Dane wyjściowe wytworzone przez jedno zadanie i wykorzystywane przez kolejne zadania (na przykład skompilowany plik).
  • Tajne: Poufne informacje, których używa Pipeline, ale nie powinny pozostać w repozytorium w postaci zwykłego tekstu.

GitHub Actions przechowuje tę definicję w plikach .github/workflows/*.yml; Jednostką jest przepływ pracy → zadanie → hierarchia kroków. GitLab CI natomiast wykorzystuje strukturę stage → job w pliku .gitlab-ci.yml. Sztuczna inteligencja zna obie składnie, ale musisz wyraźnie powiedzieć, którą chcesz.

Wskazówka: prosząc sztuczną inteligencję o potoki, zawsze określaj: platformę (GitHub Actions lub GitLab CI), język/framework (Node, .NET, Python…), wyzwalacz i to, czy zostanie wdrożony. Te cztery informacje podwajają użyteczność wyników.

Krok po kroku: projektowanie rurociągu za pomocą sztucznej inteligencji

  1. Wyjaśnij cel. Podobnie jak „uruchom testy przy przesyłaniu do głównego, zbuduj obraz, ale wdrażaj tylko po rzuceniu tagu”.
  2. Każ wyprodukować szkielet. Poproś sztuczną inteligencję o podstawowy przepływ pracy.
  3. Przeczytaj i zrozum kroki. Sprawdź, co robi każda linia run i uses.
  4. Sprawdź tajne referencje. Czy klucze tajne są wywoływane za pomocą ${{ secrets.NAME }}, czy są osadzone w kodzie?
  5. Wypróbuj lokalnie/CI. Uruchom go w małym repozytorium testowym, zobacz zachowanie czerwono-zielone (przejście awaryjne).
  6. Rozwijaj się stopniowo. Najpierw po prostu dodaj CI (test), następnie zbuduj, a na koniec dodaj wdrożenie.

Bezpieczeństwo: tajemnica i pozwolenie w przygotowaniu

CI/CD to jedno z miejsc, w których tajemnice wyciekają najczęściej. Trzy złote zasady:

  1. Nigdy nie zapisuj sekretów zwykłym tekstem w YAML. Skorzystaj z tajnego repozytorium platformy (GitHub Secrets, GitLab CI/CD Variables) i wywołaj je za pomocą ${{ secrets.X }}.
  2. Najmniejszy przywilej. Token, który przekażesz Pipeline, będzie miał tylko tyle uprawnień, ile jest konieczne. Zawęź to za pomocą uprawnień: blok w akcjach GitHub.
  3. Nie naciskaj sekretu w dzienniku. Linie takie jak echo $TOKEN ujawniają sekret w dzienniku. Platformy maskują, ale też bądź ostrożny.
Uwaga: Dla wygody sztuczna inteligencja czasami umieszcza w przykładowych potokach osadzone wartości, takie jak hasło: 123456 lub zbyt szerokie uprawnienia: zapisz wszystko. Zawsze napraw to: zmień sekret na odwołanie, zwiń uprawnienia.

tabela porównawcza

koncepcja

Akcje GitHuba

GitLab CI

Plik konfiguracyjny

.github/workflow/*.yml

.gitlab-ci.yml

jednostka budowlana

przepływ pracy → zadanie → krok

etap → praca

spust

dziesięć:

zasady: / tylko:

Przywołaj sekret

${{tajemnice.NAZWA }}

$NAME (zmienne CI/CD)

Gotowy komponent

używa: akcja@v4

obejmują: /szablon

biegacz

działa:

tagi:

trzy mini etui

Przypadek 1 – Skrócony do 6 godzin i 40 minut. Zespół chciał zautomatyzować ręczny proces tworzenia testów, budowania i wdrażania, ale nikt nie był zaznajomiony z YAML. Opisali YZ jako „projekt Node.js, akcje GitHub, test npm i kompilację npm w trybie push to main, wdrażaj tylko w tagu v*”. AI stworzyła działający szkielet składający się z 40 linii; Zespół sprawdzał każdy krok i uruchomił transmisję w ciągu 40 minut. Gdyby napisali to ręcznie, byłaby to całodzienna praca.

Przypadek 2 — podczas uwierzytelniania wykryto lukę w zabezpieczeniach. Inżynier poprosił sztuczną inteligencję o wdrożenie przepływu pracy. Dane wyjściowe zawierały uprawnienia: write-all — co oznacza, że ​​token może zapisywać w repozytorium, pakietach, wszystkim. Inżynier zauważył to i zawęził go uprawnieniami: {treść: odczyt, pakiety: zapis }. Wyeliminowało to ryzyko, że przejęta zależność zastąpi całe repozytorium.

Przypadek 3 — Działanie halucynacyjne. Jeden zespół uruchomił zastosowania sugerowane przez sztuczną inteligencję: linia action/deploy-to-aws@v3; Nie było takiej oficjalnej akcji, nazwę wymyśliła AI. Rurociąg eksplodował i wyświetlał się komunikat „Nie znaleziono działania”. Lekcja: Sprawdź w Marketplace, czy każdy komponent wywołany funkcją uses: rzeczywiście istnieje.

Cztery szablony do kopiowania

1) Podstawowy przepływ pracy CI:

Napisz przepływ pracy CI dla akcji GitHub. Projekt: [JĘZYK/FRAMEWORK].Trigger: żądanie push i pull do głównej gałęzi. Kroki: zainstaluj zależności, uruchom testy, uruchom lint. NIE Wdróż.Runner Ubuntu-latest. Nie jest wymagana żadna tajemnica. Adnotuj YAML.

2) Przepływ pracy na wdrożonym dysku CD (bezpieczny):

Napisz przepływ pracy wdrażania dla [PLATFORM]. Powinno działać tylko na tagu „v*”. Cel: [MEDIA/CHMURA]. Zasady: - NIGDY nie zapisuj sekretów zwykłym tekstem, wywoływaj je za pomocą ${{ secrets.

3) Opisz istniejący rurociąg:

Opisz następujący potok [PLATFORMA] po linii: co robi każde zadanie, w jakiej kolejności jest uruchamiane, jakiego sekretu używa i jakie są jego dwa najbardziej ryzykowne punkty? Na koniec zasugeruj 3 ulepszenia.Pipeline: [YAML CONTENT]

4) Przyspieszenie rurociągu:

Następujący potok CI działa powoli (czas trwania: [X min]). Sprawdź użycie pamięci podręcznej, zadania równoległe i niepotrzebne kroki. Podaj 5 konkretnych, praktycznych sugestii dotyczących przyspieszenia i zapisz szacunkowy wpływ każdej z nich. Potok: [YAML]

Słaba zachęta/silna zachęta

Słabe: „Pisanie przepływu pracy akcji GitHub”.

Wynik: nie jest jasne, który język, który wyzwalacz i czy istnieje wdrożenie; Sztuczna inteligencja udostępnia ogólną instancję węzła, prawdopodobnie nie będzie pasować do Twojego projektu i może zakodować na stałe sekret.

Mocne: „Napisz przepływ pracy w GitHub Actions. Projekt w Pythonie 3.12, uruchom pytest + ruff w żądaniu ściągnięcia i głównym wypychaniu; NIE wdrażaj; przyspiesz zależności za pomocą pamięci podręcznej pip; nie są wymagane żadne sekrety. Eksportuj YAML z komentarzami”.

Różnica: drugi monit podaje język, wyzwalacz, zakres (bez wdrożenia), oczekiwaną wydajność i ograniczenia bezpieczeństwa. Wyjście działa bezpośrednio.

Typowe błędy

  • Osadzanie sekretu w YAML. Hasło/token w postaci zwykłego tekstu to najczęstsza luka w zabezpieczeniach CI.
  • Zbyt szerokie zezwolenie. Nadaj minimalne wymagane uprawnienia zamiast zapisywać wszystko.
  • Poleganie na nieistniejącej akcji/szablonie. Sprawdź zastosowania sztucznej inteligencji: linie w Marketplace.
  • Mylące wdrażanie z CI. Test można uruchomić przy każdym naciśnięciu, ale wdrożenie musi być kontrolowane i zatwierdzone.
  • Nie korzystam z pamięci podręcznej. Instalowanie zależności od podstaw przy każdym uruchomieniu spowalnia potok o kilka minut.
  • Wypróbowanie pierwszego przepływu pracy bezpośrednio w głównym repozytorium. Najpierw uruchom go w repozytorium testowym.

Podsumowując

Potoki CI/CD to zautomatyzowane potoki, które bezpiecznie przenoszą kod do produktu i są definiowane za pomocą YAML. Sztuczna inteligencja szybko tworzy działające plany GitHub Actions i GitLab CI — ale musisz mieć jasność co do platformy, języka, wyzwalacza i zakresu wdrożenia. W bezpieczeństwie obowiązują trzy zasady: wywoływaj sekrety przez odniesienie, przyznaj minimalne uprawnienia, nie drukuj sekretów w dzienniku. Twoim obowiązkiem jest sprawdzenie, czy każdy komponent using:/include: faktycznie istnieje i co robi każdy krok.

Zadanie aplikacji

Wybierz prosty przykładowy projekt (wystarczy nawet „witaj świecie” w Twoim języku). Poproś sztuczną inteligencję o utworzenie przepływu pracy za pomocą powyższego szablonu „Podstawowy przepływ pracy CI”. Następnie: (1) napisz własnymi słowami, co robi każdy krok; (2) sprawdź, czy nie są osadzone żadne sekrety, a uprawnienia są wąskie; (3) Jeśli to możliwe, przepuść go w zbiorniku testowym i obserwuj zachowanie czerwono-zielone.

lista kontrolna

  • [ ] Do mojego znaku zachęty dodałem platformę, język/framework, wyzwalacz i zakres wdrażania.
  • [ ] Rozumiem, co robi każde zadanie i krok w wygenerowanym YAML.
  • [ ] Żaden sekret nie jest zwykłym tekstem; wszystkie ${{ secrets.X }} / zmienna CI.
  • [ ] Zawęziłem uprawnienia do uprawnień minimalnych.
  • [ ] Sprawdziłem, że wszystkie wywołane akcje/szablony rzeczywiście istnieją.
  • [ ] Kontrolowałem etap wdrażania za pomocą zatwierdzenia/ochrony.