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

时间:2018-10-04 19:35:23

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

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

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

为说明起见,假设我有用户A和B。

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

  

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

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

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

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

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

您可能想重新考虑您的发布方式-考虑对多个环境使用一个发布定义。