> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devin.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Azure DevOps（服务主体）

> 通过 Microsoft Entra 服务主体将 Devin 连接到 Azure DevOps

<div id="overview">
  ## 概览
</div>

Devin 通过 Microsoft Entra 服务主体连接到 Azure DevOps。你的 Admin 会在你的租户中批准由 Cognition 发布的 **Cognition Azure DevOps Service Principal** 应用，这会创建一个服务主体，随后你再将其添加到 Azure DevOps 组织中，并授予你所需的权限。

* 在 Entra 批准期间，仅会请求 `User.Read`——这仅用于确认身份
* 仅完成 Entra 批准**并不会**授予对代码仓库或代码的访问权限
* 所有代码仓库访问权限都由你在 Azure DevOps 中分配的权限控制

与其他一些 SCM 集成不同，Azure DevOps 不会以相同的方式显示第三方应用。所有连接管理都在 Devin 的 **Settings > 企业设置 > 集成** 中完成。

<div id="prerequisites">
  ## 前提条件
</div>

在设置 Azure DevOps 集成之前，请确保你具备：

1. 拥有管理集成权限的 **Devin Enterprise 账户**
2. 一位可为应用授予管理员同意的 **Microsoft Entra 管理员**
3. 一位可添加用户并分配权限的 **Azure DevOps 组织管理员**

<div id="setting-up-the-integration">
  ## 设置集成
</div>

