如何在 azure devop 的 yaml 中选择步骤、工作和阶段?

时间:2021-03-19 09:09:27

标签: azure-devops azure-yaml-pipelines

我现在将大部分经典构建管道转换为 yaml。 yaml 转换工具 devop 基本上将我的经典构建管道任务视为单独的 yaml 任务。所以现在我有一份工作,大约有 8 个任务。

在学习 yaml 时,我看到有些会创建多个作业,有些甚至会创建多个阶段。对我来说,阶段似乎适合不同的部署环境(开发、QA、UAT 等)。但我不确定什么时候应该使用多个作业?

假设我在一个 repo 中有两个解决方案,并且想要构建这两个解决方案,而我的工件将包含两个解决方案的 dll。对于每个解决方案,我的任务是构建、运行单元测试和打包 dll。

我可以将所有这些整合到一项工作中,因此将是按顺序逐步完成的任务。或者我可以创建两个作业,每个作业处理一个解决方案的构建。但是与一份工作相比,使用多个工作有什么好处吗?似乎 Microsoft 允许您的代理并行运行两个作业(理论上它会更快),但他们为此向您收费。

谢谢

1 个答案:

答案 0 :(得分:0)

此层次结构反映在 YAML 文件的结构中,例如:

enter image description here

<块引用>

流水线是描述 CI/CD 过程的一个或多个阶段。阶段 是管道中的主要部门。 “构建此应用程序”阶段, “运行这些测试”和“部署到试生产”就是很好的例子。

一个阶段是一个或多个工作,这些工作是可分配给 同一台机器。您可以将阶段和作业安排为依赖项 图表。例子包括“在那个阶段之前运行这个阶段”和“这个 工作取决于该工作的输出。”

作业是一系列线性步骤。步骤可以是任务、脚本或 对外部模板的引用。

作业是由代理或在服务器上运行的步骤的集合。作业可以有条件地运行,并且可能依赖于较早的作业。作业可以是不同的类型,具体取决于它们运行的​​位置。

  • 代理池作业在代理池中的代理上运行。这些是最常见的作业类型,它们在代理池中的代理上运行。将需求与自托管代理一起使用,以指定代理必须具备哪些功能才能运行您的工作。
  • 服务器作业在 Azure DevOps 服务器上运行。服务器作业中的任务由服务器(Azure Pipelines 或 TFS)编排并在服务器上执行。服务器作业不需要代理或任何目标计算机。目前,服务器作业中仅支持少数任务。
  • 容器作业在代理池中的代理上的容器中运行。有关选择容器的详细信息,请参阅 Define container jobs

您提到的情况是 Jobs 的一种用法。如果您使用多个自托管代理,您会看到好处,它不会收费,您可以使用需求来指定代理必须具备哪些功能才能运行您的工作。