Delen via


Fasen, afhankelijkheden en voorwaarden toevoegen

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Een fase is een logische grens in een Azure DevOps-pijplijn. Fasen kunnen worden gebruikt voor het groeperen van acties in uw softwareontwikkelingsproces (bijvoorbeeld het bouwen van de app, het uitvoeren van tests, implementeren naar preproductie). Elke fase bevat een of meer taken.

Wanneer u meerdere fasen in een pijplijn definieert, worden ze standaard één na de andere uitgevoerd. Fasen kunnen ook van elkaar afhankelijk zijn. U kunt het dependsOn trefwoord gebruiken om afhankelijkheden te definiëren. Fasen kunnen ook worden uitgevoerd op basis van het resultaat van een vorige fase met voorwaarden.

Zie Configureren en betalen voor parallelle taken voor meer informatie over de werking van fasen met parallelle taken en licenties.

Als u wilt achterhalen hoe fasen zich verhouden tot andere onderdelen van een pijplijn, zoals taken, raadpleegt u de concepten van belangrijke pijplijnen.

U kunt ook meer informatie vinden over de relatie tussen fasen en onderdelen van een pijplijn in het artikel over YAML-schemafasen.

U kunt pijplijntaken in fasen indelen. Fasen zijn de belangrijkste divisies in een pijplijn: bouw deze app, voer deze tests uit en implementeer in preproductie zijn goede voorbeelden van fasen. Ze zijn logische grenzen in uw pijplijn, waar u de pijplijn kunt onderbreken en verschillende controles kunt uitvoeren.

Elke pijplijn heeft ten minste één fase, zelfs als u deze niet expliciet definieert. U kunt fasen ook rangschikken in een afhankelijkheidsgrafiek, zodat de ene fase vóór de andere wordt uitgevoerd. Er geldt een limiet van 256 taken voor een fase.

Notitie

Ondersteuning voor fasen is toegevoegd in Azure DevOps Server 2019.1.

Fasen opgeven

Notitie

Ondersteuning voor fasen is toegevoegd in Azure DevOps Server 2019.1.

In het eenvoudigste geval hebt u geen logische grenzen in uw pijplijn nodig. In dat geval hoeft u het stage trefwoord niet expliciet te gebruiken. U kunt de taken in uw YAML-bestand rechtstreeks opgeven.

# this has one implicit stage and one implicit job
pool:
  vmImage: 'ubuntu-latest'
steps:
- bash: echo "Hello world"
# this pipeline has one implicit stage
jobs:
- job: A
  steps:
  - bash: echo "A"

- job: B
  steps:
  - bash: echo "B"

Als u uw pijplijn in meerdere fasen ordent, gebruikt u het stages trefwoord.

stages:
- stage: A
  jobs:
  - job: A1
  - job: A2

- stage: B
  jobs:
  - job: B1
  - job: B2

Als u ervoor kiest om een pool op faseniveau op te geven, gebruiken alle taken die in die fase zijn gedefinieerd die pool, tenzij deze op taakniveau zijn opgegeven.

Notitie

In Azure DevOps Server 2019 kunnen pools alleen worden opgegeven op taakniveau.

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

De volledige syntaxis voor het opgeven van een fase is:

stages:
- stage: string  # name of the stage, A-Z, a-z, 0-9, and underscore
  displayName: string  # friendly name to display in the UI
  dependsOn: string | [ string ]
  condition: string
  pool: string | pool
  variables: { string: string } | [ variable | variableReference ] 
  jobs: [ job | templateReference]

Afhankelijkheden opgeven

Notitie

Ondersteuning voor fasen is toegevoegd in Azure DevOps Server 2019.1.

Wanneer u meerdere fasen in een pijplijn definieert, worden ze standaard opeenvolgend uitgevoerd in de volgorde waarin u ze definieert in het YAML-bestand. De uitzondering hierop is wanneer u afhankelijkheden toevoegt. Met afhankelijkheden worden fasen uitgevoerd in de volgorde van de dependsOn vereisten.

Pijplijnen moeten ten minste één fase bevatten zonder afhankelijkheden.

De syntaxis voor het definiëren van meerdere fasen en de bijbehorende afhankelijkheden is:

stages:
- stage: string
  dependsOn: string
  condition: string

Voorbeeldfasen die opeenvolgend worden uitgevoerd:

# if you do not use a dependsOn keyword, stages run in the order they are defined
stages:
- stage: QA
  jobs:
  - job:
    ...

- stage: Prod
  jobs:
  - job:
    ...

Voorbeeldfasen die parallel worden uitgevoerd:

stages:
- stage: FunctionalTest
  jobs:
  - job:
    ...

- stage: AcceptanceTest
  dependsOn: []    # this removes the implicit dependency on previous stage and causes this to run in parallel
  jobs:
  - job:
    ...

Voorbeeld van fan-out en fan-in:

stages:
- stage: Test

- stage: DeployUS1
  dependsOn: Test    # this stage runs after Test

- stage: DeployUS2
  dependsOn: Test    # this stage runs in parallel with DeployUS1, after Test

