Eenheid 2 / 11

CI/CD-pijplijnen ontwerpen met kunstmatige intelligentie: GitHub-acties en GitLab CI

Winst:

  • Vermogen om het CI/CD-concept, de anatomie van de pijplijn (trigger, job, step, runner, artefact) en de verschillen tussen GitHub Actions en GitLab CI te begrijpen en kunstmatige intelligentie pijplijnen met de juiste context te laten produceren
  • Mogelijkheid om geheime referenties, machtigingen en het bestaan van opgeroepen componenten in de pijplijn, geproduceerd door kunstmatige intelligentie, te controleren en te beveiligen
  • Mogelijkheid om de principes toe te passen van het niet schrijven van geheimen in platte tekst, het verlenen van minimale autorisatie en het gecontroleerd houden van de implementatie door deze te scheiden van CI

Het hart van moderne software is de geautomatiseerde pijplijn waarlangs code de computer van een ontwikkelaar verlaat totdat deze veilig de klant bereikt. Deze pijp heet CI/CD. CI (Continuous Integration) is het automatisch compileren en testen van elke codewijziging; Het doel is om een ​​bug op te vangen voordat de ontwikkelaar zelfs maar het toetsenbord verlaat. CD (Continuous Delivery/Deployment) is de automatische voorbereiding of zelfs vrijgave van geteste code. Een CI/CD-pijplijn is een configuratiebestand dat deze stappen in volgorde definieert, meestal geschreven in YAML (een door mensen leesbare configuratietekstindeling).

Het handmatig schrijven van deze YAML-bestanden is vervelend, uitgebreid en foutgevoelig; Als de inkeping één spatie wegglijdt, breekt de hele pijpleiding. Dit is waar AI in beeld komt: met de juiste context produceert het binnen enkele seconden een werkend concept. Maar het is jouw taak om te begrijpen en te verifiëren wat elke gegenereerde stap doet, omdat dit de pijp is die jouw code naar de productie brengt.

Anatomie van de CI/CD-pijplijn

Elke pijplijn bestaat uit verschillende basisconcepten. Je kunt de AI-uitvoer niet controleren zonder deze te kennen:

  • Trigger: Wat start de pijplijn? Meestal een push naar een filiaal, een pull-verzoek (samenvoegverzoek) of een schema.
  • Taak: Logische eenheid die een reeks stappen uitvoert; bijvoorbeeld "test", "build", "implementeren".
  • Stap: Eén opdracht of actie binnen een taak.
  • Runner: de virtuele machine of container waarop taken worden uitgevoerd.
  • Artefact: de uitvoer die door één taak wordt geproduceerd en door volgende taken wordt gebruikt (bijvoorbeeld een gecompileerd bestand).
  • Geheim: vertrouwelijke informatie die Pipeline gebruikt, maar die niet in platte tekst in de repository mag blijven staan.

