Unità 2 / 11

Progettazione di pipeline CI/CD con intelligenza artificiale: azioni GitHub e GitLab CI

Guadagni:

  • Capacità di comprendere il concetto CI/CD, l'anatomia della pipeline (trigger, job, step, runner, artefatto) e le differenze tra GitHub Actions e GitLab CI e di fare in modo che l'intelligenza artificiale produca pipeline con il giusto contesto
  • Capacità di verificare e proteggere riferimenti segreti, permessi e l'esistenza di componenti chiamati nella pipeline prodotta dall'intelligenza artificiale
  • Capacità di applicare i principi di non scrivere segreti in testo semplice, concedere un'autorizzazione minima e mantenere controllata la distribuzione separandola dall'IC

Il cuore del software moderno è la pipeline automatizzata attraverso la quale il codice lascia il computer dello sviluppatore fino a raggiungere in sicurezza il cliente. Questa pipa si chiama CI/CD. CI (Continuous Integration) è la compilazione e il test automatici di ogni modifica al codice; Il suo scopo è individuare un bug prima ancora che lo sviluppatore lasci la tastiera. CD (Continuous Delivery/Deployment) è la preparazione automatica o addirittura il rilascio del codice testato. Una pipeline CI/CD è un file di configurazione che definisce questi passaggi in ordine, solitamente scritto in YAML (un formato di testo di configurazione leggibile dall'uomo).

Scrivere manualmente questi file YAML è noioso, prolisso e soggetto a errori; Se la rientranza scivola di uno spazio, l'intera tubazione si rompe. È qui che entra in gioco l’intelligenza artificiale: con il giusto contesto, produce una bozza funzionante in pochi secondi. Ma è tuo compito comprendere e verificare cosa fa ogni passaggio generato, perché questa è la tubazione che porta il tuo codice alla produzione.

Anatomia della pipeline CI/CD

Ogni pipeline è composta da diversi concetti di base. Non puoi controllare l'output dell'IA senza conoscere questi:

  • Trigger: cosa avvia la pipeline? Di solito un push a un ramo, una richiesta pull (richiesta di unione) o una pianificazione.
  • Lavoro: unità logica che esegue una serie di passaggi; ad esempio "test", "build", "deploy".
  • Passo: un singolo comando o azione all'interno di un lavoro.
  • Runner: la macchina virtuale o il contenitore su cui vengono eseguiti i processi.
  • Artefatto: l'output prodotto da un lavoro e utilizzato dai lavori successivi (ad esempio, un file compilato).
  • Segreto: informazioni riservate utilizzate da Pipeline ma che non devono rimanere in testo semplice nel repository.

GitHub Actions mantiene questa definizione nei file .github/workflows/*.yml; L'unità è flusso di lavoro → lavoro → gerarchia dei passaggi. GitLab CI, invece, utilizza la struttura stage → job nel file .gitlab-ci.yml. L'IA conosce entrambe le sintassi, ma devi dire esplicitamente quale vuoi.

Suggerimento: quando richiedi pipeline all'IA, specifica sempre: piattaforma (GitHub Actions o GitLab CI), linguaggio/framework (Node, .NET, Python…), trigger e se verrà distribuito. Queste quattro informazioni raddoppiano l’utilità dell’output.

Passo dopo passo: progettare una pipeline con l'intelligenza artificiale

  1. Chiarire l'obiettivo. Come "esegui test su push to main, crea immagine, ma distribuisci solo quando viene lanciato il tag".
  2. Fai produrre lo scheletro. Chiedi all'IA il flusso di lavoro di base.
  3. Leggere e comprendere i passaggi. Verifica cosa fa ogni riga run and uses.
  4. Controlla i riferimenti segreti. I segreti vengono chiamati con ${{ secrets.NAME }} o sono incorporati nel codice?
  5. Provalo localmente/CI. Eseguilo su un piccolo repository di test, guarda il comportamento rosso-verde (fail-pass).
  6. Espandi gradualmente. Per prima cosa basta aggiungere CI (test), quindi creare, infine aggiungere distribuire.

Sicurezza: segreto e autorizzazione in pipeline

CI/CD è uno dei luoghi in cui i segreti trapelano di più. Tre regole d'oro:

  1. Non scrivere mai segreti in testo semplice in YAML. Utilizza il repository segreto della piattaforma (GitHub Secrets, GitLab CI/CD Variables) e chiamalo con ${{ secrets.X }}.
  2. Il minimo privilegio. Il token che fornisci a Pipeline avrà solo l'autorità necessaria. Restringi il campo con le autorizzazioni: blocca in GitHub Actions.
  3. Non premere segreto sul registro. Righe come echo $TOKEN rivelano il segreto nel log. Le piattaforme mascherano, ma fai attenzione anche tu.
Attenzione: per comodità, l'intelligenza artificiale a volte inserisce valori incorporati come password: 123456 o autorizzazioni eccessivamente ampie: write-all in pipeline di esempio. Correggi sempre questo problema: cambia il segreto in riferimento, comprimi l'autorizzazione.

grafico di confronto

concetto

Azioni GitHub

GitLabCI

File di configurazione

.github/workflows/*.yml

.gitlab-ci.yml

unità immobiliare

flusso di lavoro → lavoro → passaggio

fase → lavoro

grilletto

dieci:

regole: / solo:

Evoca segreto

${{ segreti.NOME }}

$NAME (variabili CI/CD)

Componente pronto

utilizza: azione@v4

includere: /modello

corridore

funziona:

tag:

tre mini custodie

Caso 1 — Ridotto a 6 ore e 40 minuti. Un team desiderava automatizzare il processo manuale di test, creazione e distribuzione, ma nessuno aveva familiarità con YAML. Hanno descritto YZ come "progetto Node.js, azioni GitHub, test npm e build npm in push to main, distribuzione solo nel tag v*". L'intelligenza artificiale ha prodotto uno scheletro funzionante di 40 linee; Il team ha verificato ogni passaggio ed è diventato operativo in 40 minuti. Se l'avessero scritto a mano, sarebbe stata una giornata di lavoro.

Caso 2: l'autenticazione ha rilevato una vulnerabilità della sicurezza. Un ingegnere ha chiesto all'IA di implementare il flusso di lavoro. L'output includeva le autorizzazioni: write-all, il che significa che il token poteva scrivere nel repository, nei pacchetti, in tutto. L'ingegnere lo ha notato e ha ristretto il campo con i permessi: { content: read, packages: write }. Ciò ha eliminato il rischio che una dipendenza dirottata sostituisse l'intero repository.

Caso 3 – Azione allucinatoria. Un team ha eseguito gli usi suggeriti dall'intelligenza artificiale: linea actions/deploy-to-aws@v3; Non c'è stata alcuna azione ufficiale del genere, il nome è stato inventato da AI. La pipeline è esplosa con "azione non trovata". Lezione: verificare nel Marketplace che ogni componente chiamato con utilizza: esista effettivamente.

Quattro modelli copiabili

1) Flusso di lavoro CI di base:

Scrivere un flusso di lavoro CI per le azioni GitHub. Progetto: [LINGUA/FRAMEWORK].Trigger: richiesta push e pull al ramo principale. Passaggi: installa le dipendenze, esegui test, esegui lint. NO Deploy.Runner ubuntu-più recente. Nessun segreto richiesto. Annota YAML.

2) Flusso di lavoro del CD distribuito (sicuro):

Scrivi il flusso di lavoro di distribuzione per [PIATTAFORMA]. Dovrebbe funzionare solo sul tag 'v*'. Destinazione: [MEDIA/CLOUD]. Regole: - Non scrivere MAI segreti in testo semplice, chiamali con ${{ segreti.

3) Descrivere la pipeline esistente:

Descrivi la seguente pipeline [PIATTAFORMA] riga per riga: cosa fa ciascun lavoro, in quale ordine viene eseguito, quale segreto utilizza e quali sono i suoi due punti più rischiosi? Infine, suggerisci 3 miglioramenti. Pipeline: [CONTENUTO YAML]

4) Accelerare la pipeline:

La seguente pipeline CI è in esecuzione lentamente (durata: [X min]). Esaminare l'utilizzo della cache, i lavori paralleli e i passaggi non necessari. Fornisci 5 suggerimenti concreti e attuabili per accelerare il processo e scrivi l'impatto stimato di ciascuno. Pipeline: [YAML]

Prompt debole / Prompt forte

Debole: "Scrivi il flusso di lavoro delle azioni GitHub".

Risultato: non è chiaro quale linguaggio, quale trigger, se ci sia un dispiegamento; L'intelligenza artificiale fornisce un'istanza Node generica, probabilmente non si adatta al tuo progetto e può codificare il segreto.

Forte: "Scrivi il flusso di lavoro GitHub Actions. Progetto Python 3.12, esegui pytest + ruff nella richiesta pull e push principale; NO distribuzione; accelera le dipendenze con pip cache; nessun segreto richiesto. Esporta YAML con commenti."

Differenza: il secondo prompt fornisce la lingua, il trigger, l'ambito (nessuna distribuzione), le prestazioni previste e il vincolo di sicurezza. L'output funziona direttamente.

Errori comuni

  • Incorporamento del segreto in YAML. La password/token in testo normale è la vulnerabilità CI più comune.
  • Autorizzazione troppo ampia. Concedere l'autorizzazione minima richiesta invece di scrivere tutto.
  • Basandosi su un'azione/modello inesistente. Verifica gli usi realizzati dall'intelligenza artificiale: linee nel Marketplace.
  • Distribuzione confusa con CI. Il test può essere eseguito a ogni push, ma la distribuzione deve essere controllata e approvata.
  • Non utilizzare la cache. L'installazione delle dipendenze da zero a ogni esecuzione rallenta la pipeline di minuti.
  • Provando il primo flusso di lavoro direttamente nel repository principale. Eseguilo prima su un repository di prova.

In sintesi

Le pipeline CI/CD sono pipe automatizzate che spostano il codice in modo sicuro al prodotto e sono definite con YAML. L'intelligenza artificiale produce rapidamente progetti funzionanti per GitHub Actions e GitLab CI, ma è necessario avere ben chiari la piattaforma, il linguaggio, il trigger e l'ambito di distribuzione. Esistono tre regole di sicurezza: richiamare i segreti per riferimento, concedere privilegi minimi, non stampare i segreti nel registro. È tua responsabilità verificare che ciascun componente uses:/include: esista effettivamente e cosa fa ogni passaggio.

Compito dell'applicazione

Scegli un semplice progetto di esempio (andrà bene anche un "ciao mondo" nella tua lingua). Chiedi all'AI di produrre un flusso di lavoro con il modello "Flusso di lavoro CI di base" sopra. Quindi: (1) scrivi con parole tue cosa fa ogni passaggio; (2) verificare che non siano incorporati segreti e che le autorizzazioni siano limitate; (3) Se possibile, eseguirlo in un serbatoio di prova e osservare il comportamento rosso-verde.

lista di controllo

  • [ ] Ho aggiunto la piattaforma, il linguaggio/il framework, il trigger e l'ambito di distribuzione al mio prompt.
  • [] Capisco cosa fa ogni lavoro e passaggio nello YAML generato.
  • [] Nessun segreto è testo in chiaro; tutti ${{ segreti.X }} / variabile CI.
  • [ ] Ho ristretto le autorizzazioni all'autorità minima.
  • [ ] Ho verificato che tutte le azioni/modelli richiamati esistano effettivamente.
  • [ ] Ho effettuato la fase di distribuzione controllata con approvazione/protezione.