Přidání fází, závislostí a podmínek
Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019
Fáze je logická hranice v kanálu Azure DevOps. Fáze se dají použít k seskupení akcí v procesu vývoje softwaru (například sestavení aplikace, spuštění testů, nasazení do předprodukčního prostředí). Každá fáze obsahuje jednu nebo více úloh.
Když v kanálu definujete více fází, spustí se ve výchozím nastavení jedna po druhé. Fáze můžou záviset také na sobě. Pomocí klíčového dependsOn
slova můžete definovat závislosti. Fáze se můžou spouštět také na základě výsledku předchozí fáze s podmínkami.
Informace o tom, jak fáze fungují s paralelními úlohami a licencováním, najdete v tématu Konfigurace a platba za paralelní úlohy.
Informace o tom, jak fáze souvisejí s jinými částmi kanálu, jako jsou úlohy, najdete v tématu Klíčové koncepty kanálů.
Další informace o tom, jak fáze souvisejí s částmi kanálu, najdete v článku fáze schématu YAML.
Úlohy kanálu můžete uspořádat do fází. Fáze jsou hlavní dělení v kanálu: sestavení této aplikace, spuštění těchto testů a nasazení do předprodukce jsou dobrými příklady fází. Jedná se o logické hranice ve vašem kanálu, kde můžete kanál pozastavit a provádět různé kontroly.
Každý kanál má alespoň jednu fázi, i když ho explicitně nedefinujete. Fáze můžete také uspořádat do grafu závislostí tak, aby se jedna fáze spustila před druhou. Pro určitou fázi platí limit 256 úloh.
Poznámka:
Podpora fází byla přidána v Azure DevOps Serveru 2019.1.
Určení fází
Poznámka:
Podpora fází byla přidána v Azure DevOps Serveru 2019.1.
V nejjednodušším případě nepotřebujete v kanálu žádné logické hranice. V takovém případě nemusíte klíčové slovo explicitně používat stage
. Úlohy můžete přímo zadat v souboru YAML.
# 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"
Pokud kanál uspořádáte do několika fází, použijete stages
klíčové slovo.
stages:
- stage: A
jobs:
- job: A1
- job: A2
- stage: B
jobs:
- job: B1
- job: B2
Pokud se rozhodnete zadat na pool
úrovni fáze, pak všechny úlohy definované v této fázi používají tento fond, pokud nejsou zadány na úrovni úlohy.
Poznámka:
V Azure DevOps Serveru 2019 je možné fondy zadat pouze na úrovni úlohy.
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
Úplná syntaxe pro určení fáze je:
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]
Určení závislostí
Poznámka:
Podpora fází byla přidána v Azure DevOps Serveru 2019.1.
Když v kanálu definujete více fází, ve výchozím nastavení se spustí postupně v pořadí, ve kterém je definujete v souboru YAML. Výjimkou je přidání závislostí. Se závislostmi se fáze spouští v pořadí požadavků dependsOn
.
Kanály musí obsahovat alespoň jednu fázi bez závislostí.
Syntaxe pro definování více fází a jejich závislostí je:
stages:
- stage: string
dependsOn: string
condition: string
Ukázkové fáze, které se spouštějí postupně:
# 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:
...
Ukázkové fáze, které běží paralelně:
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:
...
Příklad ventilátoru a ventilátoru:
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
Definování podmínek
Můžete zadat podmínky, za kterých se jednotlivé fáze spouští s výrazy. Ve výchozím nastavení se fáze spustí, pokud nezávisí na žádné jiné fázi nebo na všech fázích, které závisí na dokončení a úspěšném dokončení. Toto chování můžete přizpůsobit vynucením spuštění fáze, i když předchozí fáze selže nebo zadáte vlastní podmínku.
Pokud přizpůsobíte výchozí podmínku předchozích kroků pro fázi, odeberete podmínky pro dokončení a úspěch. Pokud tedy používáte vlastní podmínku, je běžné zkontrolovat and(succeeded(),custom_condition)
, jestli se předchozí fáze úspěšně spustila. V opačném případě se fáze spustí bez ohledu na výsledek předchozí fáze.
Poznámka:
Podmínky selhání (JOBNAME/STAGENAME) a úspěšné (JOBNAME/STAGENAME), jak je znázorněno v následujícím příkladu, fungují pouze pro kanály YAML.
Poznámka:
Podpora fází byla přidána v Azure DevOps Serveru 2019.1.
Příklad spuštění fáze na základě stavu spuštění předchozí fáze:
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')
Příklad použití vlastní podmínky:
stages:
- stage: A
- stage: B
condition: and(succeeded(), eq(variables['build.sourceBranch'], 'refs/heads/main'))
Zadání zásad řízení front
Kanály YAML nepodporují zásady řízení front. Každé spuštění kanálu je nezávislé a neví o ostatních spuštěních. Jinými slovy, vaše dvě následná potvrzení mohou aktivovat dva kanály, přičemž obě tyto kanály budou spouštět stejnou sekvenci fází, aniž by na sebe čekaly. Zatímco pracujeme na vytváření front do kanálů YAML, doporučujeme použít ruční schvalování , abyste mohli ručně sekvencovat a řídit pořadí provádění, pokud je to důležité.
Zadání schválení
Pomocí kontrol schválení můžete ručně řídit, kdy se má fáze spustit. To se běžně používá k řízení nasazení do produkčních prostředí. Kontroly jsou mechanismus dostupný pro vlastníka prostředku, který řídí, jestli a kdy fáze kanálu může prostředek využívat. Jako vlastník prostředku, jako je například prostředí, můžete definovat kontroly, které musí být splněny před spuštěním fáze, která daný prostředek zabírají.
V současné době se v prostředích podporují kontroly ručního schvalování. Další informace najdete v tématu Schválení.
Schválení se zatím v kanálech YAML v této verzi Azure DevOps Serveru nepodporují.
Přidání ruční aktivační události
Ručně aktivované fáze kanálu YAML umožňují mít jednotný kanál, aniž byste ho vždy spustili k dokončení.
Kanál může například zahrnovat fáze sestavení, testování, nasazení do přípravného prostředí a nasazení do produkčního prostředí. Můžete chtít, aby se všechny fáze spouštěly automaticky s výjimkou produkčního nasazení, které chcete aktivovat ručně, až na to, že jsou připravené.
Chcete-li tuto funkci použít, přidejte trigger: manual
vlastnost do fáze.
V následujícím příkladu se fáze vývoje spustí automaticky, zatímco produkční fáze vyžaduje ruční aktivaci. Obě fáze spouští výstupní skript 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'
Označení fáze jako neskluzitelné
Označte fázi tak, aby isSkippable: false
zabránili uživatelům kanálu v vynechání fází. Můžete mít například šablonu YAML, která vloží fázi, která provádí detekci malwaru ve všech kanálech. Pokud nastavíte isSkippable: false
pro tuto fázi, kanál nebude moct přeskočit detekci malwaru.
V následujícím příkladu je fáze detekce malwaru označena jako neskočená, což znamená, že se musí spustit jako součást spuštění kanálu.
- stage: malware_detection
displayName: Malware detection
isSkippable: false
jobs:
- job: check_job
...
Pokud je fáze neskočená, zobrazí se v dílčích fázích zaškrtávací políčko se zakázaným zaškrtávacím polem pro spuštění konfiguračního panelu.