- stage: DeployEurope
  dependsOn:         # this stage runs after DeployUS1 and DeployUS2
  - DeployUS1
  - DeployUS2

Voorwaarden definiëren

U kunt de voorwaarden opgeven waaronder elke fase wordt uitgevoerd met expressies. Standaard wordt een fase uitgevoerd als deze niet afhankelijk is van een andere fase of als alle fasen waarvan deze afhankelijk is, zijn voltooid en geslaagd. U kunt dit gedrag aanpassen door af te dwingen dat een fase wordt uitgevoerd, zelfs als een vorige fase mislukt of door een aangepaste voorwaarde op te geven.

Als u de standaardvoorwaarde van de voorgaande stappen voor een fase aanpast, verwijdert u de voorwaarden voor voltooiing en geslaagd. Dus als u een aangepaste voorwaarde gebruikt and(succeeded(),custom_condition) , is het gebruikelijk om te controleren of de vorige fase is uitgevoerd. Anders wordt de fase uitgevoerd, ongeacht het resultaat van de vorige fase.

Notitie

Voorwaarden voor mislukt ('JOBNAME/STAGENAME') en geslaagd ('JOBNAME/STAGENAME'), zoals wordt weergegeven in het volgende voorbeeld werken alleen voor YAML-pijplijnen.

Notitie

Ondersteuning voor fasen is toegevoegd in Azure DevOps Server 2019.1.

Voorbeeld van het uitvoeren van een fase op basis van de status van het uitvoeren van een vorige fase:

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')

Voorbeeld van het gebruik van een aangepaste voorwaarde:

stages:
- stage: A

- stage: B
  condition: and(succeeded(), eq(variables['build.sourceBranch'], 'refs/heads/main'))

Wachtrijbeleid opgeven

YAML-pijplijnen bieden geen ondersteuning voor wachtrijbeleid. Elke uitvoering van een pijplijn is onafhankelijk van en niet op de hoogte van andere uitvoeringen. Met andere woorden, uw twee opeenvolgende doorvoeringen kunnen twee pijplijnen activeren, en beide zullen dezelfde reeks fasen uitvoeren zonder op elkaar te wachten. Hoewel we werken om wachtrijbeleid naar YAML-pijplijnen te brengen, raden we u aan handmatige goedkeuringen te gebruiken om de volgorde van de uitvoering handmatig te ordenen en te beheren als dit van belang is.

Goedkeuringen opgeven

U kunt handmatig bepalen wanneer een fase moet worden uitgevoerd met behulp van goedkeuringscontroles. Dit wordt vaak gebruikt om implementaties naar productieomgevingen te beheren. Controles zijn een mechanisme dat beschikbaar is voor de resource-eigenaar om te bepalen of en wanneer een fase in een pijplijn een resource kan gebruiken. Als eigenaar van een resource, zoals een omgeving, kunt u controles definiëren waaraan moet worden voldaan voordat een fase die die resource verbruikt, kan worden gestart.

Momenteel worden handmatige goedkeuringscontroles ondersteund in omgevingen. Zie Goedkeuringen voor meer informatie.

Goedkeuringen worden nog niet ondersteund in YAML-pijplijnen in deze versie van Azure DevOps Server.

Een handmatige trigger toevoegen

Door handmatig geactiveerde YAML-pijplijnfasen kunt u een uniforme pijplijn hebben zonder deze altijd tot voltooiing uit te voeren.

Uw pijplijn kan bijvoorbeeld fasen bevatten voor het bouwen, testen, implementeren in een faseringsomgeving en implementeren in productie. Mogelijk wilt u dat alle fasen automatisch worden uitgevoerd, met uitzondering van de productie-implementatie, die u liever handmatig activeert wanneer u klaar bent.

Als u deze functie wilt gebruiken, voegt u de trigger: manual eigenschap toe aan een fase.

In het volgende voorbeeld wordt de ontwikkelingsfase automatisch uitgevoerd, terwijl voor de productiefase handmatige triggering is vereist. In beide fasen wordt een hello world-uitvoerscript uitgevoerd.

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'

Een fase markeren als onoplosbaar

Markeer een fase om isSkippable: false te voorkomen dat pijplijngebruikers fasen overslaan. U hebt bijvoorbeeld een YAML-sjabloon die een fase injecteert waarmee malwaredetectie in alle pijplijnen wordt uitgevoerd. Als u deze fase instelt isSkippable: false , kan Pipeline de detectie van malware niet overslaan.

In het volgende voorbeeld wordt de fase Malwaredetectie gemarkeerd als niet-overslaand, wat betekent dat deze moet worden uitgevoerd als onderdeel van de pijplijnuitvoering.

- stage: malware_detection
  displayName: Malware detection
  isSkippable: false
  jobs:
  - job: check_job
    ...

Wanneer een fase niet kan worden overgeslagen, wordt dit weergegeven met een uitgeschakeld selectievakje in de fasen om het configuratiepaneel uit te voeren .

Schermopname van de fasen die moeten worden uitgevoerd met een uitgeschakelde fase.