将 Azure DevOps Server 连接到 GitHub(本地)

Azure DevOps Server 2022 | Azure DevOps Server 2020 | Azure DevOps Server 2019

将 Azure DevOps Server 项目连接到 GitHub 存储库时,支持在 GitHub 提交和工作项的拉取请求之间进行链接。 使用 Azure Boards 来计划和跟踪工作时,可使用 GitHub 进行软件开发。

注意

本地 Azure DevOps Server 2020 支持与 GitHub.com 和 GitHub Enterprise Server 存储库集成。 如果要从 Azure DevOps 服务进行连接,请参阅将 Azure Board 连接到 GitHub

将 Azure DevOps Server 项目连接到 GitHub Enterprise Server 存储库时,支持在 GitHub 提交和工作项的拉取请求之间进行链接。 使用 Azure Boards 来计划和跟踪工作时,可使用 GitHub Enterprise 进行软件开发。

注意

本地 Azure DevOps Server 2019 支持与 GitHub Enterprise Server 存储库集成。 如果要从 Azure DevOps 服务进行连接,请参阅将 Azure Board 连接到 GitHub

先决条件

  • 通过安装 Azure DevOps Server 2020.1.1 Patch 2,连接到 GitHub.com 存储库。 如果没有此修补程序,则只能连接到 GitHub Enterprise Server 存储库。
  • 在 GitHub 组织或帐户上安装适用于 GitHub 的 Azure Boards 应用
  • 连接到 Azure Boards 或 Azure DevOps 项目。 如果没有项目,请创建一个
  • 你必须是项目集合管理员组和项目的参与者组的成员。 如果你创建了项目,则拥有权限。
  • 你必须是要连接到的 GitHub Enterprise Server 的管理员。

身份验证选项

支持以下身份验证选项。

注意

Azure DevOps Server 2020 不支持 OAuth。

在 GitHub 中将 Azure DevOps 注册为 OAuth 应用

如果计划使用 OAuth 将 Azure DevOps Server 与 GitHub Enterprise Server 连接,则首先需要将应用程序注册为 OAuth 应用。 有关详细信息,请参阅创建 OAuth 应用

注册 Azure DevOps Server

  1. 登录到 GitHub Enterprise Server 的 Web 门户。

    Screenshot of sign in for GitHub Enterprise Server.

  2. 选择“设置”>“开发人员设置”>“Oauth 应用”>“新建 OAuth 应用”

    Screenshot showing sequence for getting to New OAuth App screen.

  3. 输入信息,注册 Azure DevOps Server 应用程序。

    Screenshot of Azure DevOps Server project registration.

    对于“主页 URL”,请指定项目集合的“公共 URL”。 打开 Azure DevOps 管理控制台并查看“应用程序层”节点时,可以找到此 URL。

    Screenshot of Azure DevOps Server Administration Console, Application Tier.

    对于“授权回调 URL”,请使用以下模式构造 URL。

    {Azure DevOps Server Public Url}/{Collection Name}/_admin/oauth2/callback

    例如:

    http://contoso/DefaultCollection/_admin/oauth2/callback

    https://tfs.contoso.com/MyCollection/_admin/oauth2/callback

  4. 选择“注册应用程序”。

  5. 将显示一个页面,为已注册的 OAuth 应用程序提供“客户端 ID”和“客户端密码”

    Screenshot of Client ID and Client Secret for your registered OAuth application.

在 Azure DevOps Server 中注册 OAuth 配置

  1. 登录到 Azure DevOps Server 的 Web 门户。

  2. 将 GitHub Enterprise OAuth 配置添加到 Azure DevOps Server 集合。

  3. 选择“管理员设置”>“Oauth 配置”>“添加 Oauth 配置”

    Screenshot showing step sequence to add OAuth configuration.

  4. 输入你的信息,然后选择“创建”

    Screenshot of OAuth configuration dialog.

将 Azure DevOps Server 连接到 GitHub Enterprise Server

可将多达 250 个 GitHub 存储库连接到一个 Azure Boards 项目。

注意

需要 Azure DevOps Server 2020.1 更新或更高版本才可连接到 100 多个 GitHub 存储库。
连接到 GitHub.com 存储库需要 Azure DevOps Server 2020.1.1 Patch 2 或更高版本。

可将多达 100 个 GitHub 存储库连接到一个 Azure Boards 项目。 此限制无法进行更改。

  1. 打开 Azure DevOps Server 的 Web 门户。

  2. 选择 Azure DevOps 徽标以打开“项目”,然后选择为连接到 GitHub Enterprise 存储库而配置的 Azure Boards 项目。

  1. 选择“项目设置”>“GitHub 连接”

    Screenshot of open Project Settings>GitHub connections.

  2. 如果是第一次从项目建立连接,请选择要用于建立连接的身份验证方法:

    Screenshot of first time connecting with GitHub credentials.

    否则,请选择“新建连接”,然后从“新建连接”对话框中选择身份验证方法。

  1. 选择项目设置”>“GitHub 连接”>“连接 GitHub Enterprise 帐户”

    Screenshot of Project settings, selected Integrations.

    或者,如果使用这些凭据,请选择“个人访问令牌”或“用户名和密码”。

使用 OAuth 连接

选择在在 Azure DevOps Server 中注册 OAuth 配置的步骤 4 中设置的配置。 然后,选择“连接”。

Screenshot fo New GitHub Enterprise connection, OAuth dialog.

使用个人访问令牌连接

  1. 若要创建 PAT,请参阅创建个人访问令牌

    提示

    创建 GitHub PAT 时,请确保包含以下范围:repo, admin:repo_hook, read:user, user:email

  2. 输入 GitHub Enterprise Server 的 URL 以及该服务器识别的“个人访问令牌”凭据。 然后选择“连接”

Screenshot of sign in with PAT.

使用用户名和密码连接

  1. 输入 GitHub Enterprise Server 的 URL 以及该服务器识别的管理员帐户凭据。 然后选择“连接”。

Screenshot of sign in with username and password.

  1. 该对话框列出了你拥有 GitHub 管理权限的所有存储库。 可以在“我的”和“全部”之间切换以确定是否显示其他存储库,然后勾选要添加的存储库。 完成操作后,选择“保存”

    Screenshot of repositories to select to add.

  2. 要首次从 Azure Boards 连接到 GitHub 帐户或组织,还需要安装适用于 GitHub 的 Azure Boards 应用。 按照确认连接中概述的过程完成集成。

解决连接问题

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 存储库集成。 Azure DevOps Servers 2019 及更高版本仅支持与 GitHub Enterprise Server 存储库集成。不支持与其他 Git 存储库集成。

解决访问问题

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

Screenshot of failed connection.

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

请考虑以下解决方案:

  • 如果连接使用的是 OAuth:

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

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

      删除并重新创建与 GitHub 存储库的连接。 重新创建连接会导致 GitHub 提示重新授权 Azure Boards。

  • 如果连接使用的是 PAT:

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

    • 用户可能已丢失 GitHub 存储库的管理员权限。

      重新创建 PAT,并确保令牌的范围包含所需的权限:repo, read:user, user:email, admin:repo_hook

更新选定的工作项类型的 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>  

后续步骤