VSTS:为什么管道似乎是由同一用户触发的?

VSTS: Why are pipelines appear to be triggered by the same user?

我们有一个部署 child 管道并启动它们的主发布管道。当 运行 连接主管道时,Azure DevOps 会正确报告谁启动了该部署,并且每个部署实例都显示它是由 不同的 用户触发的(即实际启动它的人) .

但是,当创建 child 管道和 运行 时,无论是谁启动了主管道部署,它总是显示 相同的 用户。换句话说,child 管道不显示触发创建它的主部署的人。

为了便于说明,假设我有用户 A 和 B。

  1. 用户 A 启动主管道
  2. Azure DevOps 报告用户 A 从 master
  3. 部署
  4. Child 管道已创建并自动 运行
  5. Azure DevOps 报告用户 A 从 child
  6. 部署

在这种情况下,用户 A 被正确报告为启动 child 管道部署的用户。现在考虑:

  1. 用户 B 启动主管道
  2. Azure DevOps 报告用户 B 从 master
  3. 部署
  4. Child 管道已创建并自动 运行
  5. Azure DevOps 报告 用户 A 从 child
  6. 部署

在第二种情况下,用户 A 被错误地报告为 child 管道部署的启动者。

FWIW,用于生成 child 管道的 JSON 最后由用户 A 修改,用户 A 的凭据用于进行 Azure DevOps REST API 调用,因此这些可能有一定的影响。这个问题的原因是什么,我们该如何解决?

您至少在根本原因方面回答了您自己的问题:

User A's credentials are used for making Azure DevOps REST API calls

如果您使用某人的凭据对构建或发布进行排队,那么它将作为该用户的身份排队。没有办法解决它。

幸运的是,您可以在构建和发布期间访问系统访问令牌,这应该足以满足您的目的。

不使用用户身份进行 REST API 调用,而是使用 $(System.AccessToken) 变量。您必须通过选中阶段设置中的 "Allow Scripts Access to OAuth Token" 框来允许脚本访问令牌。

这不会使构建被用户 B 排队,但它也不会被错误地显示为错误的人 -- 它会显示为系统服务帐户。

您可能需要重新考虑您的发布方法 -- 考虑在多个环境中使用一个发布定义。