Cvičení – sestavení více konfigurací pomocí šablon
V předchozích cvičeních jste implementovali kanál, který sestaví web Space Game . Začali jste skriptem, který provedl každou akci sestavení a namapoval každou akci na odpovídající úlohu kanálu. Výstupem kanálu je soubor .zip , který obsahuje zkompilovanou webovou aplikaci.
V tomto cvičení použijete šablonu k definování úkolů sestavení, které můžou sestavit jakoukoli konfiguraci definovanou v souboru projektu. Šablony umožňují definovat logiku jednou a pak ji několikrát znovu použít. Šablony spojují obsah více souborů YAML do jednoho kanálu.
Tip
Tento krok v modulu je volitelný. Pokud se v tuto chvíli nechcete o šablonách dozvědět, přejděte k dalšímu kroku a vyčistíte prostředí Azure DevOps. Další informace o šablonách najdete v tématu Typy šablon a použití.
Začneme setkáním s Marou a Amitou.
Ukázka
Mara chce s nadšením sdílet své výsledky a vyhledá Amitu, aby jí ukázala kanál buildu.
Amita: Jsem ohromen, že jste to udělal tak rychle! Ve skutečnosti jsem tě právě přišel vidět, protože jsem dostal e-mail s oznámením, že sestavení bylo připravené. Děkujeme! Vidím, že kanál sestavuje pouze konfiguraci verze. Používáme také buildy Ladění, abychom mohli zachytit další informace, pokud dojde k chybovému ukončení aplikace. Můžeme je přidat?
Mara: Naprosto. Když jsem to nastavovala, zapomněla jsem vzít sestavení pro ladění v potaz. Co kdybychom je přidali společně?
Amita: Ukázali jste mi soubor YAML, který definuje kroky sestavení, ale nejsem si jistý, že vím, jak ho upravit.
Mara: To je v pořádku. Můžeš se dívat a já budu psát. Projdeme to společně.
Jak byste definovali obě konfigurace sestavení?
Vezměte v úvahu následující úlohy, které sestavují a publikují konfiguraci webového projektu Space Game pro vydání. (Nepřidávejte tento kód do vašeho souboru azure-pipelines.yml.)
- task: DotNetCoreCLI@2
displayName: 'Build the project - Release'
inputs:
command: 'build'
arguments: '--no-restore --configuration Release'
projects: '**/*.csproj'
- task: DotNetCoreCLI@2
displayName: 'Publish the project - Release'
inputs:
command: 'publish'
projects: '**/*.csproj'
publishWebProjects: false
arguments: '--no-build --configuration Release --output $(Build.ArtifactStagingDirectory)/Release'
zipAfterPublish: true
Chcete-li sestavit konfiguraci ladění, můžete tyto dvě úlohy opakovat, ale nahradit Release
.Debug
Tím získáte výsledek, který hledáte, ale co se stane, když se sestavení stane složitějším nebo se změní vaše požadavky? Ručně byste museli vyhledat a změnit obě varianty jednotlivých úloh sestavení. Po přidání dalšíchpožadavkůch
Lepším řešením je použití šablony.
Co jsou šablony?
Šablona umožňuje definovat běžné úlohy sestavení jednou a opakovaně je používat.
Šablonu z nadřazeného kanálu zavoláte jako krok sestavení. Z nadřazeného kanálu můžete do šablony předávat parametry.
Mara může definovat úkoly pro sestavení a publikování aplikace jako šablony a pak tuto šablonu použít pro každou konfiguraci, kterou potřebuje.
Definování šablony
Nezapomeňte, že šablona umožňuje definovat běžné úlohy sestavení jednou a opakovaně tyto úkoly opakovaně používat. Šablonu zavoláte z její nadřazené šablony jako krok sestavení a předáte do ní parametry z nadřazeného kanálu.
Teď vytvoříte šablonu, která může sestavit jakoukoli konfiguraci definovanou v souboru projektu.
V integrované konzole editoru Visual Studio Code v kořenovém adresáři projektu vytvořte adresář šablon .
mkdir templates
V praxi můžete soubor šablony umístit do libovolného umístění. Nemusíte je vkládat do adresáře šablon .
V editoru Visual Studio Code vyberte Soubor > nový soubor. Pokud chcete prázdný soubor uložit jako build.yml v adresáři šablon projektu, vyberte Uložit soubor>. Příkladem může být ~/mslearn-tailspin-spacegame-web/templates.
Důležité
Stejně jako předtím ve Windows v seznamu Uložit jako typ vyberte YAML.
V editoru Visual Studio Code přidejte tento kód do build.yml:
parameters: buildConfiguration: 'Release' steps: - task: DotNetCoreCLI@2 displayName: 'Build the project - ${{ parameters.buildConfiguration }}' inputs: command: 'build' arguments: '--no-restore --configuration ${{ parameters.buildConfiguration }}' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Publish the project - ${{ parameters.buildConfiguration }}' inputs: command: 'publish' projects: '**/*.csproj' publishWebProjects: false arguments: '--no-build --configuration ${{ parameters.buildConfiguration }} --output $(Build.ArtifactStagingDirectory)/${{ parameters.buildConfiguration }}' zipAfterPublish: true
Tyto úlohy vypadají jako ty, které jste definovali dříve pro sestavení a publikování aplikace; ale v šabloně pracujete s vstupními parametry jinak, než pracujete s normálními proměnnými. Tady jsou dva rozdíly:
- V souboru šablony místo definování vstupů použijte
parameters
oddílvariables
. - V souboru šablony místo čtení hodnoty parametru použijte
${{ }}
syntaxi$()
. Při čtení hodnoty parametru zahrneteparameters
část do jejího názvu. Například${{ parameters.buildConfiguration }}
.
- V souboru šablony místo definování vstupů použijte
Zavolání šablony z kanálu
Teď zavoláte šablonu, kterou jste právě vytvořili z kanálu. Provedete to jednou pro konfiguraci ladění a pak opakujte proces konfigurace vydané verze.
V editoru Visual Studio Code upravte azure-pipelines.yml , jak vidíte tady:
trigger: - '*' pool: vmImage: ubuntu-latest variables: buildConfiguration: 'Release' wwwrootDir: 'Tailspin.SpaceGame.Web/wwwroot' dotnetSdkVersion: '6.x' steps: - task: UseDotNet@2 displayName: 'Use .NET SDK $(dotnetSdkVersion)' inputs: version: '$(dotnetSdkVersion)' - task: Npm@1 displayName: 'Run npm install' inputs: verbose: false - script: './node_modules/.bin/node-sass $(wwwrootDir) --output $(wwwrootDir)' displayName: 'Compile Sass assets' - task: gulp@1 displayName: 'Run gulp tasks' - script: 'echo "$(Build.DefinitionName), $(Build.BuildId), $(Build.BuildNumber)" > buildinfo.txt' displayName: 'Write build info' workingDirectory: $(wwwrootDir) - task: DotNetCoreCLI@2 displayName: 'Restore project dependencies' inputs: command: 'restore' projects: '**/*.csproj' - template: templates/build.yml parameters: buildConfiguration: 'Debug' - template: templates/build.yml parameters: buildConfiguration: 'Release' - task: PublishBuildArtifacts@1 displayName: 'Publish Artifact: drop' condition: succeeded()
trigger: - '*' pool: name: 'Default' #replace if needed with name of your agent pool variables: buildConfiguration: 'Release' wwwrootDir: 'Tailspin.SpaceGame.Web/wwwroot' dotnetSdkVersion: '6.x' steps: - task: UseDotNet@2 displayName: 'Use .NET SDK $(dotnetSdkVersion)' inputs: version: '$(dotnetSdkVersion)' - task: Npm@1 displayName: 'Run npm install' inputs: verbose: false - script: './node_modules/.bin/node-sass $(wwwrootDir) --output $(wwwrootDir)' displayName: 'Compile Sass assets' - task: gulp@1 displayName: 'Run gulp tasks' - script: 'echo "$(Build.DefinitionName), $(Build.BuildId), $(Build.BuildNumber)" > buildinfo.txt' displayName: 'Write build info' workingDirectory: $(wwwrootDir) - task: DotNetCoreCLI@2 displayName: 'Restore project dependencies' inputs: command: 'restore' projects: '**/*.csproj' - template: templates/build.yml parameters: buildConfiguration: 'Debug' - template: templates/build.yml parameters: buildConfiguration: 'Release' - task: PublishBuildArtifacts@1 displayName: 'Publish Artifact: drop' condition: succeeded()
Tento soubor vypadá jako původní s tím rozdílem, že nahrazuje úlohy sestavení a publikování voláním šablony, která dělá stejné úkoly.
Uvidíte, že se šablona volá jednou pro každou konfiguraci. K předání názvu konfigurace šabloně používá
parameters
každýtemplate
úkol argument.
Spuštění kanálu
Teď změny nasdílíte do GitHubu a zobrazí se spuštění kanálu.
V integrovaném terminálu přidejte azure-pipelines.yml a templates/build.yml do indexu, změny potvrďte a nasdílejte do GitHubu.
git add azure-pipelines.yml templates/build.yml git commit -m "Support build configurations" git push origin build-pipeline
Stejně jako předtím sledujte v Azure Pipelines, jak build prochází všemi kroky.
Při spuštění kanálu uvidíte, že proces rozbalí úlohy v rámci šablony. Úlohy, které sestaví a publikují projekt, se spustí dvakrát, jednou pro každou konfiguraci sestavení.
Po dokončení sestavení se vraťte na stránku souhrnu a vyberte publikovaný artefakt, jak jste to udělali předtím. Rozbalte složku pro vkládání.
Uvidíte, že kanál vytvoří soubor .zip pro konfiguraci ladění i konfiguraci vydané verze.
Sloučení větve do hlavní
V tuto chvíli máte funkční kanál buildu, který právě teď potřebuje všechno, co Mara potřebuje.
V praxi byste odeslali žádost o přijetí změn, která vaši větev sloučí build-pipeline
do main
větve.
Prozatím tento krok vynecháme. V dalším modulu se dozvíte několik způsobů, jak spolupracovat s týmem na GitHubu, včetně toho, jak odesílat, kontrolovat a slučovat žádosti o přijetí změn.