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

Завершено

Мара теперь имеет копию кода Space Game . Она собирается создать его с помощью Microsoft Azure Pipelines вместо существующего сервера сборки Ubuntu 22.04. Прежде чем она сможет сделать это, ей необходимо обдумать существующие сценарии сборки. Смотрите, как она сопоставляет существующие скрипты с задачами Azure Pipelines. Подумайте, как вы можете повторить это со своим процессом сборки.

Вот некоторые заметки, что Мара собрала, когда она говорила с Энди, ведущий разработчик:

  • Компьютер сборки работает под управлением Ubuntu 22.04.
  • Компьютер сборки включает такие средства сборки, как:
    • npm, диспетчер пакетов для Node.js;
    • NuGet, диспетчер пакетов для .NET;
    • Пакет SDK для .NET
  • В проекте используется язык Sass (Syntactically Awesome Style Sheets), чтобы было проще создавать файлы с каскадными таблицами стилей (CSS).
  • Проект использует инструментарий gulp для минификации файлов JavaScript и CSS.

Уменьшенные ресурсы не включают ненужные данные (например, пробелы) и сокращают имена переменных, чтобы ускорить их загрузку.

Ниже приведены шаги, которые происходят во время процесса сборки:

  1. Чтобы установить пакеты Node.js, определенные в package.json, выполните команду npm install.
  2. Чтобы преобразовать файлы Sass (SCSS) в ФАЙЛЫ CSS (.css), выполните команду node-sass.
  3. Чтобы минифицировать файлы JavaScript и CSS, выполните команду gulp.
  4. Выведите сведения о сборке в каталог wwwroot, чтобы помочь специалистам по контролю качества определить номер и дату сборки.
  5. Чтобы установить зависимости проекта, выполните команду dotnet restore.
  6. Запустите dotnet build для сборки приложения в двух конфигурациях: отладка и выпуск.
  7. Чтобы упаковать приложение в виде файла .zip и скопируйте результаты в сетевую папку для команды QA, чтобы получить, выполните команду dotnet publish.

Мара собирает скрипт оболочки, который выполняет определенные ей задачи. Она запускает его на ноутбуке.

Примечание.

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

#!/bin/bash

# Install Node.js modules as defined in package.json.
npm install --quiet

# Compile Sass (.scss) files to standard CSS (.css).
node-sass Tailspin.SpaceGame.Web/wwwroot

# Minify JavaScript and CSS files.
gulp

# Print the date to wwwroot/buildinfo.txt.
echo `date` > Tailspin.SpaceGame.Web/wwwroot/buildinfo.txt

# Install the latest .NET packages the app depends on.
dotnet restore

# Build the app under the Debug configuration.
dotnet build --configuration Debug

# Publish the build to the /tmp directory.
dotnet publish --no-build --configuration Debug --output /tmp/Debug

# Build the app under the Release configuration.
dotnet build --configuration Release

# Publish the build to the /tmp directory.
dotnet publish --no-build --configuration Release --output /tmp/Release

Каталог /tmp имитирует сетевую папку команды.

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

Что такое задачи Azure Pipelines?

В Azure Pipelines задача — это упакованный скрипт или процедура, которая была абстрагирована набором входных данных.

Задача Azure Pipelines абстрагирует базовые сведения. Эта абстракция упрощает выполнение общих функций сборки, таких как загрузка средств сборки или пакетов приложения зависит от проекта, запуска Visual Studio или Xcode.

Ниже приведен пример использования задачи DotNetCoreCLI@2 для сборки проекта C#, нацеленного на .NET:

task: DotNetCoreCLI@2
  displayName: 'Build the project'
  inputs:
    command: 'build'
    arguments: '--no-restore --configuration Release'
    projects: '**/*.csproj'

Конвейер может перевести эту задачу в эту команду:

dotnet build MyProject.csproj --no-restore --configuration Release

Давайте разберем эту задачу немного больше:

  • Задача DotNetCoreCLI@2 соответствует команде dotnet.
  • displayName определяет имя задачи, которое отображается в пользовательском интерфейсе. Вы увидите это в действии в ближайшее время.
  • inputs определяет аргументы, передаваемые команде.
    • command указывает, что нужно запустить команду dotnet build.
    • arguments задает дополнительные аргументы для передачи команде.
    • projects указывает, какие проекты нужно собрать. В этом примере используется шаблон подстановочного знака **/*.csproj. ** и *.csproj — это примеры того, что называется стандартные маски. Часть ** указывает выполнять поиск в текущем каталоге и всех дочерних каталогах. Часть *.csproj указывает любой CSPROJ-файл. Подстановочные знаки позволяют действовать над несколькими файлами без указания каждого из них. Если вам нужно работать только с определенным файлом, можно указать этот файл вместо подстановочных знаков.

Имя задачи "@", например, DotNetCoreCLI@2ссылается на версию задачи. По мере выхода новых версий задач вы можете постепенно переходить на новые версии, чтобы использовать новые преимущества.

Как задачи используются в конвейере?

Затем Мара сопоставляет существующие команды скриптов с задачами Azure Pipelines. Конвейер создается с помощью файла YAML, который является компактным форматом, который упрощает структуру типов данных в файлах конфигурации. Файлы YAML конвейера обычно поддерживаются непосредственно с исходным кодом приложения.

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

Чтобы определить свою сборку, Мара решает использовать Visual Studio Code для создания файла YAML. В нем она вводит все задачи Azure Pipelines, которые она будет использовать для замены существующих команд скриптов.

Сопоставление команд скрипта с задачами Azure Pipelines

Теперь вы будете следовать за командами Мары сопоставлять команды из сценария с задачами Azure Pipelines.

Чтобы сопоставить каждую команду, Мара изучает справочную документацию. Документация классифицирует задачи по функциям, таким как сборка или развертывание.

Например, задача DotNetCoreCLI@2 интерфейса командной строки .NET Core помогает выполнять dotnet команды.

Эта таблица связывает команды скриптов с новыми задачами Azure Pipelines:

команда "Скрипт" Задача Azure Pipelines
npm install Npm@1
node-sass CmdLine@2 (или script)
gulp gulp@1
echo `date` CmdLine@2 (или script)
dotnet restore DotNetCoreCLI@2
dotnet build DotNetCoreCLI@2
dotnet publish DotNetCoreCLI@2

Встроенный тип задачи не выполняется node-sass или печатает дату в файл. Для них Мара использует CmdLine@2 задачу, которая позволяет ей выполнять любую команду, которую она хочет. Обычно используется задача script, которая является ярлыком для CmdLine@2. Дополнительные сведения о других распространенных ярлыках задач см . в справочнике по схеме YAML для Azure Pipelines — шаги.

Вскоре вы создадите файл YAML, который использует эти задачи.

Проверьте свои знания

1.

Задача сборки: