Упражнение. Создание конвейера

Завершено

На этом этапе Мара определила конфигурацию сборки для веб-сайта Space Game . Теперь ваша очередь. Вы создадите конвейер и свой первый артефакт сборки.

Как вы знаете, Мара использовала файл YAML для определения сборки. При создании конвейера процесс запрашивает файл YAML. В проекте еще нет этого файла.

Если вы не предоставляете исходный файл YAML для проекта, Azure Pipelines может создать его на основе типа приложения. В этом уроке вы скомпилируете приложение ASP.NET Core, однако Azure Pipelines также предоставляет начальные конфигурации сборки для других типов проектов, включая Java, Go и т. д.

Создание конвейера

  1. В Azure DevOps перейдите к проекту.

  2. На странице проекта или на левой панели выберите "Конвейеры".

  3. Выберите "Создать конвейер" (или "Создать конвейер", если этот конвейер не является первым в проекте).

  4. На вкладке Подключение выберите GitHub.

    При появлении запроса введите свои учетные данные на GitHub.

  5. На вкладке "Выбор " выберите репозиторий mslearn-tailspin-spacegame-web .

  6. Чтобы установить приложение Azure Pipelines, вы можете перенаправиться на GitHub. Если да, прокрутите страницу вниз и выберите "Утвердить" и " Установить".

  7. На вкладке "Настройка" выберите ASP.NET Core.

    Примечание.

    Если этот параметр не отображается, нажмите кнопку "Показать больше". Не выбирайте ASP.NET Core (платформа .NET Framework).

    Screenshot of locating ASP.NET Core from the list of provided application types.

  8. На вкладке "Рецензирование" обратите внимание на начальную конфигурацию сборки.

    Screenshot of Azure Pipelines showing the initial build configuration.

    Это очень базовая конфигурация, которую Azure DevOps предоставляет на основе типа приложения ASP.NET Core. Конфигурация по умолчанию использует агент, размещенный корпорацией Майкрософт.

    Замените текст vmImage: ubuntu-latestname: Default (или имя пула агентов, если вы указали другой пул при настройке секретов репозитория Codespaces).

  9. На вкладке "Рецензирование " нажмите кнопку "Сохранить и запустить". Чтобы зафиксировать изменения в GitHub и запустить конвейер, нажмите кнопку "Зафиксировать непосредственно в главную ветвь " и нажмите кнопку "Сохранить" и запустить его во второй раз. Если появится запрос на предоставление разрешения с таким This pipeline needs permission to access a resource before this run can continueсообщением, выберите "Вид " и следуйте инструкциям, чтобы разрешить доступ.

Наблюдение за выполнением конвейера

В разделе "Задания" выберите "Задание". Затем выполните трассировку процесса сборки с помощью каждого шага. Чтобы просмотреть выходные данные задания в виде текстового файла после завершения сборки, выберите View raw log (Просмотреть журнал необработанных данных).

Если конвейер не запускается быстро, убедитесь, что пространства кода по-прежнему выполняются. Пространства кода завершаются через 30 минут и могут быть перезапущены.

Если состояние конвейера остается в очереди и не переходит на Выполнение через несколько минут, проверьте параллельные задания и запросите бесплатное предоставление. Если у вас нет доступа к параллельным заданиям, можно запустить модуль с помощью Codespaces.

Здесь вы увидите шаги, созданные определением сборки. Он подготавливает виртуальную машину, извлекает последний исходный код из GitHub, а затем создает приложение.

Screenshot of Azure Pipelines showing output from the initial build configuration.

Эта конфигурация является отличным началом, так как теперь у вас есть место для добавления задач сборки. Тем не менее ее необходимо обновить для соответствия нуждам команды Tailspin, например для минификации файлов JavaScript и CSS.

Совет

Проверьте электронную почту. Возможно, вы уже получили уведомление о сборке с результатами выполнения. Вы можете использовать эти уведомления, чтобы сообщить членам команды о завершении сборки и о том, передана ли каждая сборка или сбой.

Добавление задач сборки

Теперь, когда у вас есть рабочий процесс сборки, можно приступить к добавлению задач сборки.

Помните, что вы работаете из main ветви. Чтобы сохранить работу, вы создадите ветвь с именем build-pipeline. Ветвь предоставляет вам место для экспериментов и полностью работает сборка, не влияя на остальную часть команды.

Вы можете добавлять задачи сборки в azure-pipelines.yml непосредственно в Azure Pipelines. Azure Pipelines зафиксирует изменения непосредственно в ветвь. Здесь вы измените файл azure-pipelines.yml локально и отправите (загрузите) свои изменения в GitHub. Это позволит вам попрактиковаться в навыках Git. Следите за автоматическим созданием приложения при отправке изменений.

На практике можно добавлять задачи сборки по одному за раз, отправлять изменения и наблюдать за выполнением сборки. Здесь вы добавите все задачи сборки, которые мы определили ранее в один раз.

Примечание.

