Table of Contents
Azure DevOps YAML offre un approccio rigoroso e controllato dalla versione all'integrazione continua e alla consegna continua (CI/CD) che si allinea perfettamente alle pratiche di consegna software moderne.
Sia che si tratti di automatizzare i processi di costruzione di un'architettura di microservizi, di implementare l'infrastruttura come codice, o di orchestrare flussi di lavoro complessi di rilascio multi-ambiente, le tubazioni Azure DevOps YAML ti danno il controllo, la flessibilità e la scalabilità necessarie per spedire il software in modo affidabile.
Cosa sono le tubature Azure DevOps YAML?
Le pipeline di Azure DevOps YAML sono file di configurazione dichiarativi che definiscono i passaggi, le fasi, i lavori e le dipendenze necessarie per costruire, testare e distribuire applicazioni. A differenza del classico editor che memorizza le definizioni di pipeline nel database di servizi Azure DevOps, le pipeline YAML esistono come file di testo nel repository – tipicamente chiamato ] o posizionati sotto una directory di gestione .
Il file pipeline può fare riferimento ad altri file YAML (templati) per la logica riutilizzabile, includere dichiarazioni condizionali, variabili dinamiche, e anche attivare comportamenti diversi basati su filtri di ramo, tag o percorso.
Componenti principali di YAML Pipelines
], [[FLT:]][FLT:]], ]]variabili[, [[FLT:]stages, ]],[FLT][Fondo:7]
Stage, lavori e passi
Stages]] rappresentano le principali divisioni del gasdotto, come Build, Test e Deploy. Possono eseguire sequenziali o parallelamente.
Triggers
I trigger]] definiscono quando il gasdotto dovrebbe iniziare automaticamente. Il più comune è il trigger CI, che spara su commit a rami specificati (ad esempio, , ]]). È inoltre possibile utilizzare i trigger PR per la validazione delle richieste, il programma innesca per le costruzioni notturne, e i filtri di percorso per limitare i percorsi di attivazione a condizioni avanzate per consentire modifiche in modo da attivare i percorsi.
trigger:
branches:
include:
- main
- releases/*
paths:
exclude:
- docs/*
- README.md
Variabili e parametri
I valori di memorizzazione dei parametri che possono essere utilizzati durante l'intero processo di distribuzione – stringhe di connessione, numeri di versione o nomi di ambiente. Possono essere definiti a livello di pipeline, livello di stadio o livello di lavoro, e possono essere sovrascritti al tempo di coda. I parametri] sono un meccanismo di default più potente per l'introduzione delle scelte di runtime.
Azure DevOps supporta anche variabili segrete, crittografate e mai esposte nei registri.Per i segreti di livello di produzione, integrarsi con Azure Key Vault utilizzando l'attività "Azure Key Vault" o il riferimento di gruppo variabile.
Modelli per la riutilizzabilità
I tempi] sono una delle caratteristiche più potenti delle tubazioni YAML. Essi consentono di calcolare la logica comune in file YAML separati e includerli in più condotte. Ci sono due tipi: modelli di lavoro[] e ]] i modelli di pool.
Per esempio, è possibile creare un modello "build-node-app.yml" che prende una versione Node.js come parametro e funziona npm install, build e test. Qualsiasi pipeline che necessita di costruire un'app Node.js può semplicemente includere quel modello con la versione appropriata.
# templates/build-node-app.yml
parameters:
- name: nodeVersion
type: string
default: '18.x'
steps:
- task: NodeTool@0
inputs:
versionSpec: ${{ parameters.nodeVersion }}
- script: npm install
displayName: 'Install dependencies'
- script: npm run build
displayName: 'Build application'
- script: npm test
displayName: 'Run tests'
Vantaggi chiave di versione-Controlled CI/CD
L'adozione di tubazioni YAML porta diversi vantaggi concreti rispetto alle tubazioni classiche basate su UI:
- Controllo versione completa:[] Ogni modifica del gasdotto viene tracciata nello stesso repository del codice dell'applicazione. È possibile disattivare, commentare e riavvolgere le modifiche del gasdotto utilizzando flussi di lavoro Git standard.
- Riproducibilità e verificabilità:[ Poiché il gasdotto è definito come codice, è possibile ricostruire qualsiasi commit con esattamente gli stessi passaggi, variabili e dipendenze come quando è stato costruito.
- Automation oltre i builds:[] YAML supporta la logica condizionale, i loop e le espressioni complesse utilizzando il linguaggio di espressione di Azure DevOps. È possibile implementare flussi di lavoro sofisticati come l'implementazione di più regioni in parallelo, l'esecuzione di test di fumo solo su rami di rilascio, o innescare condotte a valle.
- Portabilità:[] Le pipeline YAML possono essere copiate tra progetti, riutilizzate tra team, e anche utilizzate per scarponi CI/CD per nuovi repository.
- Collaborazione e recensione del codice:[[] I cambiamenti della linea di trasmissione sono soggetti allo stesso processo di revisione della richiesta di pull come codice sorgente. Questo incoraggia le migliori pratiche come la revisione peer dei cambiamenti delle infrastrutture, riduce le configurazioni erronee e favorisce una cultura della collaborazione DevOps.
Creazione di una linea YAML di controllo versione
Impostare un tubo YAML da zero è semplice. Di seguito sono i passaggi consigliati:
- Decidere su una struttura di file.[] È possibile posizionare il file principale della pipeline alla radice del repository ([) o in una cartella dedicata come . Quest'ultimo approccio si avvicina meglio quando si dispone di più pipeline.
- ] Scrivi la definizione della pipeline.[] Inizia con un file YAML valido minimo che include un trigger, una piscina (immagine o contenitore di VM di età), e almeno un lavoro. Esempio: ]
- Store del file nel repository. Impedire e spingere al telecomando, assicurandosi che il file sia nel ramo che si intende utilizzare come ramo predefinito per il pipeline.
- Crea il pipeline in Azure DevOps.[] Navigare a Pipelines > Creare Pipeline, selezionare "Azure Repos Git" (o la fonte selezionata), scegliere il repository e quindi selezionare "Esistere Azure Pipelines YAML file".
- Confermare ed eseguire. Cliccare su "Run" per eseguire la pipeline per la prima volta. È possibile monitorare l'output in tempo reale. Successivamente si impegna ai rami di attivazione automaticamente nuove piste.
Per i progetti esistenti che hanno già un condotto classico, è possibile migrare a YAML esportando la definizione di pipeline o ricreando l'editor YAML. Microsoft fornisce una guida alla migrazione[] per facilitare la transizione.
Camminata del campione del tubo
Esaminiamo un canale più realistico per un'applicazione web Node.js che costruisce, testa, pubblica un artefatto e si distribuisce in un ambiente di stadiazione.
trigger:
branches:
include:
- main
- develop
paths:
exclude:
- 'README.md'
variables:
nodeVersion: '18.x'
artifactName: 'webapp'
stages:
- stage: Build
displayName: 'Build and Test'
jobs:
- job: BuildJob
pool:
vmImage: 'ubuntu-latest'
steps:
- task: NodeTool@0
inputs:
versionSpec: $(nodeVersion)
- script: npm install
displayName: 'Install dependencies'
- script: npm run lint
displayName: 'Lint code'
- script: npm run build
displayName: 'Build application'
- script: npm test
displayName: 'Run unit tests'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: 'dist'
ArtifactName: $(artifactName)
- stage: DeployStaging
displayName: 'Deploy to Staging'
dependsOn: Build
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
jobs:
- deployment: DeployJob
pool:
vmImage: 'ubuntu-latest'
environment: staging
strategy:
runOnce:
deploy:
steps:
- download: current
artifact: $(artifactName)
- script: echo "Deploying artifact to staging server..."
displayName: 'Deploy step'
- script: echo "Running smoke tests..."
displayName: 'Smoke test'
Questo gasdotto mostra:
- Trigger con esclusione del percorso[[] – i cambiamenti della documentazione non innescano una completa costruzione.
- Variables[]] definito in alto per la riutilizzabilità.
- Due fasi[] – Costruire (non-deployment) e DeployStaging (lavoro di distribuzione). La fase di distribuzione funziona solo se il ramo sorgente è e la costruzione è riuscita.
- Lavoro di distribuzione[[]] utilizzando la parola chiave , che consente la tracciabilità, le approvazioni e le porte.
- Artifact publishing and downloading[ – l'output di build viene salvato e recuperato successivamente dalla fase di distribuzione.
Modelli avanzati
Multi-stadio con Approvazione Manuale
Azure DevOps YAML offre ambienti di supporto con controlli manuali di approvazione. È possibile richiedere agli utenti o gruppi specifici di approvare una distribuzione prima di procedere. Questo viene definito nella YAML facendo riferimento a un ambiente che ha le autorizzazioni configurate.
- stage: DeployProduction
dependsOn: DeployStaging
condition: succeeded()
jobs:
- deployment: ProdDeployment
pool:
vmImage: 'ubuntu-latest'
environment: production
strategy:
runOnce:
deploy:
steps:
- script: echo "Deploying to production..."
Esecuzione condizionale
Usa espressioni come per controllare quali fasi, lavori o passi si eseguono. Azure DevOps supporta un linguaggio ricco [espressione[]] con funzioni per la manipolazione delle stringhe, gli operatori logici e i controlli di raccolta.
Utilizzo di contenitori
Invece di utilizzare un'immagine VM, è possibile eseguire interi lavori all'interno di un contenitore, ideale per garantire ambienti coerenti attraverso lo sviluppo e CI/CD.
pool:
vmImage: 'ubuntu-latest'
container: node:18-alpine
Migliori Pratiche per YAML Pipelines
Trattandosi di implementazioni di produzione, ecco le pratiche chiave per mantenere robusti e manutenbili i vostri conduttivi:
- Usa modelli liberalmente.[] Estrarre i passaggi comuni in modelli parametrizzati. Questo riduce la duplicazione e rende facile da applicare standard (ad esempio, un modello di scansione di sicurezza che tutti i progetti devono eseguire).
- Keep YAML file piccoli e concentrati.[ Un singolo file monolitico diventa difficile da leggere e debug. Spalato in più file organizzati per fase o funzione (ad esempio, , , []]]]].
- Segui i segreti con Azure Key Vault.[] Evitare password di codifica, chiavi API o certificati. Utilizzare gruppi variabili collegati a Key Vault, e li riferimento nel vostro pipeline. Azure DevOps automaticamente recuperare i valori più recenti in tempo di esecuzione.
- Validate YAML sintassi prima di commettere.[ Utilizzare un plugin linter o IDE per catturare errori di indentazione e chiavi mancanti. Azure DevOps fornisce anche un pulsante "Validate" nell'editor pipeline.
- Risorse di nome chiaramente. Dà stadi, lavori e passi significativi [ valori. Questo migliora notevolmente la leggibilità nei registri e nelle visualizzazioni.
- Usa il caching delle tubazioni[[]] per velocizzare le costruzioni. Le dipendenze di Cache come [] o i pacchetti NuGet per evitare di ricaricarle su ogni corsa.
- Implementare il fallimento anticipato.[] Fail il più rapidamente possibile il gasdotto. Eseguire i controlli di linting e sintassi prima di costosi test di integrazione.
- Documenti il tuo pipeline. Includere commenti nel file YAML che spiega scelte non ovvie, soprattutto quando si utilizzano espressioni o logica condizionale.
Integrazione con altri strumenti
Le pipeline Azure DevOps YAML si integrano in modo nativo con numerosi servizi.
- SonarQube] per l'ispezione continua della qualità del codice – aggiungere un compito SonarQubePrepare prima di costruire e un'attività SonarQubeAnalyze dopo.
- Docker[]] per le costruzioni dei container – utilizzare il compito Docker@2 per costruire e spingere le immagini al Registro dei contenitori Azure o al Docker Hub.
- GitHub[[] – Le tubazioni YAML possono essere configurate per lavorare con repository GitHub, non solo Azure Repos.
- ServiceNow[]] per la gestione dei cambiamenti – l'estensione ServiceNow Change Management consente alle pipeline di creare e aggiornare le richieste di cambiamento durante le distribuzioni.
Per un elenco completo delle attività disponibili, fare riferimento alla documentazione Azure Pipelines Tasks[] .
Pitfalls comune e come evitare di loro
Anche le squadre con esperienza occasionalmente si mettono in discussione con le tubazioni YAML. Di seguito sono frequenti errori e le loro soluzioni:
- Sintassi YAML non valida[[] – spazi di tracciamento, indentazione inconsistente (YAML non consente schede).
- Schiaro scoping variabile[[] – variabili definite nella fase di sovrascrittura/lavoro di livello superiore a meno che non utilizzi correttamente la sintassi macro.
- I trigger configurati[[]] – dimenticando di impostare un risultato di trigger nella pipeline solo in esecuzione su trigger manuali o programmati.
- Ignorando la capacità del pool dell'agente[[] – utilizzando un pool di agenti privati senza garantire che gli agenti sufficienti possano causare ritardi o guasti.
- Non testare i cambiamenti delle tubazioni[[[] – eseguire sempre un test di costruzione su un ramo prima di fondersi a principale. Anche i cambiamenti minori ai modelli possono rompere decine di pipeline silenziosamente.
Conclusioni
Azure DevOps YAML pipelines rappresenta un approccio maturo e codificato al CI/CD che va da piccoli progetti all'ingegneria di rilascio a livello aziendale. Posizionando le definizioni di pipeline sotto controllo di versione, i team acquisiscono trasparenza, riproducibilità e un ponte senza soluzione di continuità tra sviluppo e operazioni. La sintassi YAML è abbastanza espressiva da modellare flussi di lavoro complessi, ma strutturati abbastanza da rimanere leggibili e mantenuti quando abbinati a modelli e best practice.
Per i team che cercano di aumentare la frequenza di distribuzione, ridurre gli errori manuali e migliorare la collaborazione, Azure DevOps YAML pipelines sono una base comprovata. Inizia definendo un semplice pipeline per il tuo progetto, quindi aggiungere gradualmente stadi, modelli e integrazioni quando la tua maturità cresce.