Zpracování podobností mezi prostředími pomocí šablon kanálů

Dokončeno

Když nasadíte změny do více prostředí, kroky, které jsou součástí nasazení do každého prostředí, jsou podobné nebo identické. V této lekci se naučíte používat šablony kanálů, abyste se vyhnuli opakování a umožnili opakované použití kódu kanálu.

Nasazení do několika prostředí

Po komunikaci se svými kolegy na webovém týmu se rozhodnete pro web vaší společnosti toy:

Diagram znázorňující řadu fází kanálu, které zahrnují testovací a produkční nasazení

  1. Kanál spustí linter Bicep a zkontroluje, jestli je kód Bicep platný a dodržuje osvědčené postupy.

    Lintování probíhá v kódu Bicep bez nutnosti připojení k Azure, takže nezáleží na tom, do kolika prostředí nasazujete. Spustí se jenom jednou.

  2. Kanál se nasadí do testovacího prostředí. Tato fáze vyžaduje:

    1. Spuštění předběžného ověření Azure Resource Manageru
    2. Nasazení kódu Bicep
    3. Spuštění některých testů v testovacím prostředí
  3. Pokud některá část kanálu selže, celý kanál se zastaví, abyste mohli problém prošetřit a vyřešit. Pokud ale vše proběhne úspěšně, váš kanál se bude dál nasazovat do produkčního prostředí:

    1. Kanál spustí fázi preview, která spustí operaci citlivostní operace v produkčním prostředí a zobrazí seznam změn provedených v produkčních prostředcích Azure. Fáze Preview také ověří nasazení, takže pro produkční prostředí nemusíte spouštět samostatnou fázi ověřování.
    2. Kanál se pozastaví pro ruční ověření.
    3. Pokud je přijato schválení, kanál spustí nasazení a orientační testy v produkčním prostředí.

Některé z těchto fází se opakují mezi testovacím a produkčním prostředím a některé se spouštějí jenom pro konkrétní prostředí:

Fáze Prostředí
Chomáče vláken bavlny Ani jedno – linting nefunguje s prostředím.
Ověřit Pouze test
Preview Pouze produkční prostředí
Nasadit Obě prostředí
Zahořování Obě prostředí

Když potřebujete opakovat kroky v kanálu, můžete se pokusit zkopírovat a vložit definice kroků. Je ale nejlepší se této praxi vyhnout. Při duplikování kódu kanálu je snadné udělat drobné chyby nebo věci, které se nesynchronizují. A v budoucnu, když potřebujete provést změnu kroků, musíte si pamatovat, že změnu použijete na více místech.

Šablony kanálů

Šablony kanálů umožňují vytvářet opakovaně použitelné oddíly definic kanálů. Šablony mohou definovat kroky, úlohy nebo dokonce celé fáze. Šablony můžete použít k vícenásobnému opakovanému použití částí kanálu v rámci jednoho kanálu nebo dokonce v několika kanálech. Můžete také vytvořit šablonu pro sadu proměnných, které chcete znovu použít v několika kanálech.

Šablona je jednoduše soubor YAML, který obsahuje opakovaně použitelný obsah. Jednoduchá šablona pro definici kroku může vypadat takto a může být uložena do souboru s názvem script.yml:

steps:
- script: |
    echo Hello world!

Šablonu v kanálu můžete použít pomocí klíčového template slova v místě, kde byste normálně definovali jednotlivé kroky:

jobs:
- job: Job1
  pool:
    vmImage: 'windows-latest'
  steps:
  - template: script.yml

- job: Job2
  pool:
    vmImage: 'ubuntu-latest'
  steps:
  - template: script.yml

Vnořené šablony

Šablony můžete vnořit i v jiných šablonách. Předpokládejme, že předchozí soubor má název jobs.yml a vytvoříte soubor s názvem azure-pipelines.yml , který znovu použije šablonu úlohy ve více fázích kanálu:

trigger:
  branches:
    include:
    - main

pool:
  vmImage: ubuntu-latest

stages:

- stage: Stage1
  jobs:
  - template: jobs.yml

- stage: Stage2
  jobs:
  - template: jobs.yml

Když vnořujete šablony nebo je opakovaně používáte v jednom kanálu, musíte být opatrní, abyste omylem nepoužíli stejný název pro více prostředků kanálu. Každá úloha v rámci fáze například potřebuje svůj vlastní identifikátor. Pokud tedy definujete identifikátor úlohy v šabloně, nemůžete ho ve stejné fázi opakovaně použít.

Když pracujete se složitými sadami kanálů nasazení, může být užitečné vytvořit vyhrazené úložiště Git pro šablony sdílených kanálů. Pak můžete stejné úložiště znovu použít ve více kanálech, i když se jedná o různé projekty. V souhrnu poskytujeme odkaz na další informace.

