Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Una fase è un limite logico in una pipeline di Azure DevOps. Fasi delle azioni di gruppo nel processo di sviluppo software, ad esempio la compilazione dell'app, l'esecuzione di test e la distribuzione nella preproduzione. Ogni fase contiene uno o più lavori.
Quando si definiscono più fasi in una pipeline, per impostazione predefinita, vengono eseguite una dopo l'altra. Le fasi possono anche dipendere l'una dall'altra. È possibile usare la dependsOn
parola chiave per definire le dipendenze. Le fasi possono essere eseguite anche in base al risultato di una fase precedente con condizioni.
Per informazioni sul funzionamento delle fasi con processi e licenze paralleli, vedere Configurare e pagare per i processi paralleli.
Per scoprire in che modo le fasi sono correlate ad altre parti di una pipeline, come i job, vedere Concetti chiave delle pipeline.
Per altre informazioni sulle fasi correlate alle parti di una pipeline, vedere l'articolo Fasi dello schema YAML.
- YAML
- Classico
È possibile organizzare i lavori della pipeline in fasi. Le fasi sono le divisioni principali in una pipeline: compilare questa app, eseguire questi test e distribuirla nella preproduzione sono esempi validi di fasi. Si tratta di limiti logici nella pipeline in cui è possibile sospendere la pipeline ed eseguire vari controlli.
Ogni pipeline ha almeno una fase, anche se non viene definita in modo esplicito. È anche possibile disporre le fasi in un grafico delle dipendenze in modo che una fase venga eseguita prima di un'altra. Una fase può avere fino a 256 compiti.
Specificare le fasi
- YAML
- Classico
Nel caso più semplice, non sono necessari limiti logici nella pipeline. Per questi scenari, è possibile specificare direttamente i processi nel file YAML senza la stages
parola chiave . Ad esempio, se si dispone di una pipeline semplice che compila e testa una piccola applicazione senza richiedere ambienti separati o passaggi di distribuzione, è possibile definire tutti i processi direttamente senza usare le fasi.
pool:
vmImage: 'ubuntu-latest'
jobs:
- job: BuildAndTest
steps:
- script: echo "Building the application"
- script: echo "Running tests"
Questa pipeline ha una fase implicita e due lavori. La stages
parola chiave non viene usata perché è presente una sola fase.
jobs:
- job: Build
steps:
- bash: echo "Building"
- job: Test
steps:
- bash: echo "Testing"
Per organizzare la pipeline in più fasi, usare la stages
parola chiave . Questo YAML definisce una pipeline con due fasi in cui ogni fase contiene più processi e ogni processo ha passaggi specifici da eseguire.
stages:
- stage: A
displayName: "Stage A - Build and Test"
jobs:
- job: A1
displayName: "Job A1 - build"
steps:
- script: echo "Building the application in Job A1"
displayName: "Build step"
- job: A2
displayName: "Job A2 - Test"
steps:
- script: echo "Running tests in Job A2"
displayName: "Test step"
- stage: B
displayName: "Stage B - Deploy"
jobs:
- job: B1
displayName: "Job B1 - Deploy to Staging"
steps:
- script: echo "Deploying to staging in Job B1"
displayName: "Staging deployment step"
- job: B2
displayName: "Job B2 - Deploy to Production"
steps:
- script: echo "Deploying to production in Job B2"
displayName: "Production deployment step"
Se si specifica un pool
oggetto a livello di fase, tutti i processi in tale fase usano tale pool a meno che non venga specificata la fase a livello di processo.
stages:
- stage: A
pool: StageAPool
jobs:
- job: A1 # will run on "StageAPool" pool based on the pool defined on the stage
- job: A2 # will run on "JobPool" pool
pool: JobPool
Specificare le dipendenze
- YAML
- Classico
Quando si definiscono più fasi in una pipeline, vengono eseguite in sequenza per impostazione predefinita nell'ordine in cui vengono definite nel file YAML. ad eccezione del caso in cui siano state aggiunte delle dipendenze. Con le dipendenze, le fasi si susseguono nell'ordine dei requisiti dependsOn
.
Le pipeline devono contenere almeno una fase senza dipendenze.
Per altre informazioni su come definire le fasi, vedere fasi nello schema YAML.
Le fasi di esempio seguenti vengono eseguite in sequenza. Se non si usa una dependsOn
parola chiave, le fasi vengono eseguite nell'ordine in cui sono definite.
stages:
- stage: Build
displayName: "Build Stage"
jobs:
- job: BuildJob
steps:
- script: echo "Building the application"
displayName: "Build Step"
- stage: Test
displayName: "Test Stage"
jobs:
- job: TestJob
steps:
- script: echo "Running tests"
displayName: "Test Step"
Fasi di esempio eseguite in parallelo:
stages:
- stage: FunctionalTest
displayName: "Functional Test Stage"
jobs:
- job: FunctionalTestJob
steps:
- script: echo "Running functional tests"
displayName: "Run Functional Tests"
- stage: AcceptanceTest
displayName: "Acceptance Test Stage"
dependsOn: [] # Runs in parallel with FunctionalTest
jobs:
- job: AcceptanceTestJob
steps:
- script: echo "Running acceptance tests"
displayName: "Run Acceptance Tests"
Esempio del comportamento di tipo fan-out e fan-in:
stages:
- stage: Test
- stage: DeployUS1
dependsOn: Test # stage runs after Test
- stage: DeployUS2
dependsOn: Test # stage runs in parallel with DeployUS1, after Test
- stage: DeployEurope
dependsOn: # stage runs after DeployUS1 and DeployUS2
- DeployUS1
- DeployUS2
Definire le condizioni
È possibile specificare le condizioni in cui ogni fase viene eseguita con espressioni. Per impostazione predefinita, una fase viene eseguita se non dipende da altre fasi o se tutte le fasi da cui dipende sono state completate e riuscite. È possibile personalizzare questo comportamento forzando l'esecuzione di una fase anche se una fase precedente ha esito negativo o specificando una condizione personalizzata.
Se si personalizza la condizione predefinita dei passaggi precedenti per una fase, si rimuovono le condizioni per il completamento e il successo. Pertanto, se si usa una condizione personalizzata, è comune usare and(succeeded(),custom_condition)
per verificare se la fase precedente è stata eseguita correttamente. In caso contrario, la fase viene eseguita indipendentemente dal risultato della fase precedente.
Nota
Le condizioni per esito negativo ('JOBNAME/STAGENAME') e per esito positivo ('JOBNAME/STAGENAME'), sono illustrate nell'esempio seguente e funzionano unicamente per le pipeline YAML.
- YAML
- Classico
Esempio di esecuzione di una fase in base allo stato dell'esecuzione di una fase precedente:
stages:
- stage: A
# stage B runs if A fails
- stage: B
condition: failed()
# stage C runs if B succeeds
- stage: C
dependsOn:
- A
- B
condition: succeeded('B')
Esempio di utilizzo di una condizione personalizzata:
stages:
- stage: A
- stage: B
condition: and(succeeded(), eq(variables['build.sourceBranch'], 'refs/heads/main'))
Specificare i criteri di accodamento
- YAML
- Classico
Le pipeline YAML non supportano i criteri di accodamento. Ogni esecuzione di una pipeline è indipendente da e non è a conoscenza di altre esecuzioni. In altre parole, i due commit successivi potrebbero attivare due pipeline e entrambi eseguiranno la stessa sequenza di fasi senza attendere l'una l'altra. Mentre lavoriamo per introdurre i criteri di accodamento nelle pipeline YAML, è consigliabile usare approvazioni manuali per sequenziare manualmente e controllare l'ordine di esecuzione, se è importante.
Specificare le approvazioni
- YAML
- Classico
È possibile controllare manualmente quando una fase deve essere eseguita usando i controlli di approvazione. Viene comunemente usato per controllare le distribuzioni in ambienti di produzione. I controlli sono un meccanismo disponibile per il proprietario della risorsa per controllare se e quando una fase in una pipeline può utilizzare una risorsa. In qualità di proprietario di una risorsa, ad esempio un ambiente, è possibile definire controlli che devono essere soddisfatti prima dell'avvio di una fase che utilizza tale risorsa.
Attualmente, i controlli di approvazione manuali sono supportati negli ambienti. Per altre informazioni, vedere Approvazioni.
Aggiungere un trigger manuale
Le fasi della pipeline YAML attivate manualmente consentono di avere una pipeline unificata senza eseguirla sempre al completamento.
Ad esempio, la pipeline può includere fasi per la compilazione, il test, la distribuzione in un ambiente di staging e la distribuzione nell'ambiente di produzione. Potresti voler eseguire automaticamente tutte le fasi, ad eccezione della distribuzione in produzione, che preferisci attivare manualmente quando sei pronto.
Per utilizzare questa funzionalità, aggiungere la proprietà trigger: manual
a una fase.
Nell'esempio seguente la fase di sviluppo viene eseguita automaticamente, mentre la fase di produzione richiede l'attivazione manuale. Entrambe le fasi eseguono uno script di output hello world.
stages:
- stage: Development
displayName: Deploy to development
jobs:
- job: DeployJob
steps:
- script: echo 'hello, world'
displayName: 'Run script'
- stage: Production
displayName: Deploy to production
trigger: manual
jobs:
- job: DeployJob
steps:
- script: echo 'hello, world'
displayName: 'Run script'
Contrassegnare una fase come non ignorabile
Contrassegnare una fase come isSkippable: false
per impedire agli utenti della pipeline di ignorare le fasi. Ad esempio, si potrebbe avere un modello YAML che inserisce una fase che esegue il rilevamento di malware in tutte le pipeline. Se si imposta isSkippable: false
per questa fase, la pipeline non sarà in grado di ignorare il rilevamento di malware.
Nell'esempio seguente, la fase di rilevamento malware è contrassegnata come non saltabile, ovvero deve essere eseguita come parte dell'esecuzione della pipeline.
- stage: malware_detection
displayName: Malware detection
isSkippable: false
jobs:
- job: check_job
...
Quando una fase non è saltabile, viene visualizzata con una casella di controllo disabilitata nel pannello Fasi da eseguire della configurazione.