Вы будете выполнять несколько команд Git. Не беспокойтесь, если вы не знакомы с Git. Мы покажем, что делать. Мы также рассмотрим более подробные сведения о Git в будущих модулях.

  1. В Visual Studio Code перейдите в интегрированный терминал. Откройте ветвь main своего репозитория, а затем выполните следующие шаги.

  2. Чтобы получить последние изменения из GitHub и обновить ветвь main , выполните следующую git pull команду.

    git pull origin main
    

    Как будет видно из выходных данных, Git приносит файл с именем azure-pipelines.yml. Это начальная конфигурация конвейера, созданная azure Pipelines. При настройке конвейера Azure Pipelines добавляет этот файл в репозиторий GitHub.

  3. Чтобы создать ветвь с именем build-pipeline, выполните следующую команду git checkout:

    git checkout -B build-pipeline
    
  4. В Visual Studio Code измените azure-pipelines.yml следующим образом:

    trigger:
    - '*'
    
    pool:
      name: 'Default' # Replace Default with the name of your agent pool if you used a different pool
    
    variables:
      buildConfiguration: 'Release'
    
    steps:
    - task: UseDotNet@2
      displayName: 'Use .NET SDK 6.x'
      inputs:
        packageType: sdk
        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'
    
    trigger:
    - '*'
    
    pool:
      vmImage: ubuntu-latest
    
    variables:
      buildConfiguration: 'Release'
    
    steps:
    - task: UseDotNet@2
      displayName: 'Use .NET SDK 6.x'
      inputs:
        packageType: sdk
        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'
    

    В разделе steps вы увидите задачи сборки, соответствующие каждой из команд скрипта, которые мы определили ранее.

    Azure Pipelines предоставляет встроенные задачи сборки, которые сопоставляют многие распространенные действия сборки. Например, задача DotNetCoreCLI@2 соответствует программе командной строки dotnet. Конвейер использует DotNetCoreCLI@2 два раза: один раз для восстановления или установки зависимостей проекта и один раз для сборки проекта.

    Помните, что не все действия сборки сопоставляют со встроенной задачей. Например, нет встроенной задачи, которая запускает служебную программу node-Sass или записывает сведения о сборке в текстовый файл. Для выполнения общих системных команд используйте задачу CmdLine@2 или script. Конвейер использует задачу script, так как это стандартный ярлык для CmdLine@2.

    На шаге сборки, который записывает сведения о сборке в файл, обратите внимание на следующие элементы:

    • $(Build.DefinitionName)
    • $(Build.BuildId)
    • $(Build.BuildNumber)

    Это встроенные переменные, которые система предоставляет для использования в конвейерах:

    • $(Build.DefinitionName) — это имя конвейера сборки. Например, SpaceGame-Web-CI.
    • $(Build.BuildId) — это числовой идентификатор завершенной сборки, например 115.
    • $(Build.BuildNumber) — имя завершенной сборки. Вы можете настроить формат, но по умолчанию номер сборки содержит текущую дату, после которой идет номер сборки за этот день. Примером номера сборки является "20190329.1".

    Вы также можете определить собственные переменные, которые будут выполняться в ближайшее время.

    Возможно, вы также заметили UseDotNet@2 задачу, которая является первым шагом сборки. Мара вспомнила, что скрипт сборки не установил необходимые средства сборки. Хотя агент сборки поставляется с несколькими версиями пакета SDK для .NET, эта задача позволяет автору конвейера легко указать версию, необходимую для агента сборки.

  5. Чтобы добавить azure-pipelines.yml в индекс, зафиксировать изменение и отправить изменение в GitHub, выполните следующие команды Git. Эти этапы аналогичны тем, что вы выполняли ранее.

    Совет

    Прежде чем выполнять эти команды Git, не забудьте сохранить azure-pipelines.yml.

    git add azure-pipelines.yml
    git commit -m "Add build tasks"
    git push origin build-pipeline
    

    На этот раз вы отправляете ветвь build-pipeline, а не main, на GitHub.

    Отправка ветви на GitHub активирует процесс сборки в Azure Pipelines.

  6. В Azure Pipelines перейдите к сборке. Для этого на стороне страницы выберите конвейеры и выберите конвейер. Вы увидите сообщение о фиксации и выполнение сборки с использованием кода из ветви build-pipeline.

    Screenshot of Azure Pipelines showing the run history, including the branch you recently pushed to GitHub.

    Совет

    Если сборка не отображается сразу, подождите несколько минут или обновите страницу.

  7. Выберите сборку и выберите задания и трассировку задач сборки при выполнении.

    Например, вот что происходит при gulp@1 выполнении задачи для выполнения задач gulp, которые миниифицируют ресурсы JavaScript и CSS:

    Screenshot of tracing the gulp tasks in Azure Pipelines.

    При сбое любого шага в выходных данных отображается ошибка, позволяя вам продиагностировать и устранить сбой.

    Ранее вы выполнили более минимальную конфигурацию сборки. На этот раз, когда сборка завершена, вы увидите более полный набор задач, необходимых для сборки приложения.

    Screenshot of Azure Pipelines showing the complete list of build tasks.

  8. После завершения сборки выберите любой из шагов, чтобы увидеть общую прогрессию сборки. После этого можно перейти к журналам сборки или связанному изменению на GitHub.

    Screenshot of Azure Pipelines showing the complete list of build tasks. The Run gulp task is selected.