Cvičení – publikování výsledku do kanálu

Dokončeno

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.

  1. 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. Argument zipAfterPublish 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. Argument condition 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í.

  2. 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
    
  3. Stejně jako předtím sledujte v Azure Pipelines, jak sestavení prochází všemi kroky.

  4. Po dokončení kanálu se vraťte do souhrnu buildu.

  5. V části Související je publikováno 1.

    Screenshot of the build summary. Details include the repository and version, the time started and elapsed, and a link to the published build artifact.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í.

  6. Vyberte artefakt.

  7. Rozbalte složku pro vkládání.

    Zobrazí se soubor .zip, který obsahuje vytvořenou aplikaci a její závislosti:

    Screenshot of the packaged web application in the Artifacts explorer.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.

  1. 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ěnnou wwwrootDir .

    - 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í.

  2. 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
    
  3. 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.

    Screenshot of Azure Pipelines showing the .NET SDK task running in the pipeline.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.