Azure devops VSTS:为什么管道看起来是由同一个用户触发的?

Azure devops VSTS:为什么管道看起来是由同一个用户触发的?,azure-devops,azure-pipelines-release-pipeline,Azure Devops,Azure Pipelines Release Pipeline,我们有一个主发布管道,它部署子管道并启动它们。运行主管道时,Azure DevOps会正确报告谁启动了该部署,并且每个部署实例都显示它是由不同的用户(即实际启动它的用户)触发的 但是,创建并运行子管道时,无论是谁启动了主管道部署,它始终显示相同的用户。换句话说,子管道不会显示触发创建它的主部署的人员 为了帮助说明,假设我有用户A和B 用户A启动主管道 Azure DevOps报告从主服务器部署的用户A 子管道已创建并自动运行 Azure DevOps报告从子系统部署了用户A 在这种情况下,用户A

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

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

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

  • 用户A启动主管道
  • Azure DevOps报告从主服务器部署的用户A
  • 子管道已创建并自动运行
  • Azure DevOps报告从子系统部署了用户A
  • 在这种情况下,用户A被正确地报告为启动子管道部署的用户。现在考虑:

  • 用户B启动主管道
  • Azure DevOps报告从主服务器部署了用户B
  • 子管道已创建并自动运行
  • Azure DevOps报告从子系统部署了用户A
  • 在第二种情况下,用户A被错误地报告为启动子管道部署的用户


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

    您回答了您自己的问题,至少从根本原因来看:

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

    如果您正在使用某人的凭据将生成或发布排队,那么它将作为该用户的身份排队。这是没有办法的

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

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

    这不会使生成由用户B排队,但也不会错误地显示为错误的人——它将显示为系统服务帐户


    <>你可能想重新考虑一下你的发布方法——考虑一个具有多个环境的发布定义。

    你如何启动子管道?我想丹尼尔Mn已经回答了这个问题,但是我想先测试一下。我们在主管道中使用用户A的凭据启动发布,所以这可能就是原因。我想我可能已经回答了我的问题,但我的措辞并不完全清楚。当我们从主管道启动子管道时,我们使用用户A的凭据调用RESTAPI来创建发布,因此这可能是原因(需要测试)。访问令牌可能是一种更好的方法,因此我也将对此进行更多的研究。顺便说一句,我们直接与微软讨论了我们的需求,他们推荐了我们正在采取的方法。多个环境将很快变得不可管理。最后,我们开始着手测试这一点,而访问令牌似乎是一条可行之路。谢谢你的回答!