Упражнение. Публикация результата в конвейере
На этом этапе можно создать веб-проект Space Game через конвейер.
Но куда идут результаты сборки? Сейчас выходные данные сборки остаются на временном сервере сборки. Маре нужен способ передать эту сборку Амите, чтобы она начала тестирование.
Вы можете хранить артефакты сборки в Azure Pipelines, чтобы они были доступны другим пользователям в вашей команде после завершения сборки. Это то, что вы будете делать здесь. Кроме того, вы выполните рефакторинг конфигурации сборки для использования переменных, чтобы конфигурацию было проще читать и обновлять.
Примечание.
Azure Pipelines позволяет автоматически развернуть собранное приложение в среде тестирования или рабочей среде в облаке или в центре обработки данных. На данный момент мара цель заключается только в том, чтобы производить сборки, которые она может передать QA с помощью существующих процессов.
Публикация сборки в конвейере
В .NET можно упаковать приложение в виде ZIP-файла. Затем можно использовать встроенную задачу PublishBuildArtifacts@1
для публикации ZIP-файла в Azure Pipelines.
В Visual Studio Code измените azure-pipelines.yml следующим образом:
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()
Эта версия azure-pipelines.yml выглядит как предыдущая версия, но добавляет две дополнительные задачи.
Первая задача использует задачу
DotNetCoreCLI@2
для публикации или упаковки результатов сборки приложения (включая зависимости) в папку. АргументzipAfterPublish
указывает, что нужно добавить результаты сборки в ZIP-файл.Вторая задача использует задачу
PublishBuildArtifacts@1
для публикации ZIP-файла в Azure Pipelines. Аргументcondition
указывает, что задача должна выполняться только в том случае, если предыдущая задача выполнена успешно.succeeded()
является условием по умолчанию, поэтому его не нужно указывать, но мы показываем его здесь, чтобы показать его использование.В интегрированном терминале добавьте azure-pipelines.yml в индекс, зафиксируйте изменение и отправьте изменение в GitHub.
Совет
Прежде чем выполнять эти команды Git, не забудьте сохранить azure-pipelines.yml.
git add azure-pipelines.yml git commit -m "Add publish tasks" git push origin build-pipeline
Как и раньше, в Azure Pipelines проследите за всеми шагами сборки.
По завершении конвейера вернитесь к сводке сборки.
В разделе Related (Связанные) указывается 1 published (Опубликованных: 1).
Выберите артефакт.
Разверните папку удаления.
Появится файл ZIP, содержащий созданное приложение и его зависимости.
В качестве дополнительного упражнения можно скачать этот файл ZIP на компьютер и исследовать его содержимое.
Определение переменных для повышения удобства чтения
Мара изучает свою работу. Конфигурация сборки делает то, что она нуждается, но она хочет обеспечить Энди и другие могут легко помочь сохранить его в актуальном состоянии и расширить его.
С помощью переменных вы можете один раз определить значения и ссылаться на них в любом месте конвейера. Azure Pipelines заменяет каждую переменную текущим значением при запуске конвейера.
Как и в случае с другими языками программирования, переменные позволяют выполнять следующие действия.
- Определите значения, которые могут изменяться между запусками конвейера.
- Храните данные, которые повторяются в конвейере, например номер версии или путь к файлу, в одном месте. В этом случае вам не потребуется обновлять все повторения, когда что-то изменяется у вас.
Azure Pipelines предоставляет множество встроенных переменных. Эти переменные описывают аспекты процесса сборки, такие как идентификатор сборки и имена каталогов, в которых создается и выполняется программное обеспечение.
Также вы можете определить собственные переменные. Ниже приведен пример переменной buildConfiguration
, которая определяет конфигурацию сборки выпуска:
variables:
buildConfiguration: 'Release'
Используйте переменные, если повторять одно и то же значение несколько раз или когда значение, например версия зависимости, может измениться.
Не нужно создавать переменную для каждого фрагмента конфигурации сборки. На самом деле слишком много переменных сделают код конвейера сложнее для чтения и понимания.
Проверьте файл azure-pipelines.yml. Обратите внимание, что эти значения повторяются:
- Конфигурация сборки:
Release
. - Расположение каталога wwwroot:
Tailspin.SpaceGame.Web/wwwroot
. - Версия пакета SDK для .NET:
6.x
.
Теперь вы используете переменные для определения этих значений один раз. Затем вы ссылаетесь на переменные во всем конвейере.
В Visual Studio Code измените azure-pipelines.yml следующим образом:
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()
Обратите внимание на раздел
variables
, в котором определены эти переменные:buildConfiguration
: указывает конфигурацию сборки.wwwrootDir
: указывает путь к каталогу wwwroot.dotnetSdkVersion
: указывает используемую версию пакета SDK для .NET.
Чтобы ссылаться на эти переменные, используйте синтаксис
$()
точно так же, как вы ссылаетесь на встроенные переменные. Вот шаг, на котором выполняется node-Sass для преобразования файлов Sass в CSS. Для получения пути к каталогу wwwroot используется ссылка на переменнуюwwwrootDir
.- script: './node_modules/.bin/node-sass $(wwwrootDir) --output $(wwwrootDir)' displayName: 'Compile Sass assets'
Команда скрипта использует переменную для определения исходного каталога для файлов Sass и каталога, в котором записываются CSS-файлы. Она также использует переменную для определения имени задачи, отображаемого в пользовательском интерфейсе.
В интегрированном терминале добавьте azure-pipelines.yml в индекс, зафиксируйте изменение и отправьте изменение в GitHub.
git add azure-pipelines.yml git commit -m "Refactor common variables" git push origin build-pipeline
В Azure Pipelines проследите за всеми шагами сборки.
Вы увидите, что переменные заменяются на их значения при выполнении сборки. Например, в задаче
UseDotNet@2
задается используемая версия пакета SDK для .NET.Как и раньше, чтобы увидеть артефакт после завершения сборки, можно перейти к сводке сборки.
Поздравляем! Вы успешно использовали Azure Pipelines и создали первый артефакт сборки.