azure-devops - VSTS:为什么管道似乎是由同一个用户触发的?
问题描述
我们有一个主发布管道,用于部署子管道并启动它们。在运行主管道时,Azure DevOps 会正确报告谁启动了该部署,并且每个部署实例都显示它是由不同的用户触发的(即实际启动它的人)。
但是,当子管道创建并运行时,无论谁启动了主管道部署,它始终显示相同的用户。换句话说,子管道不显示触发创建它的主部署的人。
为了帮助说明,假设我有用户 A 和 B。
- 用户 A 启动主管道
- Azure DevOps 报告用户 A 从 master 部署
- 子管道已创建并自动运行
- Azure DevOps 报告用户 A 从子级部署
在这种情况下,用户 A 被正确报告为启动子管道部署的用户。现在考虑:
- 用户 B 启动主管道
- Azure DevOps 报告用户 B 从 master 部署
- 子管道已创建并自动运行
- Azure DevOps 报告用户 A从子级部署
在第二种情况下,用户 A 被错误地报告为启动子管道部署的人。
FWIW,用于生成子管道的 JSON 上次由用户 A 修改,用户 A 的凭据用于进行 Azure DevOps REST API 调用,因此这些可能会产生一些影响。这个问题的原因是什么,我们该如何解决?
解决方案
你有点回答了你自己的问题,至少在根本原因方面:
用户 A 的凭据用于进行 Azure DevOps REST API 调用
如果您使用某人的凭据来排队构建或发布,那么它将作为该用户的身份排队。没有办法解决它。
幸运的是,您可以在构建和发布期间访问一个系统访问令牌,这应该足以满足您的目的。
不要使用用户身份进行 REST API 调用,而是使用$(System.AccessToken)
变量。您必须通过选中阶段设置中的“允许脚本访问 OAuth 令牌”框来允许脚本访问令牌。
这不会使用户 B 将构建排入队列,但也不会错误地显示为错误的人——它将显示为系统服务帐户。
您可能需要重新考虑您的发布方法——考虑将一个发布定义用于多个环境。
推荐阅读
- php - 将数组数据的字节转换为pdf下载?
- django - 如何根据 django 模型中字段的比较值进行过滤?
- scala - 在scala中处理无效参数的最佳方法是什么
- angular - 如何使用 ng-select 更改事件到达元素
- c - 是否可以以编程方式设置当前的 Linux 运行级别?
- php - 如何使用rest api在amazon中使用asin no获取产品详细信息?
- ruby - 使用 htop 命令可视化 ruby 线程
- java - 何时考虑在 Java 中捕获特定异常与一般异常
- javascript - 如何为函数编写单元测试?
- discord - 可以发送嵌入消息的 Discord.js 机器人