排查 Azure Boards-GitHub集成问题

Azure DevOps Services |Azure DevOps Server 2022 - Azure DevOps Server 2019

Azure Boards-GitHub集成依赖于各种身份验证协议来支持连接。 更改用户的权限范围或身份验证凭据可能会导致吊销连接到Azure Boards的 GitHub 存储库。

有关 GitHub Azure Boards 应用支持的集成概述,请参阅 Azure Boards-GitHub集成

支持的身份验证选项

根据要连接到的 GitHub 平台支持以下身份验证选项。

平台

GitHub.com

GitHub Enterprise Server

Azure DevOps Services

  • GitHub.com 用户帐户
  • 个人访问令牌 (PAT)
  • OAuth
  • PAT
  • 用户名加密码

Azure DevOps Server 2020

不适用

  • PAT
  • 用户名加密码

Azure DevOps Server 2019

不适用

  • OAuth
  • PAT
  • 用户名加密码

注意

通过适用于 GitHub 的 Azure Boards 应用,Azure Boards 和 Azure DevOps Services 支持与 GitHub.com 和 GitHub Enterprise Server 存储库集成。 不支持与其他 Git 存储库集成。

注意

通过适用于 GitHub 的 Azure Boards 应用,Azure DevOps Servers 2019 和更新版本支持与 GitHub Enterprise 服务器 存储库集成。 不支持与其他 Git 存储库集成。

授予Azure Boards组织访问权限

如果Azure Boards与 GitHub 之间的集成未按预期工作,请验证是否已授予组织访问权限。

  1. 从 GitHub Web 门户打开配置文件菜单中 的设置
    打开配置文件的屏幕截图,选择“设置”。

  2. 接下来,选择“集成”下的“应用程序”。

  3. 选择“授权的 OAuth 应用”选项卡,然后选择Azure Boards
    “授权的 OAuth 应用”选项卡的屏幕截图,选择Azure Boards。

  4. “组织访问”下,解决可能出现的任何问题。 选择 “授予 ”以授予对显示为挂起 访问请求的任何组织的访问权限。 组织访问的屏幕截图,其中组织没有访问权限。

解决连接问题

当与 GitHub 的Azure Boards连接不再具有访问权限时,它会在用户界面中显示带有红色 X 的警报状态。 将鼠标悬停在警报上,指示凭据不再有效。 若要更正此问题,请删除连接并重新创建一个新连接。

失败连接的屏幕截图。

当与 GitHub 的Azure Boards连接不再具有访问权限时,它会在用户界面中显示一个警报状态,其中包含一个具有工具提示(例如,无法连接到 GitHub)的警报状态。

若要解决此问题,请考虑以下各项:

  • 如果连接使用的是 OAuth

    • Azure Boards应用程序对其中一个存储库的访问被拒绝。

    • GitHub 可能不可用/无法访问。 这可能是由于服务中断或本地基础结构/网络问题造成的。 可以从以下链接检查服务状态:

      若要解决第一个问题,请删除并重新创建与 GitHub 存储库的连接。 此重新创建的连接将导致 GitHub 提示重新授权Azure Boards。

  • 如果连接使用的是 PAT:

    • PAT 可能已被撤销或所需的权限范围已更改,并且不足。

    • 用户可能在 GitHub 存储库上失去管理员权限。

      若要解决此问题,请重新创建 PAT 并确保令牌的范围包括所需的权限: repo, read:user, user:email, admin:repo_hook

解决 GitHub Enterprise Server 连接中断问题

如果已从Azure DevOps Server迁移到具有现有 GitHub Enterprise Server 连接的Azure DevOps Services,则现有连接将无法按预期工作。 GitHub 中的工作项提及可能会延迟或永远不会显示在Azure DevOps Services中。 出现此问题的原因是与 GitHub 关联的回调 URL 不再有效。

若要解决此问题,请考虑以下解决方案:

  • 删除并重新创建连接:删除并重新创建到 GitHub Enterprise Server 存储库的连接。 按照 Connect 中Azure Boards文档中提供的步骤序列进行操作。

  • 修复 Webhook url:转到 GitHub 的存储库设置页并编辑 Webhook URL,指出已迁移Azure DevOps Services组织 URL:https://dev.azure.com/{OrganizationName}/_apis/work/events?api-version=5.2-preview

连接到多个 Azure DevOps 组织

如果将 GitHub 存储库连接到在多个 Azure DevOps 组织中定义的两个或多个项目,例如 dev.azure.com/Contoso 和 dev.azure.com/Fabrikam,则使用 AB# 提及链接到工作项时可能会收到意外结果。 出现此问题是因为工作项 ID 在 Azure DevOps 组织中并不唯一,因此 AB#12 可以引用 Contoso 或 Fabrikam 组织中的工作项。 因此,当提交消息或拉取请求中提及工作项时,两个组织都尝试创建指向具有匹配 ID 的工作项的链接, (如果存在) 。

通常,用户打算使用 AB# 提及链接到其中一个项目中的单个工作项。 但是,如果两个帐户中存在具有相同 ID 的工作项,则会为这两个工作项创建链接,这可能会导致混淆。

目前,无法解决此问题,因此我们建议仅将单个 GitHub 存储库连接到单个 Azure DevOps 组织。

注意

使用适用于 GitHub 的 Azure Boards 应用建立连接时,该应用会阻止你连接到两个不同的组织。 如果 GitHub 存储库未正确连接到错误的 Azure DevOps 组织,则需要联系该组织的所有者以删除连接,然后才能将存储库添加到正确的 Azure DevOps 组织。

更新选择工作项类型的 XML 定义

如果你的组织使用托管的 XML 或本地 XML 进程模型来自定义工作跟踪体验,并且你想要从工作项窗体中的“开发”部分链接到 GitHub 链接类型,则需要更新工作项类型的 XML 定义。

例如,如果要将用户情景和 bug 链接到 GitHub 提交和拉取 来自“开发 ”部分的请求,则需要更新用户情景和 bug 的 XML 定义。

按照 托管 XML 进程模型中 提供的任务序列更新 XML 定义。 对于每个工作项类型,请查找 Group Label="Development" 该部分,并在以下代码语法中添加以下两行以支持外部链接类型: GitHub 提交GitHub 拉取请求

             <ExternalLinkFilter Type="GitHub Pull Request" />  
             <ExternalLinkFilter Type="GitHub Commit" />  

更新后,该节应如下所示。

<Group Label="Development">  
   <Control Type="LinksControl" Name="Development">  
      <LinksControlOptions ViewMode="Dynamic" ZeroDataExperience="Development" ShowCallToAction="true">  
         <ListViewOptions GroupLinks="false">   
         </ListViewOptions>  
         <LinkFilters>  
             <ExternalLinkFilter Type="Build" />  
             <ExternalLinkFilter Type="Integrated in build" />  
             <ExternalLinkFilter Type="Pull Request" />  
             <ExternalLinkFilter Type="Branch" />  
             <ExternalLinkFilter Type="Fixed in Commit" />  
             <ExternalLinkFilter Type="Fixed in Changeset" />  
             <ExternalLinkFilter Type="Source Code File" />  
             <ExternalLinkFilter Type="Found in build" />  
             <ExternalLinkFilter Type="GitHub Pull Request" />  
             <ExternalLinkFilter Type="GitHub Commit" />  
         </LinkFilters>  
      </LinksControlOptions>  
   </Control>  
</Group>