Cvičení – publikování výsledku do kanálu
V tomto okamžiku můžete vytvořit webový projekt Space Game prostřednictvím kanálu.
Ale kam se výsledky sestavení posílají? Výstup sestavení teď zůstane na dočasném buildovém serveru. Mara potřebuje způsob, jak předat toto sestavení Amitě, aby mohla začít testovat.
Artefakty sestavení můžete ukládat do Azure Pipelines, aby byly po dokončení sestavení dostupné ostatním uživatelům ve vašem týmu, což tady uděláte. Jako bonus budete také refaktorovat konfiguraci sestavení, aby používala proměnné pro snadnější čtení a udržení konfigurace v aktuálním stavu.
Poznámka:
Azure Pipelines umožňuje automaticky nasadit sestavenou aplikaci do testovacího nebo produkčního prostředí spuštěného v cloudu nebo ve vašem datacentru. Prozatím má Mara za cíl vytvořit sestavení, která může předat ke kontrole kvality pomocí stávajících procesů.
Publikování sestavení do kanálu
V .NET můžete aplikaci zabalit jako soubor .zip. Pak můžete pomocí integrované úlohy PublishBuildArtifacts@1
publikovat soubor .zip do Azure Pipelines.
V editoru Visual Studio Code změňte azure-pipelines.yml , jak vidíte tady:
trigger: - '*' pool: name: 'Default' #replace if needed with name of your agent pool steps: - task: UseDotNet@2 displayName: 'Use .NET SDK 6.x' inputs: version: '6.x' - task: Npm@1 displayName: 'Run npm install' inputs: verbose: false - script: './node_modules/.bin/node-sass Tailspin.SpaceGame.Web/wwwroot --output Tailspin.SpaceGame.Web/wwwroot' 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: Tailspin.SpaceGame.Web/wwwroot - task: DotNetCoreCLI@2 displayName: 'Restore project dependencies' inputs: command: 'restore' projects: '**/*.csproj' - 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 - task: PublishBuildArtifacts@1 displayName: 'Publish Artifact: drop' condition: succeeded()
trigger: - '*' pool: vmImage: ubuntu-latest steps: - task: UseDotNet@2 displayName: 'Use .NET SDK 6.x' inputs: version: '6.x' - task: Npm@1 displayName: 'Run npm install' inputs: verbose: false - script: './node_modules/.bin/node-sass Tailspin.SpaceGame.Web/wwwroot --output Tailspin.SpaceGame.Web/wwwroot' 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: Tailspin.SpaceGame.Web/wwwroot - task: DotNetCoreCLI@2 displayName: 'Restore project dependencies' inputs: command: 'restore' projects: '**/*.csproj' - 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 - task: PublishBuildArtifacts@1 displayName: 'Publish Artifact: drop' condition: succeeded()
Tato verze azure-pipelines.yml vypadá jako předchozí verze, ale přidává dvě další úlohy.
První úloha pomocí
DotNetCoreCLI@2
úlohy publikuje nebo zabalí výsledky sestavení aplikace (včetně jejích závislostí) do složky. ArgumentzipAfterPublish
určuje, že mají být sestavené výsledky přidány do souboru .zip.Druhá úloha používá úlohu
PublishBuildArtifacts@1
k publikování souboru .zip do Azure Pipelines. Argumentcondition
určuje, že se tato úloha spustí, jenom když je předchozí úloha úspěšná.succeeded()
je výchozí podmínka, takže ji nemusíte zadávat, ale ukážeme ji tady, abychom zobrazili její použití.Z integrovaného terminálu přidejte do indexu azure-pipelines.yml , potvrďte změnu a nasdílte změnu na GitHub.
Tip
Než tyto příkazy Git spustíte, nezapomeňte uložit azure-pipelines.yml.
git add azure-pipelines.yml git commit -m "Add publish tasks" git push origin build-pipeline
Stejně jako předtím sledujte v Azure Pipelines, jak sestavení prochází všemi kroky.
Po dokončení kanálu se vraťte do souhrnu buildu.
V části Související je publikováno 1.
Snímek obrazovky se souhrnem sestavení Podrobnosti zahrnují úložiště a verzi, čas spuštění a uplynulý čas a odkaz na publikovaný artefakt sestavení.
Vyberte artefakt.
Rozbalte složku pro vkládání.
Zobrazí se soubor .zip, který obsahuje vytvořenou aplikaci a její závislosti:
Snímek obrazovky s zabalenou webovou aplikací v Průzkumníku artefaktů
Pokud chcete vyzkoušet volitelné cvičení, můžete si tento .zip soubor stáhnout do počítače a prozkoumat jeho obsah.
Definování proměnných ke zlepšení čitelnosti
Mara si zpětně kontroluje svou práci. Konfigurace sestavení dělá to, co potřebuje, ale chce zajistit, aby Andy a ostatní mohli snadno udržovat aktuální a rozšířit ji.
Proměnné umožňují definovat hodnoty jednou a odkazovat na tyto hodnoty v celém kanálu. Azure Pipelines nahradí každou proměnnou aktuální hodnotou při spuštění kanálu.
Stejně jako v jiných programovacích jazycích umožňují proměnné například:
- Definujte hodnoty, které se můžou mezi spuštěními kanálu změnit.
- Ukládejte informace, které se opakují v rámci kanálu, například číslo verze nebo cesta k souboru, na jednom místě. Tímto způsobem nemusíte aktualizovat všechny výskyty, když je potřeba změnit.
Azure Pipelines poskytuje mnoho předdefinovaných proměnných. Tyto proměnné popisují aspekty procesu sestavení, jako je identifikátor sestavení a názvy adresářů, ve kterých je software sestaven a připravený.
Můžete také definovat vlastní proměnné. Tady je příklad, který ukazuje proměnnou s názvem buildConfiguration
, která definuje konfiguraci sestavení vydané verze:
variables:
buildConfiguration: 'Release'
Proměnné použijte, když se stejná hodnota opakuje vícekrát nebo když se může změnit hodnota, například verze závislosti.
Proměnnou nemusíte vytvářet pro každou konfiguraci sestavení. Ve skutečnosti může příliš mnoho proměnných znesnadnit čitelnost a pochopení kódu kanálu ostatním.
Na chvíli se podívejte na azure-pipelines.yml. Všimněte si, že se opakují tyto hodnoty:
- Konfigurace sestavení:
Release
. - Umístění adresáře wwwroot:
Tailspin.SpaceGame.Web/wwwroot
. - Verze sady .NET SDK:
6.x
.
Teď tyto hodnoty definujete jednou pomocí proměnných. Pak budete odkazovat na proměnné v celém kanálu.
V editoru Visual Studio Code změňte azure-pipelines.yml , jak vidíte tady:
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' - task: DotNetCoreCLI@2 displayName: 'Build the project - $(buildConfiguration)' inputs: command: 'build' arguments: '--no-restore --configuration $(buildConfiguration)' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Publish the project - $(buildConfiguration)' inputs: command: 'publish' projects: '**/*.csproj' publishWebProjects: false arguments: '--no-build --configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)/$(buildConfiguration)' zipAfterPublish: true - task: PublishBuildArtifacts@1 displayName: 'Publish Artifact: drop' condition: succeeded()
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' - task: DotNetCoreCLI@2 displayName: 'Build the project - $(buildConfiguration)' inputs: command: 'build' arguments: '--no-restore --configuration $(buildConfiguration)' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Publish the project - $(buildConfiguration)' inputs: command: 'publish' projects: '**/*.csproj' publishWebProjects: false arguments: '--no-build --configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)/$(buildConfiguration)' zipAfterPublish: true - task: PublishBuildArtifacts@1 displayName: 'Publish Artifact: drop' condition: succeeded()
Všimněte si oddílu
variables
, který definuje tyto proměnné:buildConfiguration
: Určuje konfiguraci sestavení.wwwrootDir
: Určuje cestu k adresáři wwwroot .dotnetSdkVersion
: Určuje verzi sady .NET SDK, která se má použít.
Pokud chcete na tyto proměnné odkazovat, použijte
$()
syntaxi stejně jako u předdefinovaných proměnných. Tady je krok, který spouští sasy uzlu pro převod souborů Sass na šablony stylů CSS. Pokud chcete získat cestu k adresáři wwwroot , odkazuje na proměnnouwwwrootDir
.- script: './node_modules/.bin/node-sass $(wwwrootDir) --output $(wwwrootDir)' displayName: 'Compile Sass assets'
Příkaz skriptu pomocí proměnné definuje zdrojový adresář pro soubory Sass i adresář, do kterého se mají zapisovat soubory CSS. Používá také proměnnou k definování názvu úlohy, který se zobrazuje v uživatelském rozhraní.
Z integrovaného terminálu přidejte do indexu azure-pipelines.yml , potvrďte změnu a nasdílte změnu na GitHub.
git add azure-pipelines.yml git commit -m "Refactor common variables" git push origin build-pipeline
V Azure Pipelines sledujte, jak sestavení prochází všemi kroky.
Uvidíte, že proměnné se při spuštění sestavení nahradí jejich hodnotami. Tady je
UseDotNet@2
například úloha, která nastaví verzi sady .NET SDK tak, aby se používala.Snímek obrazovky azure Pipelines znázorňující úlohu sady .NET SDK spuštěnou v kanálu
Stejně jako předtím můžete zobrazit artefakt po dokončení sestavení, abyste přešli na souhrn sestavení.
Gratulujeme! Úspěšně jste použili Azure Pipelines k vytvoření svého prvního artefaktu buildu.