首页 > 解决方案 > VSTS:为什么管道似乎是由同一个用户触发的?

问题描述

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

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

为了帮助说明,假设我有用户 A 和 B。

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

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

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

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

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

标签: azure-devopsazure-pipelines-release-pipeline

解决方案


你有点回答了你自己的问题,至少在根本原因方面:

用户 A 的凭据用于进行 Azure DevOps REST API 调用

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

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

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

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

您可能需要重新考虑您的发布方法——考虑将一个发布定义用于多个环境。


推荐阅读