AgentConnect
连接与自动化工作流

Azure DevOps

用一次 Microsoft 登录连接 Azure DevOps 组织,在 Azure Repos 中工作,并由 Pull Request 和评论触发 Agent。

Azure DevOps 集成让 Agent 在 Azure Repos 中工作:一个 Git 仓库可以作为 Agent 的工作区或附加仓库;Agent 也可以监视一个仓库,让 Pull Request 和评论成为会话。Agent 在 Pull Request 的评论线程中回复,可以提交带投票的正式评审,并把运行状态写成 Pull Request 状态。

支持 Azure DevOps Services(dev.azure.com),不支持 Azure DevOps Server、TFVC 仓库和 SSH 远程地址。

AgentConnect 在 Azure DevOps 中以每个组织一个身份行事:AgentConnect 应用,在你的 Microsoft Entra 租户中表现为一个服务主体。所有 Agent 做的一切——克隆、推送、评论、评审、状态——都记在这个应用名下。

开始之前

  • 一个 Microsoft 工作或学校账户:它是该 Azure DevOps 组织的 Project Collection Administrator,并且是组织所在 Microsoft Entra 租户的成员或来宾。个人 Microsoft 账户无法连接。
  • 使用 Azure DevOps 的 Agent 运行在**你自己运行的 Daemon** 上,执行策略为 Host 或 Sandbox(srt)。AgentConnect Cloud 的托管会话、Kubernetes Daemon 池和 VM 策略目前还无法访问 Azure DevOps,在那里启动的会话会被拒绝并给出原因。

连接 Azure DevOps

组织在集成 → 代码托管平台 → Azure DevOps → 使用 Microsoft 连接中连接一次。

  1. 用上面的管理员账户登录。如果租户要求管理员批准,由 Microsoft Entra 管理员为 AgentConnect 应用授予一次同意,然后重新登录。

  2. 选择组织。 AgentConnect 列出你的账户所属的 Azure DevOps 组织。如果组织所在的租户不是你登录的租户,会引导你到那个租户重新登录。

  3. 选择项目。 勾选 Agent 需要的项目。新勾选的项目默认为写并允许触发器:

    选项给应用的权限
    读Agent 可以克隆和读取,但不能推送(项目的 Readers)。
    写还可以推送和创建 Pull Request(Contributors)。
    允许触发器Pull Request 可以启动 Agent(项目的 Service Hook 权限)。

    所有项目会把同样的选项授予每个项目,包括以后新建的项目,新项目不用再来这里勾选。只有 Project Collection Administrator 能打开它。

Choose projects: the All projects row unchecked, Example Project with Write and Allow triggers, Example Docs with Read only

随后 AgentConnect 以 Basic 访问级别把应用加入组织(占用一个付费许可证),加入你选择的组,并检查它能看到仓库。

只授予 Agent 需要的项目。应用能访问它所在的组允许的一切,它的令牌在整个组织内有效;把每个 Agent 限制在自己仓库内的是 AgentConnect(见访问由 Daemon 控制)。

不是 Project Collection Administrator 的 Project Administrator 无法以 Basic 访问级别添加应用。这时 AgentConnect 会给出一份清单:由 Project Collection Administrator 在组织设置 → 用户中以 Basic 访问级别添加这个应用(按客户端 ID 查找),然后你在卡片上继续。

管理项目访问

卡片上的管理项目访问会再走一次同样的登录,并显示应用当前的权限。应用后 Azure DevOps 会与页面一致:取消勾选项目或所有项目、改为读或取消允许触发器,都会收回对应权限。

使用自己的应用

改用自己的应用会连接一个在你自己租户中注册的应用:填入组织、租户 ID、客户端 ID 和客户端密码。请自行把这个应用的服务主体加入组织(Basic)和项目组。如果要用触发,还要为它授予项目 Service Hook 的查看订阅和编辑订阅权限。

仓库

仓库在第一次被用到时加入组织:把它选为 Agent 的工作区、添加为附加仓库,或在触发器中选中它。选择器列出应用能看到的所有仓库。

每个 Agent 对每个仓库有读或写权限。写权限需要项目上的写;如果应用无法推送到某个仓库,以写权限把它设为工作区会在保存时被拒绝。

The Azure DevOps card: the connected organization with Manage project access, and three repositories with their trigger state

有触发器的仓库会显示最近一次事件的时间;需要处理时显示标记:

标记怎么做
触发器待验证无需处理,收到第一个事件后消失。
未允许触发器在管理项目访问中为该项目打开允许触发器。

仓库行上的钥匙图标用来轮换 Azure DevOps 签名投递所用的密钥。旧密钥在 36 小时内仍然有效,已排队的投递仍能送达。

