Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
Šablony umožňují definovat opakovaně použitelný obsah, logiku a parametry v kanálech YAML. Abyste mohli efektivně pracovat se šablonami, musíte mít základní znalosti klíčových konceptů Azure Pipelines, jako jsou fáze, kroky a úlohy.
Existují dva hlavní typy šablon:
- Obsahuje šablony: Vložte opakovaně použitelný obsah do pipeliny. Pokud se šablona používá k zahrnutí obsahu, funguje jako direktiva include v mnoha programovacích jazycích. Obsah ze šablony je vložen do potrubí nebo šablony, která ji zahrnuje.
- Rozšiřuje šablony: Řiďte a definujte schéma pro to, co je povoleno v rourě. Při použití rozšiřující šablony se definuje logika a struktura, kterou musí potrubí dodržovat. To je užitečné pro vynucování standardů zabezpečení, dodržování předpisů nebo organizace.
Šablony vám můžou pomoct urychlit vývoj. V šabloně můžete mít například řadu stejných úloh a pak šablonu zahrnout vícekrát do různých fází kanálu YAML.
Šablony vám také můžou pomoct zabezpečit váš proces. Když šablona určuje, co je v kanálu povolené, šablona definuje logiku, kterou musí následovat jiný soubor. Můžete například chtít omezit, které úlohy se můžou spouštět. V tomto scénáři můžete pomocí šablony zabránit tomu, aby někdo úspěšně spustil úlohu, která porušuje zásady zabezpečení vaší organizace.
Pokud chcete plně využít výhod šablon, měli byste také použít výrazy šablon a parametry šablony.
Požadavky
| produkt | Požadavky |
|---|---|
| Azure DevOps | – Projekt Azure DevOps. – Možnost spouštět pipeliny na agentech hostovaných Microsoftem. Můžete si buď koupit paralelní úlohu, nebo si můžete vyžádat bezplatnou úroveň. – Základní znalost YAML a Azure Pipelines. Další informace naleznete v Vytvoření vašeho prvního potrubí. - Oprávnění: – Chcete-li vytvořit pipeline: musíte být ve skupině Přispěvatelé a skupina musí mít oprávnění Vytvořit sestavení pipeline nastavená na hodnotu Povolit. Členové skupiny Správci projektů můžou spravovat kanály. - Chcete-li vytvořit připojení služeb: Pro připojení služeb musíte mít roli Správce nebo Tvůrce. |
| GitHub | – Účet GitHubu . – Připojení ke službě GitHub pro autorizaci Azure Pipelines. |
| Azure | Předplatné služby Azure. |
Vynucená omezení pro aktualizace šablon
Šablony a výrazy šablon můžou způsobit explozivní růst velikosti a složitosti kanálu. Aby se zabránilo nechtěnému růstu, Azure Pipelines ukládá následující omezení:
- Není možné zahrnout více než 100 samostatných souborů YAML (přímo nebo nepřímo).
- Maximálně 100 úrovní vnoření šablon (šablony včetně jiných šablon)
- Při analýze YAML není využito více než 20 megabajtů paměti (v praxi se obvykle jedná o 600 kB až 2 MB YAML na disku v závislosti na použitých konkrétních funkcích).
Rozšířit ze šablony
Pokud chcete zvýšit zabezpečení, můžete vynutit, aby pipelina vycházela z konkrétní šablony. Soubor start-extends-template.yml definuje parametr buildSteps, který se pak použije v kanálu azure-pipelines.yml.
Pokud se v start-extends-template.ymlpředá buildStep s krokem skriptu, je odmítnut a sestavení pipeline selže.
Při rozšiřování šablony můžete zvýšit zabezpečení přidáním požadovaného schválení šablony.
# File: start-extends-template.yml
parameters:
- name: buildSteps # the name of the parameter is buildSteps
type: stepList # data type is StepList
default: [] # default value of buildSteps
stages:
- stage: secure_buildstage
pool:
vmImage: windows-latest
jobs:
- job: secure_buildjob
steps:
- script: echo This happens before code
displayName: 'Base: Pre-build'
- script: echo Building
displayName: 'Base: Build'
- ${{ each step in parameters.buildSteps }}:
- ${{ each pair in step }}:
${{ if ne(pair.value, 'CmdLine@2') }}:
${{ pair.key }}: ${{ pair.value }}
${{ if eq(pair.value, 'CmdLine@2') }}:
# Step is rejected by raising a YAML syntax error: Unexpected value 'CmdLine@2'
'${{ pair.value }}': error
- script: echo This happens after code
displayName: 'Base: Signing'
# File: azure-pipelines.yml
trigger:
- main
extends:
template: start-extends-template.yml
parameters:
buildSteps:
- bash: echo Test #Passes
displayName: succeed
- bash: echo "Test"
displayName: succeed
# Step is rejected by raising a YAML syntax error: Unexpected value 'CmdLine@2'
- task: CmdLine@2
inputs:
script: echo "Script Test"
# Step is rejected by raising a YAML syntax error: Unexpected value 'CmdLine@2'
- script: echo "Script Test"
Rozšíření ze šablony pomocí prostředků
Můžete také použít extends k rozšíření ze šablony ve vašem Azure potrubí, která obsahuje prostředky.
# File: azure-pipelines.yml
trigger:
- none
extends:
template: resource-extends-template.yml
# File: resource-extends-template.yml
resources:
pipelines:
- pipeline: my-pipeline
source: sourcePipeline
steps:
- script: echo "Testing resource template"
Vložení šablony
Můžete vložit obsah z jednoho YAML a znovu ho použít v jiném YAML. Vložení obsahu z jednoho YAML do jiného vám ušetří, abyste museli ručně zahrnout stejnou logiku na více místech. Šablona insert-npm-steps.yml souboru obsahuje kroky, které se znovu používají v azure-pipelines.ymlsouboru .
Poznámka:
Soubory šablony musí existovat v systému souborů na začátku spuštění pipelinu. Na šablony v artefaktu nemůžete odkazovat.
# File: templates/insert-npm-steps.yml
steps:
- script: npm install
- script: yarn install
- script: npm run compile
# File: azure-pipelines.yml
jobs:
- job: Linux
pool:
vmImage: 'ubuntu-latest'
steps:
- template: templates/insert-npm-steps.yml # Template reference
- job: Windows
pool:
vmImage: 'windows-latest'
steps:
- template: templates/insert-npm-steps.yml # Template reference
Opakované použití kroků napříč několika úlohami
Šablonu můžete vložit a znovu použít jeden nebo více kroků napříč několika úlohami. Kromě kroků ze šablony může každá úloha definovat další kroky.
# File: templates/insert-npm-steps.yml
steps:
- script: npm install
- script: npm test
# File: azure-pipelines.yml
jobs:
- job: Linux
pool:
vmImage: 'ubuntu-latest'
steps:
- template: templates/insert-npm-steps.yml # Template reference
- job: macOS
pool:
vmImage: 'macOS-latest'
steps:
- template: templates/insert-npm-steps.yml # Template reference
- job: Windows
pool:
vmImage: 'windows-latest'
steps:
- script: echo This script runs before the template's steps, only on Windows.
- template: templates/insert-npm-steps.yml # Template reference
- script: echo This step runs after the template's steps.
Opakované použití úloh napříč několika šablonami
Podobně jako u kroků je možné úlohy opakovaně používat se šablonami.
# File: templates/insert-jobs.yml
jobs:
- job: Ubuntu
pool:
vmImage: 'ubuntu-latest'
steps:
- bash: echo "Hello Ubuntu"
- job: Windows
pool:
vmImage: 'windows-latest'
steps:
- bash: echo "Hello Windows"
# File: azure-pipelines.yml
jobs:
- template: templates/insert-jobs.yml # Template reference
Při práci s více úlohami nezapomeňte odebrat název úlohy v souboru šablony, aby nedocházelo ke konfliktům.
# File: templates/insert-multiple-jobs.yml
jobs:
- job:
pool:
vmImage: 'ubuntu-latest'
steps:
- bash: echo "Hello Ubuntu"
- job:
pool:
vmImage: 'windows-latest'
steps:
- bash: echo "Hello Windows"
# File: azure-pipelines.yml
jobs:
- template: templates/insert-multiple-job.yml # Template reference
- template: templates/insert-multiple-jobs.yml # Template reference
- template: templates/insert-multiple-jobs.yml # Template reference
Opakované použití fází napříč několika šablonami
Fáze lze také opakovaně používat se šablonami.
# File: templates/insert-stage1.yml
stages:
- stage: Angular
jobs:
- job: angularinstall
steps:
- script: npm install angular
# File: templates/insert-stage2.yml
stages:
- stage: Build
jobs:
- job: build
steps:
- script: npm run build
# File: azure-pipelines.yml
trigger:
- main
pool:
vmImage: 'ubuntu-latest'
stages:
- stage: Install
jobs:
- job: npminstall
steps:
- task: Npm@1
inputs:
command: 'install'
- template: templates/insert-stage1.yml # Template reference
- template: templates/insert-stage2.yml # Template reference
Přidání parametrů do šablon úloh, fází a kroků
V následujících šablonách:
-
templates/npm-with-params.ymldefinuje dva parametry:nameavmImagevytvoří úlohu s parametrem name pro název úlohy a parametrem vmImage pro image virtuálního počítače. - Kanál (
azure-pipelines.yml) třikrát odkazuje na šablonu s různými hodnotami parametrů odkazujícími na názvy operačních systémů a imagí virtuálních počítačů. - Vytvořený kanál běží na jiném obrazu virtuálního počítače a je pojmenován podle zadaného operačního systému. Každá úloha provádí instalaci npm a testovací kroky npm.
# File: templates/npm-with-params.yml
parameters:
- name: name # defaults for any parameters that aren't specified
default: ''
- name: vmImage
default: ''
jobs:
- job: ${{ parameters.name }}
pool:
vmImage: ${{ parameters.vmImage }}
steps:
- script: npm install
- script: npm test
Při použití šablony ve vašem pracovním procesu zadejte hodnoty parametrů šablony.
# File: azure-pipelines.yml
jobs:
- template: templates/npm-with-params.yml # Template reference
parameters:
name: Linux
vmImage: 'ubuntu-latest'
- template: templates/npm-with-params.yml # Template reference
parameters:
name: macOS
vmImage: 'macOS-latest'
- template: templates/npm-with-params.yml # Template reference
parameters:
name: Windows
vmImage: 'windows-latest'
Šablony fází s více parametry
V následujících šablonách:
- Šablona
stage-template.ymldefinuje čtyři parametry:stageName,jobName,vmImageascriptPath, všechny řetězce typu. Šablona vytvoří fázi pomocí parametrustageNamek nastavení názvu fáze, definuje úlohu sjobNamea obsahuje krok pro spuštění skriptu. - Potrubí
azure-pipeline.ymlpoté dynamicky definuje etapy a úkoly pomocí parametrů a spustí úkol, který provádí skript,build-script.sh.
# stage-template.yml
parameters:
- name: stageName
type: string
- name: jobName
type: string
- name: vmImage
type: string
- name: scriptPath
type: string
stages:
- stage: ${{ parameters.stageName }}
jobs:
- job: ${{ parameters.jobName }}
pool:
vmImage: ${{ parameters.vmImage }}
steps:
- script: ./${{ parameters.scriptPath }}
# azure-pipelines.yml
trigger:
- main
stages:
- template: stage-template.yml
parameters:
stageName: 'BuildStage'
jobName: 'BuildJob'
scriptPath: 'build-script.sh' # replace with script in your repository
vmImage: 'ubuntu-latest'
Šablony s kroky a parametry
Parametry můžete použít také se šablonami kroků nebo fází.
V následujících šablonách:
- Šablona (
templates/steps-with-params.yml) definuje parametr s výchozírunExtendedTestshodnotou false. - Potrubí (
azure-pipelines.yml) se spustínpm testanpm test --extended, protože je parametrrunExtendedTestspravdivý.
# File: templates/steps-with-params.yml
parameters:
- name: 'runExtendedTests' # defaults for any parameters that aren't specified
type: boolean
default: false
steps:
- script: npm test
- ${{ if eq(parameters.runExtendedTests, true) }}:
- script: npm test --extended
Při používání šablony v pipeline zadejte hodnoty parametrů šablony.
# File: azure-pipelines.yml
steps:
- script: npm install
- template: templates/steps-with-params.yml # Template reference
parameters:
runExtendedTests: 'true'
Poznámka:
Skalární parametry bez zadaného typu se považují za řetězce.
Předpokládejme, že eq(true, parameters['myparam']) vrátí true, i když parametr myparam je slovo false, pokud myparam není explicitně nastaveno boolean.
Neprázdné řetězce se v logickém kontextu převádějí na true.
Tento výraz lze přepsat tak, aby explicitně porovnával řetězce: eq(parameters['myparam'], 'true').
Parametry nejsou omezeny na skalární řetězce.
Podívejte se na seznam datových typů.
Například pomocí object typu:
# azure-pipelines.yml
jobs:
- template: process.yml
parameters:
pool: # this parameter is called `pool`
vmImage: ubuntu-latest # and it's a mapping rather than a string
# process.yml
parameters:
- name: 'pool'
type: object
default: {}
jobs:
- job: build
pool: ${{ parameters.pool }}
Opakované použití proměnné
Proměnné lze definovat v jednom JAZYCE YAML a zahrnout do jiné šablony. To může být užitečné, pokud chcete uložit všechny proměnné do jednoho souboru. Pokud k zahrnutí proměnných do kanálu používáte šablonu, můžete ji použít jenom k definování proměnných. Při rozšiřování šablony můžete použít kroky a složitější logiku.
Poznámka:
Místo proměnných použijte parametry pro přidání zabezpečení, jako je zadání typu. Další informace o důležitosti použití parametrů pro úlohy prostředí najdete v dokumentaci k ověření parametrů pro povolení argumentů úloh prostředí.
V tomto příkladu je proměnná favoriteVeggie zahrnuta do azure-pipelines.yml.
# File: insert-vars.yml
variables:
favoriteVeggie: 'brussels sprouts'
# File: azure-pipelines.yml
variables:
- template: insert-vars.yml # Template reference
steps:
- script: echo My favorite vegetable is ${{ variables.favoriteVeggie }}.
Šablony proměnných s parametry
Parametry můžete předat proměnným pomocí šablon. V tomto příkladu předáváte parametr DIRECTORY do proměnné RELEASE_COMMAND.
# File: templates/package-release-with-params.yml
parameters:
- name: DIRECTORY
type: string
default: "." # defaults for any parameters that specified with "." (current directory)
variables:
- name: RELEASE_COMMAND
value: grep version ${{ parameters.DIRECTORY }}/package.json | awk -F \" '{print $4}'
Při používání šablony v pipeline zadejte hodnoty parametrů šablony.
# File: azure-pipelines.yml
variables: # Global variables
- template: package-release-with-params.yml # Template reference
parameters:
DIRECTORY: "azure/checker"
pool:
vmImage: 'ubuntu-latest'
stages:
- stage: Release_Stage
displayName: Release Version
variables: # Stage variables
- template: package-release-with-params.yml # Template reference
parameters:
DIRECTORY: "azure/todo-list"
jobs:
- job: A
steps:
- bash: $(RELEASE_COMMAND) #output release command
Rozšíření pomocí šablony a použití šablony s proměnnými
Jedním z běžných scénářů je mít pipelinu s fázemi pro vývoj, testování a produkci, která používá jak šablonu zahrnující proměnné, tak šablonu rozšiřující pro fáze a úlohy.
V následujícím příkladu variables-template.yml definuje sadu proměnných virtuálního počítače, které se pak používají v azure-pipeline.yml.
# variables-template.yml
variables:
- name: devVmImage
value: 'ubuntu-latest'
- name: testVmImage
value: 'ubuntu-latest'
- name: prodVmImage
value: 'ubuntu-latest'
Následující soubor stage-template.yml definuje opakovaně použitelnou konfiguraci fáze se třemi parametry (name, vmImage, steps) a úlohou s názvem Build.
# stage-template.yml
parameters:
- name: name
type: string
default: ''
- name: vmImage
type: string
default: ''
- name: steps
type: stepList
default: []
stages:
- stage: ${{ parameters.name }}
jobs:
- job: Build
pool:
vmImage: ${{ parameters.vmImage }}
steps: ${{ parameters.steps }}
Následující kanál importuje azure-pipelines.ymlproměnné z variables-template.ymla pak použije stage-template.yml šablonu pro každou fázi. Každá fáze (vývoj, testování, prod) je definována se stejnou šablonou, ale s různými parametry, což vede k konzistenci napříč fázemi a zároveň umožňuje přizpůsobení. Fáze "Prod" obsahuje proměnnou prostředí například k použití při autentizaci. Další informace o definování parametrů najdete v tématu Parametry šablony.
# azure-pipelines.yml
trigger:
- main
variables:
- template: variables-template.yml
stages:
- template: stage-template.yml
parameters:
name: Dev
vmImage: ${{ variables.devVmImage }}
steps:
- script: echo "Building in Dev"
- template: stage-template.yml
parameters:
name: Test
vmImage: ${{ variables.testVmImage }}
steps:
- script: echo "Testing in Test"
- template: stage-template.yml
parameters:
name: Prod
vmImage: ${{ variables.prodVmImage }}
steps:
- script: echo "Deploying to Prod"
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
Cesty k referenční šabloně
Cesty k šablonám mohou být absolutní, v rámci úložiště, nebo relativní k souboru, který je připojuje.
Chcete-li použít absolutní cestu, musí cesta šablony začínat na ./ Všechny ostatní cesty jsou považovány za relativní.
Tady je příklad vnořené hierarchie.
|
+-- fileA.yml
|
+-- dir1/
|
+-- fileB.yml
|
+-- dir2/
|
+-- fileC.yml
Pak můžete v fileA.yml odkazovat na fileB.yml a fileC.yml takto.
steps:
- template: dir1/fileB.yml
- template: dir1/dir2/fileC.yml
Pokud fileC.yml je vaším výchozím bodem, můžete zahrnout fileA.yml a fileB.yml takto.
steps:
- template: ../../fileA.yml
- template: ../fileB.yml
Pokud je fileB.yml váš výchozí bod, můžete zahrnout fileA.yml a fileC.yml tímto způsobem.
steps:
- template: ../fileA.yml
- template: dir2/fileC.yml
Alternativně lze fileB.yml použít k odkazu na fileA.yml a fileC.yml pomocí absolutních cest, jako je tato.
steps:
- template: /fileA.yml
- template: /dir1/dir2/fileC.yml
Ukládání šablon v jiných úložištích
Šablony můžete uchovávat v jiných úložištích. Předpokládejme například, že máte základní kanál, který chcete, aby používaly všechny vaše aplikační kanály. Šablonu můžete umístit do základního úložiště a pak na ni odkazovat z každého úložiště vaší aplikace:
# Repo: Contoso/BuildTemplates
# File: common.yml
parameters:
- name: 'vmImage'
default: 'ubuntu-22.04'
type: string
jobs:
- job: Build
pool:
vmImage: ${{ parameters.vmImage }}
steps:
- script: npm install
- script: npm test
Teď můžete tuto šablonu znovu použít v několika kanálech.
resources Pomocí specifikace zadejte umístění základního úložiště.
Když odkazujete na základní úložiště, použijte @ a název, který resourcesjste mu dali .
# Repo: Contoso/LinuxProduct
# File: azure-pipelines.yml
resources:
repositories:
- repository: templates
type: github
name: Contoso/BuildTemplates
jobs:
- template: common.yml@templates # Template reference
# Repo: Contoso/WindowsProduct
# File: azure-pipelines.yml
resources:
repositories:
- repository: templates
type: github
name: Contoso/BuildTemplates
ref: refs/tags/v1.0 # optional ref to pin to
jobs:
- template: common.yml@templates # Template reference
parameters:
vmImage: 'windows-latest'
Pro type: githubje name<identity>/<repo> jako v předchozím příkladu.
Pro type: git (Azure Repos) name je <project>/<repo>.
Pokud je tento projekt v samostatné organizaci Azure DevOps, musíte nakonfigurovat připojení služby typu Azure Repos/Team Foundation Server s přístupem k projektu a zahrnout ho do YAML:
resources:
repositories:
- repository: templates
name: Contoso/BuildTemplates
endpoint: myServiceConnection # Azure DevOps service connection
jobs:
- template: common.yml@templates
Úložiště se vyřeší jen jednou, když se potrubí spustí. Potom se stejný prostředek použije během spuštění kanálu. Používají se jenom soubory šablon. Jakmile se šablony plně rozšíří, spustí se poslední pipeline, jako by byla definována zcela ve zdrojovém úložišti. To znamená, že nemůžete použít skripty z úložiště šablony ve vaší pipelině.
Pokud chcete použít konkrétní, pevnou verzi šablony, nezapomeňte ji připnout k ref.
refs jsou buď větve (refs/heads/<name>) nebo značky (refs/tags/<name>).
Pokud chcete připnout konkrétní potvrzení, nejprve vytvořte značku odkazující na toto potvrzení a pak na tuto značku připněte.
Poznámka:
Pokud není zadán žádný ref, kanál ve výchozím nastavení používá refs/heads/main.
Můžete také připnout na konkrétní commit v Gitu pomocí hodnoty SHA pro zdroj úložiště. Hodnota SHA je 40znakový hashovací kontrolní součet, který jednoznačně identifikuje commit.
resources:
repositories:
- repository: templates
type: git
name: Contoso/BuildTemplates
ref: 1234567890abcdef1234567890abcdef12345678
Můžete také použít @self k odkazování na úložiště, kde byl nalezen původní kanál.
To je vhodné pro použití v extends šablonách, pokud chcete odkazovat na obsah v úložišti rozšiřujícího se datového toku.
Příklad:
# Repo: Contoso/Central
# File: template.yml
jobs:
- job: PreBuild
steps: []
# Template reference to the repo where this template was
# included from - consumers of the template are expected
# to provide a "BuildJobs.yml"
- template: BuildJobs.yml@self
- job: PostBuild
steps: []
# Repo: Contoso/MyProduct
# File: azure-pipelines.yml
resources:
repositories:
- repository: templates
type: git
name: Contoso/Central
extends:
template: template.yml@templates
# Repo: Contoso/MyProduct
# File: BuildJobs.yml
jobs:
- job: Build
steps: []
časté otázky
Jak se používají proměnné v šablonách?
Někdy je užitečné nastavit parametry na hodnoty na základě proměnných. Parametry se rozšiřují v rané fázi zpracování běhu pipeline, takže nejsou k dispozici všechny proměnné. Informace o předdefinovaných proměnných, které jsou k dispozici v šablonách, najdete v tématu Používání předdefinovaných proměnných.
V tomto příkladu se předdefinované proměnné Build.SourceBranchBuild.Reason používají v podmínkách v template.yml.
# File: azure-pipelines.yml
trigger:
- main
extends:
template: template.yml
# File: template.yml
steps:
- script: echo Build.SourceBranch = $(Build.SourceBranch) # outputs refs/heads/main
- script: echo Build.Reason = $(Build.Reason) # outputs IndividualCI
- ${{ if eq(variables['Build.SourceBranch'], 'refs/heads/main') }}:
- script: echo I run only if Build.SourceBranch = refs/heads/main
- ${{ if eq(variables['Build.Reason'], 'IndividualCI') }}:
- script: echo I run only if Build.Reason = IndividualCI
- script: echo I run after the conditions