如何在 azure devops yaml 中的步骤、工作和阶段之间进行选择?

How to choose between step, job and stages in azure devop's yaml?

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

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

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

我可以把所有这些都放在一个工作中,所以这将是一个循序渐进的任务。或者我可以创建两个作业,每个作业处理一个解决方案的构建。但是,与一个工作相比,使用多个工作有什么好处吗? Microsoft 似乎允许您的代理 运行 并行处理两项工作(理论上会更快),但他们会为此向您收费。

谢谢

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

A pipeline is one or more stages that describe a CI/CD process. Stages are the major divisions in a pipeline. The stages "Build this app," "Run these tests," and "Deploy to preproduction" are good examples.

A stage is one or more jobs, which are units of work assignable to the same machine. You can arrange both stages and jobs into dependency graphs. Examples include "Run this stage before that one" and "This job depends on the output of that job."

A job is a linear series of steps. Steps can be tasks, scripts, or references to external templates.

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

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

你说的这种情况是乔布斯的一种用法。如果您使用多个自托管代理,您会看到好处,它不会收费,您可以使用 demands 指定代理必须具有的功能 运行你的工作。