Parametry šablony kanálu

Parametry šablony kanálu usnadňují opakované použití souborů šablon, protože můžete povolit malé rozdíly v šablonách, kdykoli je použijete.

Při vytváření šablony kanálu můžete indikovat její parametry v horní části souboru:

parameters: 
- name: environmentType
  type: string
  default: 'Test'
- name: serviceConnectionName
  type: string

Můžete definovat tolik parametrů, kolik potřebujete. Ale stejně jako parametry Bicep se pokuste nepoužití parametrů šablony kanálu. Pro někoho jiného byste měli usnadnit opakované použití šablony, aniž byste museli zadávat příliš mnoho nastavení.

Každý parametr šablony kanálu má tři vlastnosti:

  • Název parametru, který použijete k odkazování na parametr v souborech šablony.
  • Typ parametru. Parametry podporují několik různých typů dat, včetně řetězce, čísla a logické hodnoty. Můžete také definovat složitější šablony, které přijímají strukturované objekty.
  • Výchozí hodnota parametru, která je volitelná. Pokud nezadáte výchozí hodnotu, musí být při použití šablony kanálu zadána hodnota.

V příkladu kanál definuje řetězcový parametr s názvem environmentType, který má výchozí hodnotu Test, a povinný parametr s názvem serviceConnectionName.

V šabloně kanálu použijete speciální syntaxi k odkazování na hodnotu parametru. Použijte makro, například v tomto příkladu ${{parameters.YOUR_PARAMETER_NAME}} :

steps:
- script: |
    echo Hello ${{parameters.environmentType}}!

Hodnotu parametrů předáte šabloně kanálu pomocí klíčového parameters slova, například v tomto příkladu:

steps:
- template: script.yml
  parameters:
    environmentType: Test

- template: script.yml
  parameters: 
    environmentType: Production

Parametry můžete použít také při přiřazování identifikátorů k úlohám a fázím v šablonách kanálů. Tato technika vám pomůže, když potřebujete ve svém kanálu opakovaně použít stejnou šablonu, například takto:

parameters:
- name: environmentType
  type: string
  default: 'Test'

jobs:
- job: Job1-${{parameters.environmentType}}
  pool:
    vmImage: 'windows-latest'
  steps:
  - template: script.yml

- job: Job2-${{parameters.environmentType}}
  pool:
    vmImage: 'ubuntu-latest'
  steps:
  - template: script.yml

Podmínky

Podmínky kanálu můžete použít k určení, jestli se má krok, úloha nebo i fáze spouštět v závislosti na zadaném pravidlu. Parametry šablony a podmínky kanálu můžete kombinovat a přizpůsobit tak proces nasazení v mnoha různých situacích.

Představte si například, že definujete šablonu kanálu, která spouští kroky skriptu. Chcete šablonu znovu použít pro každé prostředí. Když nasadíte produkční prostředí, chcete spustit další krok. Tady je postup, jak toho dosáhnout pomocí if makra a operátoru eq (equals):

parameters: 
- name: environmentType
  type: string
  default: 'Test'

steps:
- script: |
    echo Hello ${{parameters.environmentType}}!

- ${{ if eq(parameters.environmentType, 'Production') }}:
  - script: |
      echo This step only runs for production deployments.

Podmínka se zde přeloží na: pokud je hodnota parametru environmentType rovna Production, spusťte následující kroky.

Tip

Věnujte pozornost odsazení souboru YAML, když používáte podmínky jako v příkladu. Kroky, které podmínka platí, musí být odsazené o jednu úroveň navíc.

Můžete také zadat condition vlastnost ve fázi, úloze nebo kroku. Tady je příklad, který ukazuje, jak můžete pomocí operátoru ne (nerovná se) určit podmínku, například pokud hodnota parametru environmentType není rovna produkčnímu prostředí, a pak spusťte následující kroky:

- script: |
    echo This step only runs for non-production deployments.
  condition: ne('${{ parameters.environmentType }}', 'Production')

I když jsou podmínky způsobem, jak do kanálu přidat flexibilitu, zkuste je nepoužívat příliš mnoho. Zkomplikují váš kanál a znesnadní pochopení jeho toku. Pokud šablona kanálu obsahuje mnoho podmínek, nemusí být šablona nejlepším řešením pro pracovní postup, který plánujete spustit, a možná budete muset přepracovat svůj kanál.

Zvažte také použití komentářů YAML k vysvětlení podmínek, které používáte, a jakýchkoli dalších aspektů kanálu, které by mohly vyžadovat další vysvětlení. Komentáře vám pomůžou usnadnit pochopení kanálu a práci s nima v budoucnu. Ve cvičeních v tomto modulu jsou k dispozici příklady komentářů YAML.