计划生成任务

已完成

Mara 现在有一个 Space Game 代码的副本。 她将使用 Microsoft Azure Pipelines(而不是现有的 Ubuntu 22.04 生成服务器)来执行生成操作。 在执行操作之前,她需要考虑现有的生成脚本。 看一看她如何将现有脚本映射到 Azure Pipelines 任务。 考虑如何在自己的生成过程中完成同样的操作。

以下是 Mara 与开发主管 Andy 交谈时记录的一些内容:

  • 生成计算机正在运行 Ubuntu 22.04。
  • 生成计算机包括生成工具,例如:
    • npm,Node.js 包管理器
    • NuGet(适用于.NET 的包管理器)
    • .NET SDK
  • 项目使用 Syntactically Awesome Style Sheets (Sass),以便于更轻松地创建级联样式表 (CSS) 文件。
  • 项目使用 gulp 工具包来缩小 JavaScript 和 CSS 文件。

缩小的资产排除掉不需要的数据(例如空格)并缩短变量名称,以帮助加快下载速度。

以下是生成过程中发生的步骤:

  1. 运行 npm install 以安装 package.json 中定义的 Node.js 包。
  2. 运行 node-sass 以将 Sass (.scss) 文件转换为 CSS (.css) 文件。
  3. 运行 gulp 以缩小 JavaScript 和 CSS 文件。
  4. wwwroot 目录显示生成信息,帮助 QA 团队识别生成号和日期。
  5. 运行 dotnet restore 以安装项目的依赖项。
  6. 运行 dotnet build,在“调试”和“发布”配置下生成应用。
  7. 运行 dotnet publish,将应用程序打包为 .zip 文件并将结果复制到网络共享以便 QA 团队接收。

Mara 生成了一个 shell 脚本,用于执行她识别的任务。 她在笔记本电脑上运行它。

备注

不需要运行此脚本或完全了解其用途。 我们只是为了说明典型的生成脚本可能执行的操作。

#!/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 目录模仿团队的网络共享。

运行脚本后,Mara 意识到它并不完整。 例如,它不处理错误。 如果出现生成错误,它不会通知任何人。 即使存在错误,它也会继续运行。 它也不会安装每个步骤所需的工具。

什么是 Azure Pipelines 任务?

在 Azure Pipelines 中,任务是已通过一组输入提取出的打包脚本或过程。

Azure Pipelines 任务提取出基本的详细信息, 使运行常见的生成功能(例如下载应用所依赖的生成工具或程序包,或运行 Visual Studio 或 Xcode 生成项目)更加容易。

以下示例使用 DotNetCoreCLI@2 任务生成面向 .NET 的 C# 项目:

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 都是所谓的 glob 模式的示例。 ** 部分指定搜索当前目录及所有子目录。 *.csproj 部分指定任何 .csproj 文件。 通过通配符,可对多个文件执行操作,而无需指定每个文件。 如果只需要对特定文件执行操作,可以指定该文件,而不使用通配符。

任务名称(例如 DotNetCoreCLI@2)中的“@”指的是任务的版本。 随着新任务版本的推出,可以逐渐迁移到最新版本以利用新功能。

如何在管道中使用任务?

接下来,Mara 将把现有脚本命令映射到 Azure Pipelines 任务。 管道是使用 YAML 文件创建的,该文件是一种紧凑的格式,可以轻松构造配置文件中的数据类型。 通常使用应用的源代码直接维护管道 YAML 文件。

Mara 之前使用过 YAML 来定义类似的生成任务和配置。 她还喜欢将生成定义作为代码进行维护,就像维护项目的任何其他部分那样。

为了定义生成,Mara 选择使用 Visual Studio Code 来创建 YAML 文件。 她在其中输入将用于替换现有脚本命令的所有 Azure Pipelines 任务。

将脚本命令映射到 Azure Pipelines 任务

现在,看一看 Mara 如何将命令从脚本映射到 Azure Pipelines 任务。

为了映射每个命令,Mara 参考了参考文档。 文档按功能(例如生成或部署)对任务进行了分类。

例如,.NET Core CLI 任务 DotNetCoreCLI@2 可帮助你运行 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 或将日期打印到文件的内置任务类型。 对于这种情况,Mara 使用 CmdLine@2 任务,这样她就可以运行所需的任何命令。 script 任务更为常见,这是 CmdLine@2 的快捷方式。 有关其他常见任务快捷方式的详细信息,请参阅 Azure Pipelines 的 YAML 方案参考 - 步骤

稍后,你将自己创建一个使用这些任务的 YAML 文件。

知识检查

1.

生成任务

核对答案