GitHub Actions bewaart deze definitie in .github/workflows/*.yml bestanden; De eenheid is workflow → taak → stappenhiërarchie. GitLab CI daarentegen gebruikt de fase → taakstructuur in het bestand .gitlab-ci.yml. De AI kent beide syntaxis, maar je moet expliciet zeggen welke je wilt.

Tip: Wanneer u AI om pijplijnen vraagt, specificeer dan altijd: platform (GitHub Actions of GitLab CI), taal/framework (Node, .NET, Python…), trigger en of deze zal worden ingezet. Deze vier stukjes informatie verdubbelen de bruikbaarheid van de output.

Stap voor stap: Een pijplijn ontwerpen met AI

  1. Maak het doel duidelijk. Zoals "voer tests uit op push-to-main, bouw een image, maar implementeer deze alleen wanneer de tag wordt gegooid".
  2. Laat het skelet maken. Vraag de AI naar de basisworkflow.
  3. Lees en begrijp de stappen. Controleer wat elke run- en use-lijn doet.
  4. Controleer geheime referenties. Worden de geheimen aangeroepen met ${{ secrets.NAME }} of zijn ze ingebed in de code?
  5. Probeer het lokaal/CI. Voer het uit op een kleine testrepository, zie het rood-groene (fail-pass) gedrag.
  6. Breid geleidelijk uit. Voeg eerst gewoon CI (test) toe, bouw vervolgens en voeg als laatste implementatie toe.

Beveiliging: geheim en toestemming in voorbereiding

CI/CD is een van de plaatsen waar geheimen het meest lekken. Drie gouden regels:

  1. Schrijf geheimen nooit in platte tekst in YAML. Gebruik de geheime repository van het platform (GitHub Secrets, GitLab CI/CD Variables) en roep deze aan met ${{ secrets.X }}.
  2. Minste privilege. Het token dat u aan Pipeline geeft, heeft slechts zoveel autoriteit als nodig is. Beperk dit met de machtigingen: blokkeer in GitHub-acties.
  3. Druk niet op geheim in het logboek. Regels als echo $TOKEN onthullen het geheim in het logboek. Platforms maskeren, maar wees ook voorzichtig.
Let op: voor het gemak plaatst AI soms ingebedde waarden zoals wachtwoord: 123456 of te brede machtigingen: alles schrijven in voorbeeldpijplijnen. Los dit altijd op: wijzig geheim in referentie, toestemming samenvouwen.

vergelijkingstabel

concept

GitHub-acties

GitLab-CI

Configuratiebestand

.github/workflows/*.yml

.gitlab-ci.yml

bouweenheid

workflow → taak → stap

fase → baan

triggeren

tien:

regels: / alleen:

Roep geheim op

${{ geheimen.NAAM }}

$NAME (CI/CD-variabelen)

Klaar onderdeel

gebruikt: action@v4

omvatten: /sjabloon

loper

doorloop:

tags:

drie minikoffers

Geval 1 — Teruggebracht tot 6 uur en 40 minuten. Een team wilde hun handmatige test-build-implementatieproces automatiseren, maar niemand was bekend met YAML. Ze beschreven YZ als "Node.js-project, GitHub Actions, npm-test en npm build in push to main, alleen implementeren in v*-tag". AI produceerde een werkend skelet van 40 lijnen; Het team verifieerde elke stap en ging binnen 40 minuten live. Als ze het met de hand hadden geschreven, zou het een dagwerk zijn geweest.

Geval 2: Bij de authenticatie is een beveiligingsprobleem geconstateerd. Een ingenieur vroeg de AI om workflow in te zetten. De uitvoer omvatte machtigingen: write-all - wat betekent dat het token naar de repository, pakketten en alles kon schrijven. De ingenieur merkte dit op en beperkte het met machtigingen: {content: read, package: write }. Hierdoor werd het risico geëlimineerd dat een gekaapte afhankelijkheid de gehele repository zou vervangen.

Geval 3 – Hallucinerende actie. Eén team voerde het door AI voorgestelde gebruik uit: action/deploy-to-aws@v3 line; Er was geen dergelijke officiële actie, AI verzon de naam. De pijpleiding explodeerde met "actie niet gevonden". Les: Controleer in Marketplace of elke component die wordt aangeroepen met use: daadwerkelijk bestaat.

Vier kopieerbare sjablonen

1) Basis CI-workflow:

Schrijf een CI-workflow voor GitHub-acties. Project: [LANGUAGE/FRAMEWORK].Trigger: push- en pull-verzoek naar hoofdvertakking. Stappen: afhankelijkheden installeren, tests uitvoeren, lint uitvoeren. NEE Deploy.Runner ubuntu-nieuwste. Geen geheim vereist. Annoteer YAML.

2) Geïmplementeerde CD-workflow (beveiligd):

Schrijf de implementatieworkflow voor [PLATFORM]. Het zou alleen moeten werken met de 'v*'-tag. Doel: [MEDIA/CLOUD]. Regels: - Schrijf NOOIT geheimen in platte tekst, roep ze aan met ${{ geheimen.

3) Beschrijf de bestaande pijplijn:

Beschrijf de volgende [PLATFORM]-pijplijn regel voor regel: wat doet elke taak, in welke volgorde wordt deze uitgevoerd, welk geheim wordt er gebruikt en wat zijn de twee meest risicovolle punten? Stel ten slotte drie verbeteringen voor.Pipeline: [YAML CONTENT]

4) Versnel de pijplijn:

De volgende CI-pijplijn draait langzaam (duur: [X min]). Onderzoek het cachegebruik, parallelle taken en onnodige stappen. Geef vijf concrete, uitvoerbare versnellingssuggesties en noteer van elk de geschatte impact. Pijplijn: [YAML]

Zwakke prompt/sterke prompt

Zwak: "Schrijf GitHub-actiesworkflow."

Resultaat: onduidelijk welke taal, welke trigger, of er sprake is van een inzet; AI geeft een generieke Node-instantie, past waarschijnlijk niet in uw project en kan het geheim hardcoderen.

Sterk: "Schrijf de GitHub Actions-workflow. Python 3.12-project, voer pytest + ruff uit in pull-verzoek en hoofdpush; GEEN implementatie; versnel afhankelijkheden met pip-cache; geen geheimen vereist. Exporteer YAML met opmerkingen."

Verschil: de tweede prompt geeft de taal, trigger, bereik (geen implementatie), prestatieverwachting en beveiligingsbeperking. De uitvoer werkt direct.

Veel voorkomende fouten

  • Het geheim insluiten in YAML. Wachtwoord/token in platte tekst is de meest voorkomende CI-kwetsbaarheid.
  • Te ruime vergunning. Geef de minimaal vereiste toestemming in plaats van alles schrijven.
  • Vertrouwend op niet-bestaande actie/sjabloon. Controleer het door AI gemaakte gebruik: lijnen in Marketplace.
  • Verwarrende implementatie met CI. De test kan bij elke push worden uitgevoerd, maar de implementatie moet worden gecontroleerd en goedgekeurd.
  • Geen gebruik van cache. Als u bij elke uitvoering geheel opnieuw afhankelijkheden installeert, wordt de pijplijn met enkele minuten vertraagd.
  • Probeer de eerste workflow rechtstreeks in de hoofdrepository. Voer het eerst uit op een testrepository.

Samengevat

CI/CD-pijplijnen zijn geautomatiseerde pijplijnen die code veilig naar prod verplaatsen en worden gedefinieerd met YAML. AI produceert snel werkende blauwdrukken voor GitHub Actions en GitLab CI, maar je moet duidelijk zijn over het platform, de taal, de trigger en de reikwijdte van de implementatie. Er zijn drie regels op het gebied van beveiliging: geheimen oproepen door middel van referentie, minimumprivileges verlenen, geen geheimen in het logboek afdrukken. Het is uw verantwoordelijkheid om te verifiëren dat elke use:/include:-component daadwerkelijk bestaat en wat elke stap doet.

Applicatie taak

Kies een eenvoudig voorbeeldproject (zelfs een "Hallo wereld" in uw taal is voldoende). Laat AI een workflow produceren met de bovenstaande sjabloon 'Basis CI-workflow'. Vervolgens: (1) schrijf in je eigen woorden wat elke stap doet; (2) verifiëren dat er geen geheimen zijn ingebed en dat de machtigingen beperkt zijn; (3) Laat het indien mogelijk in een testtank lopen en observeer het rood-groene gedrag.

controlelijst

  • [ ] Ik heb het platform, de taal/het raamwerk, de trigger en de implementatiescope aan mijn prompt toegevoegd.
  • [ ] Ik begrijp wat elke taak en stap doet in de gegenereerde YAML.
  • [ ] Geen enkel geheim is leesbare tekst; alle ${{ secrets.X }} / CI-variabele.
  • [ ] Ik heb de machtigingen beperkt tot de minimale autoriteit.
  • [ ] Ik heb geverifieerd dat alle opgeroepen acties/sjablonen daadwerkelijk bestaan.
  • [ ] Ik heb de implementatiestap gecontroleerd met goedkeuring/bescherming.