0

我们在本地使用 Azure DevOps Server 2020。我们无法转向服务。我们无法在 Azure 中使用代理,因为这些代理无法与位于公司防火墙后面的服务器通信。

所以,我们被本地代理困住了,这让我们窒息。从最糟糕的意义上说,我们的应用程序是一个庞然大物。它的公关建设需要时间,并且非常需要资源。目前我们有 2-3 个 PR 构建在同一台机器上同时运行,并且需要永恒。简而言之 - 这是非常糟糕的。

另一方面,开发人员拥有非常强大的机器。当然,我不希望我的机器为其他人的 PR 构建提供服务,但如果它可以运行我自己的 PR 构建,那就太好了。

唉,我不明白这是怎么做到的。所以,我的问题 - 是否可以配置 Azure DevOps Server 2020,以便 Alice 提交的 PR 的 PR 验证构建将在 Alice 机器上运行的构建代理上运行,并且只有在没有这样的代理的情况下,它才会选择“标准“在构建服务器上运行的构建代理?

澄清

虽然问题是关于爱丽丝,但也有鲍勃、查理和迪帕克。大约 300 多名开发人员。因此,解决方案不应假设只有一名开发人员在处理代码。

4

1 回答 1

1

是否可以配置 Azure DevOps Server 2020,以便 Alice 提交的 PR 的 PR 验证构建将在 Alice 机器上运行的构建代理上运行

我们可以在 Alice 的机器上安装自托管代理,打开组织设置->代理池->选择代理->单击选项卡 Capabilities->搜索字段Agent.ComputerName,然后打开 PR 构建定义并添加需求,如下所示。

然后 PR 构建将使用指定的代理运行,您可以查看此文档:指定需求 以获取更多详细信息。

此外,如果 PR 构建没有找到匹配的代理,则构建将不会与另一个代理一起运行。

在此处输入图像描述

更新1

每个开发人员在他们的所有者机器上都有他们的所有者代理,对吧?

检查此文档:预定义变量,它包含变量Build.RequestedForBuild.RequestedForEmail如果管道是拉取请求触发器,它将显示拉取请求创建者姓名和电子邮件,将其添加到管道需求中。如

在此处输入图像描述

然后,让所有开发人员为其代理添加功能,例如 TriggerName = {他们的电子邮件或显示名称}。由于我使用了变量Build.RequestedForEmail,因此在我的代理中,我添加了以下功能:

在此处输入图像描述

然后,如果我创建一个拉取请求,构建将通过我自己的机器代理运行。

更新 2

例如,原始 PR 构建名称是 A。打开它并添加默认需求(您可以添加任何内容)

添加新的构建定义名称 B,添加任务 power shell 并输入 power shell 脚本以调用下面的 REST API 以更新 A 定义

定义 - 获取

GET https://dev.azure.com/{organization}/{project}/_apis/build/definitions/{definitionId}?api-version=6.1-preview.7

定义 - 更新

PUT https://dev.azure.com/{organization}/{project}/_apis/build/definitions/{definitionId}?api-version=6.1-preview.7

然后将构建 B 添加为拉取请求构建。

更新3

是否可以配置 Azure DevOps Server 2020,以便 Alice 提交的 PR 的 PR 验证构建将在 Alice 的机器上运行的构建代理上运行,并且只有在没有此类代理的情况下,它才会选择在其上运行的“标准”构建代理构建服务器?

如果“真实”最初以构建代理为目标,那么当辅助代理确定开发人员有单独的代理时会发生什么?

真正的构建定义有需求,如果构建默认运行需求,它将运行标准构建代理。

辅助之一,我们需要添加条件来运行 power shell 脚本来更新真实的构建需求。如果 Alice 的机器有匹配的代理,它将更新真实的构建需求,然后真实的构建将运行 Alice 的机器代理。

于 2021-04-07T03:26:28.463 回答