Szakaszok, függőségek és feltételek hozzáadása
Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019
A szakasz egy logikai határ egy Azure DevOps-folyamatban. A fázisok a szoftverfejlesztési folyamat műveleteinek csoportosítására használhatók (például az alkalmazás buildelésére, tesztek futtatására, üzembe helyezésre az előgyártásban). Minden szakasz egy vagy több feladatot tartalmaz.
Ha egy folyamat több szakaszát definiálja, alapértelmezés szerint egymás után futnak. A szakaszok egymástól is függhetnek. A kulcsszóval dependsOn
függőségeket határozhat meg. A szakaszok az előző fázis eredményei alapján is futtathatók feltételekkel.
A párhuzamos feladatok és licencelés szakaszainak működéséről a Párhuzamos feladatok konfigurálása és fizetése című témakörben olvashat.
Ha szeretné megtudni, hogy a szakaszok hogyan kapcsolódnak a folyamat más részeihez, például a feladatokhoz, tekintse meg a főbb folyamatokra vonatkozó fogalmakat.
A YAML-sémaszakaszok cikkéből megtudhatja azt is, hogyan kapcsolódnak a szakaszok a folyamat egyes részeihez.
A folyamatfeladatokat fázisokba szervezheti. A fázisok a folyamatok fő osztásai: az alkalmazás létrehozása, a tesztek futtatása és az előkészítésre való üzembe helyezés jó példák a szakaszokra. Ezek logikai határok a folyamatban, ahol szüneteltetheti a folyamatot, és különböző ellenőrzéseket hajthat végre.
Minden folyamatnak van legalább egy fázisa, még akkor is, ha nem definiálja explicit módon. A fázisokat függőségi gráfba is rendezheti, így az egyik fázis a másik előtt fut. Egy szakaszra 256 feladat van korlátozva.
Feljegyzés
A szakaszok támogatása az Azure DevOps Server 2019.1-ben lett hozzáadva.
Szakaszok megadása
Feljegyzés
A szakaszok támogatása az Azure DevOps Server 2019.1-ben lett hozzáadva.
A legegyszerűbb esetben nincs szükség logikai határokra a folyamatban. Ebben az esetben nem kell explicit módon használnia a kulcsszót stage
. Közvetlenül megadhatja a feladatokat a YAML-fájlban.
# 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"
Ha több fázisba rendezi a folyamatot, a kulcsszót stages
használja.
stages:
- stage: A
jobs:
- job: A1
- job: A2
- stage: B
jobs:
- job: B1
- job: B2
Ha a szakasz szintjén ad meg egy pool
értéket, akkor az adott szakaszban definiált összes feladat ezt a készletet használja, kivéve, ha a feladat szintjén van megadva.
Feljegyzés
Az Azure DevOps Server 2019-ben a készletek csak feladatszinten adhatók meg.
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
A szakasz megadásának teljes szintaxisa a következő:
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]
Függőségek megadása
Feljegyzés
A szakaszok támogatása az Azure DevOps Server 2019.1-ben lett hozzáadva.
Ha egy folyamat több fázisát definiálja, alapértelmezés szerint egymás után futnak abban a sorrendben, amelyben a YAML-fájlban definiálja őket. Ez alól kivételt képeznek a függőségek hozzáadásakor. Függőségek esetén a szakaszok a követelmények sorrendjében futnak dependsOn
.
A folyamatoknak legalább egy fázist tartalmazniuk kell függőségek nélkül.
Több szakasz és függőségük meghatározásának szintaxisa a következő:
stages:
- stage: string
dependsOn: string
condition: string
Egymást követő példaszakaszok:
# 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:
...
Párhuzamosan futó példaszakaszok:
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élda a ki- és befúvatásra:
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
Feltételek meghatározása
Megadhatja azokat a feltételeket, amelyek mellett az egyes szakaszok kifejezésekkel futnak. Alapértelmezés szerint egy szakasz akkor fut, ha nem függ semmilyen más fázistól, vagy ha az összes fázis, amelytől függ, befejeződött és sikeres volt. Ezt a viselkedést úgy szabhatja testre, hogy egy szakaszt arra kényszerít, hogy futtasson még akkor is, ha egy előző szakasz meghibásodik, vagy egyéni feltételt ad meg.
Ha testre szabja az előző lépések alapértelmezett feltételét egy szakaszhoz, akkor eltávolítja a befejezés és a sikeresség feltételeit. Ha tehát egyéni feltételt használ, gyakran használatos and(succeeded(),custom_condition)
annak ellenőrzésére, hogy az előző szakasz sikeresen lefutott-e. Ellenkező esetben a szakasz az előző szakasz eredményétől függetlenül fut.
Feljegyzés
A sikertelen ('JOBNAME/STAGENAME') és a sikeres ('JOBNAME/STAGENAME') feltételek a következő példában látható módon csak YAML-folyamatok esetében működnek.
Feljegyzés
A szakaszok támogatása az Azure DevOps Server 2019.1-ben lett hozzáadva.
Példa egy szakasz futtatására az előző szakasz futtatásának állapota alapján:
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élda egyéni feltétel használatára:
stages:
- stage: A
- stage: B
condition: and(succeeded(), eq(variables['build.sourceBranch'], 'refs/heads/main'))
Sorbanállási szabályzatok megadása
A YAML-folyamatok nem támogatják a sorba állítási szabályzatokat. A folyamat minden egyes futtatása független a többi futtatástól, és nem tud a többi futtatásról. Más szóval a két egymást követő véglegesítés két folyamatot indíthat el, és mindkettő ugyanazt a fázissorozatot hajtja végre anélkül, hogy egymásra vár. Bár a YAML-folyamatokra sorba állítási szabályzatokat hozunk létre, javasoljuk, hogy manuális jóváhagyásokkal manuálisan rendezze és vezérelje a végrehajtás sorrendjét, ha ez fontos.
Jóváhagyások megadása
Manuálisan szabályozhatja, hogy mikor fusson egy szakasz jóváhagyási ellenőrzésekkel. Ezt gyakran használják az éles környezetekben történő üzembe helyezés szabályozására. Az ellenőrzések egy olyan mechanizmus, amely az erőforrás tulajdonosának rendelkezésére áll annak szabályozására, hogy a folyamat egy szakasza mikor és mikor használhat fel erőforrást. Egy erőforrás, például egy környezet tulajdonosaként megadhatja azokat az ellenőrzéseket, amelyeket teljesítenie kell ahhoz, hogy megkezdődjön az erőforrás egy szakaszának felhasználása.
Jelenleg a manuális jóváhagyási ellenőrzések támogatottak a környezetekben. További információ: Jóváhagyások.
Az Azure DevOps Server ezen verziójában a YAML-folyamatok még nem támogatják a jóváhagyásokat.
Manuális eseményindító hozzáadása
A manuálisan aktivált YAML-folyamatszakaszok lehetővé teszik, hogy egységes folyamat legyen, anélkül, hogy mindig a befejezésig futtatta volna.
Előfordulhat például, hogy a folyamat szakaszokat tartalmaz az előkészítési környezetben való üzembe helyezéshez, teszteléshez, üzembe helyezéshez és éles környezetben való üzembe helyezéshez. Előfordulhat, hogy azt szeretné, hogy az éles üzembe helyezés kivételével minden fázis automatikusan fusson, amelyet érdemes manuálisan aktiválni, amikor készen áll.
A funkció használatához adja hozzá a trigger: manual
tulajdonságot egy szakaszhoz.
Az alábbi példában a fejlesztési fázis automatikusan fut, míg az éles fázis manuális aktiválást igényel. Mindkét szakasz egy hello world kimeneti szkriptet futtat.
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'
Szakasz megjelölése nem választhatóként
Jelöljön meg egy szakaszt, hogy isSkippable: false
megakadályozza, hogy a folyamat felhasználói kihagyják a fázisokat. Lehet például egy YAML-sablon, amely egy olyan fázist injektál, amely minden folyamatban elvégzi a kártevők észlelését. Ha ezt a szakaszt állítja be isSkippable: false
, a Pipeline nem tudja kihagyni a kártevők észlelését.
Az alábbi példában a kártevőészlelési szakasz nem kihagyhatóként van megjelölve, ami azt jelenti, hogy a folyamatfuttatás részeként kell végrehajtani.
- stage: malware_detection
displayName: Malware detection
isSkippable: false
jobs:
- job: check_job
...
Ha egy szakasz nem kihagyható, a konfigurációs panel futtatásához a Szakaszok területen letiltott jelölőnégyzet jelenik meg.