1. 在 [app.devin.ai](https://app.devin.ai) 登录你的 Devin 账户。

2. 在另一个浏览器或无痕窗口中登录 Azure DevOps (第 6 步需要用到) 。

3. 在你的 Devin Enterprise 账户中，前往 **设置 > 企业设置 > 集成**，然后选择 **Azure DevOps**。

4. 打开 **连接** 按钮的下拉菜单，然后选择 **使用服务主体连接**。

<Frame>
  <img src="https://mintcdn.com/cognitionai/d4tSaSvcW_EO3rtt/images/enterprise/ADO-connect-service-principal.png?fit=max&auto=format&n=d4tSaSvcW_EO3rtt&q=85&s=6368b81bb8fc22f2f0425ad8eb809d17" alt="使用服务主体连接" width="1466" height="676" data-path="images/enterprise/ADO-connect-service-principal.png" />
</Frame>

5. 你会被重定向到 Microsoft，向 Devin 授予访问你的租户的权限。批准后，你会返回 Devin 中的 Azure DevOps 集成页面，此时页面会显示 **使用服务主体添加组织** 部分。
   * 批准后会在你的 Microsoft Entra 租户中创建一个服务主体
   * 此步骤仅请求 `User.Read`，不会授予对代码仓库的访问权限

6. 在 Azure DevOps 中，前往 **组织设置 > 用户**：
   * 点击 **添加用户**，并添加该服务主体 (`Cognition Azure DevOps Service Principal`)
   * 访问级别选择 **Basic** (**Stakeholder** 不够，API 需要 Basic)
   * 将其添加到你希望 Devin 访问的所有项目中
   * 将该服务主体分配到相关的 Azure DevOps **组** 中 (通常为 Project Contributors)

7. 返回 Devin，在 Azure DevOps 集成页面的 **使用服务主体添加组织** 部分中，输入上一步中的 Azure DevOps 组织名称，然后点击 **添加**。

8. 在 Devin 中，在你的 Azure DevOps 集成里选择 **Git Permissions**，选择一个子组织，并在组级别或代码仓库级别授予权限。

<Frame>
  <img src="https://mintcdn.com/cognitionai/IUVOuadgM9g1fi9k/images/enterprise/ADO-git-permissions.png?fit=max&auto=format&n=IUVOuadgM9g1fi9k&q=85&s=765a3e9cdbc8da18001b0cc268e72e64" alt="Azure DevOps Git Permissions" width="2414" height="630" data-path="images/enterprise/ADO-git-permissions.png" />
</Frame>

9. 对于每个已授予权限的组织，前往 **Devin 的设置 > Devin's Machine**，点击 **+ Repository**，并接入这些代码仓库。

<div id="what-devin-can-access">
  ## Devin 可访问的内容
</div>

Devin 的 Azure DevOps 集成仅限于 **Git 操作**：

| 能力     | 说明             |
| ------ | -------------- |
| 列出代码仓库 | 查看可用代码仓库及其元数据  |
| 读取分支   | 访问分支信息和提交历史    |
| 创建拉取请求 | 为代码修改发起新的 PR   |
| 查看拉取请求 | 访问 PR 事件、评论和状态 |
| 推送代码   | 将新分支和提交推送到代码仓库 |

Devin **无法**访问工作项、管道、构建、测试计划、构件、Wiki 或服务连接。

<Note>
  如果你的组织今后需要 Devin 支持更多 Azure DevOps 领域，请联系 [enterprise@cognition.ai](mailto:enterprise@cognition.ai) 与我们讨论你的需求。
</Note>

<div id="security-considerations">
  ## 安全注意事项
</div>

* **最小 Entra 权限** — 仅请求 `User.Read`。不要求对整个目录的读取权限、查看组成员关系的权限或管理控制权限。
* **显式授权** — 仅获得 Entra 批准并不会授予任何 Azure DevOps 访问权限。所有代码仓库访问权限都必须由你的 Azure DevOps Admin 显式分配。
* **加密凭据** — 所有令牌都会加密并安全存储。
* **范围限定访问** — 可通过 Devin 的 Enterprise UI 将权限限制在特定项目、代码仓库和操作范围内。
* **可审计性** — 活动会记录在 Entra 登录日志和 Azure DevOps 审计日志中。
* **遵循分支策略** — Devin 的 PR 需遵循与其他任何贡献者相同的分支策略和评审要求。

<div id="best-practices">
  ## 最佳实践
</div>

* **使用代码仓库级权限** — 仅向 Devin 授予其所需的特定代码仓库和项目访问权限，而非整个组织范围的访问权限。
* **启用分支策略** — 在 Azure DevOps 中设置分支策略，确保所有更改在合并前都经过适当的审查。
* **监控审计日志** — 定期查看 Azure DevOps 审计日志和 Entra 登录日志，监控服务主体的活动。

<div id="troubleshooting">
  ## 故障排查
</div>

**管理员同意失败：**

* 验证执行批准的用户是否有权在你的 Entra 租户中为应用授予管理员同意
* 如果你的租户限制应用同意，可能需要由全局管理员或云应用程序管理员来授予同意

**在 Azure DevOps 中看不到服务主体：**

* 在 Entra 门户的 **Enterprise Applications** 下验证管理员同意是否已成功完成 (查找 `Cognition Azure DevOps Service Principal`)
* 确保该服务主体已在 **Organization Settings > Users** 下明确添加到你的 Azure DevOps 组织中

**Conditional Access / MFA 阻止访问：**

* 如果服务主体受强制执行 MFA 的 Conditional Access 策略约束，令牌刷新会静默失败。请为该服务主体添加针对 Devin 应用的 Conditional Access 排除项。

**Devin 看不到我的代码仓库：**

* 验证该服务主体是否已在 **Organization Settings > Users** 下添加到 Azure DevOps 组织中
* 确认访问级别设置为 **Basic** (Stakeholder 不足以进行 API 访问)
* 检查是否已在 Devin 的企业设置中授予代码仓库权限
* 确保这些代码仓库已添加到 Devin's Machine

**创建拉取请求失败：**

* 确认该服务主体在目标代码仓库上具有 Contributor 权限
* 检查分支策略是否阻止创建 PR
* 验证目标分支存在且可访问

<div id="network-setup">
  ## 网络设置
</div>

如果你的 Azure DevOps 实例启用了 IP 过滤，你需要将 Devin 的 IP 地址加入白名单。

如需查看最新列表，请参阅我们的 [IP 白名单文档](/zh/admin/common-issues#ip-whitelisting)。