访问由 Daemon 控制

Azure DevOps 无法签发只限一个仓库或只读的令牌,所以令牌从不进入 Agent 的会话:Git 和 Azure CLI 通过 Daemon 的凭证代理访问 Azure DevOps,代理只为 Agent 自己的仓库出示真实令牌,并拒绝低于写权限的推送和 API 写操作。

装有 azure-devops 扩展的 Azure CLI 在会话中可以照常使用——az repos show、az repos pr create、az repos pr update 等。AgentConnect 不负责安装:请在 Daemon 主机上安装 Azure CLI 和这个扩展。会暴露其他仓库的列表操作,例如 az repos list,或不带 --repository 列出 Pull Request,会被拒绝。

Agent 还有三个不需要 CLI 的工具:azureDevOpsPullRequest(创建、编辑、完成、放弃、重新激活 Pull Request,以及标签)、azureDevOpsComment(评论线程和回复)和 readAzureDevOpsPullRequest。它们创建的 Pull Request 会带上 Agent 的署名。

监视仓库

在 Agent 上:集成 → 添加集成 → Azure DevOps。

Add integration with Azure DevOps selected: pick a repository, then how eagerly the agent wakes up on pull requests and the review format

仓库必须已经是 Agent 的工作区或附加仓库之一,并且它所在的项目已允许触发器。选择 Agent 对 Pull Request 的响应时机:

  • opened——Pull Request 被创建时。
  • any update——创建,加上新提交、重新打开 Pull Request,以及评论。
  • @-mention——只在 Pull Request 的描述或评论中以 @<agent-name> 提到这个 Agent 时。

无论选哪种时机,把 AgentConnect 应用加为 Pull Request 的评审者都会请求一次评审。Azure DevOps 的评审者选择器只列出人,所以这个请求要通过 REST API 或 az repos pr reviewer add 发出。

AgentConnect 会自己创建和维护仓库的 Service Hook——触发器需要的每类事件一个——并在最后一个触发器移除后删除它们。监视同一个仓库的多个 Agent 共用这些 Service Hook。

An agent's Azure DevOps card with one watched repository and its pull-request trigger

谁可以触发 Agent

事件发生时,AgentConnect 会检查引发事件的人能否向仓库贡献:从 Azure DevOps 读取这个人自己的权限,以及他所在的每个组的权限。不能推送到仓库的人不会启动 Agent。对于评审请求和重新打开的 Pull Request,检查的是 Pull Request 的作者。编辑评论和点赞不会开始新一轮。

应用自己的评论不会触发 Agent。应用在同一仓库中创建的 Pull Request 仍会进入评审,这样一个 Agent 就能评审另一个 Agent 的工作;应用推送到 Pull Request 的提交和其他人的一样,算作一次新的修订。

Agent 会做什么

每个符合条件的事件都会在 Agent 的 Daemon 上开启一个会话,会话出现在会话中,并链接回 Pull Request。

  • 回复——在触发这一轮的线程中回复,或在 Pull Request 上开一个新线程。这一轮开始时,触发它的评论会被点赞。
  • 评审——在触发器上选择了评审格式后,新打开的 Pull Request、新提交或评审请求会得到一次正式评审:每条行内评论一个线程(多行范围仍是范围)、一个总结线程,以及一次投票——批准时为 Approved(10),要求修改时为 Waiting for author(−5)。只有评论的评审不改变投票。提及 Agent 会在该线程中得到回复,而不是正式评审。
  • 运行状态——一个名为 agentconnect/<agent-name> 的 Pull Request 状态,链接到控制台中的会话。只有管理员在分支策略中把它设为必需的状态检查时,它才会阻止完成 Pull Request。

要让 Agent 在 Pull Request 上再运行一次:在会话中发消息、推送新提交,或提到这个 Agent。

所有 Agent 都以同一个应用的身份行事,所以在一个 Pull Request 上只有一票:最近的一次评审决定它。每个 Agent 自己的结论保留在它的总结线程和它的状态中。

断开连接

断开连接会删除 AgentConnect 的 Service Hook 并释放连接,Agent 随即停止在这些仓库上工作。要从 Azure DevOps 中彻底移除应用,请在组织设置 → 用户中移除它;如有需要,再在 Microsoft Entra 中删除它的企业应用。

自托管部署

上面的内容在 AgentConnect OSS 上同样适用。运维人员只需配置一次部署的 Microsoft 应用,并把控制台的 Azure DevOps 连接页面再添加为一个重定向 URI:见 Microsoft Teams 部署应用。没有部署应用时,组织可以使用自己的应用。

How is this guide?

本页目录

How is this guide?