生成本地 Bitbucket 存储库

Azure DevOps Services

注意

若要将 Bitbucket 云与 Azure Pipelines 集成,请参阅 Bitbucket 云

可以将本地 Bitbucket 服务器或其他 Git 服务器与 Azure Pipelines 集成。 你的本地服务器可能会在 Internet 中公开,也可能不会公开。

如果可以从运行 Azure Pipelines 服务的服务器访问你的本地服务器,那么:

  • 可以设置经典生成并配置 CI 触发器

如果无法从运行 Azure Pipelines 服务的服务器访问你的本地服务器,那么:

  • 可以设置经典生成管道并启动手动生成
  • 无法配置 CI 触发器

注意

YAML 管道不适用于本地 Bitbucket 存储库。

注意

PR 触发器不适用于本地 Bitbucket 存储库。

如果可以从托管代理访问你的本地服务器,则可以使用托管代理来运行手动、计划或 CI 生成。 否则,必须设置可访问本地服务器和提取代码的自托管代理。

可从 Azure Pipelines 访问

如果可以从 Azure Pipelines 服务访问你的本地 Bitbucket 服务器,请创建其他 Git 服务连接并使用它来创建管道。 选中“尝试从 Azure Pipelines 访问此 Git 服务器”选项。

CI 触发器通过轮询而不是通过 Webhook 来工作。 换言之,Azure Pipelines 会定期在 Bitbucket 服务器中检查是否对代码进行了任何更新。 如果有,Azure Pipelines 将启动新的运行。

无法从 Azure Pipelines 访问

如果无法从 Azure Pipelines 访问 Bitbucket 服务器,可以采取两种做法:

  • 与 IT 部门协作,在 Azure Pipelines 和本地 Git 服务器之间打开网络路径。 例如,可以在防火墙规则中添加例外,以允许来自 Azure Pipelines 的流量通过。 请参阅 Azure DevOps IP 部分,了解需要允许哪些 IP 地址。 此外,需要为 Bitbucket 服务器创建一个公共 DNS 条目,使 Azure Pipelines 能够将服务器的 FQDN 解析为 IP 地址。

  • 可以使用其他 Git 连接,但这需要告知 Azure Pipelines 不要尝试从 Azure Pipelines 访问此 Git 服务器。 CI 和 PR 触发器不适用于其他 Git 存储库。 只能启动手动或计划的管道运行。

可从 Microsoft 托管的代理访问

可能需要做出的另一项决定是要使用 Microsoft 托管的代理还是自托管代理来运行管道。 这种选择通常取决于 Microsoft 托管代理能否访问你的服务器。 若要检查是否可访问,请创建一个管道以使用 Microsoft 托管的代理,并确保添加一个步骤以从服务器签出源代码。 如果通过了此检查,则你可以继续使用 Microsoft 托管的代理。

无法从 Microsoft 托管的代理访问

如果上一部分所述的简单测试管道因出现错误 TF401019: The Git repository with name or identifier <your repo name> does not exist or you do not have permissions for the operation you are attempting 而失败,则无法从 Microsoft 托管的代理访问 Bitbucket 服务器。 同样,此问题可能是由于防火墙阻止了来自这些服务器的流量而导致。 在这种情况下,可以采取两种做法:

  • 与 IT 部门协作,在 Microsoft 托管的代理和 Bitbucket 服务器之间打开网络路径。 请参阅有关 Microsoft 托管的代理中的网络的部分。

  • 改用自托管代理规模集代理。 可以在网络中设置这些代理,因而可以访问 Bitbucket 服务器。 这些代理只需与 Azure Pipelines 建立出站连接。 无需为入站连接打开防火墙。 确保在创建服务连接时指定的服务器名称可从自托管代理解析。

Azure DevOps IP 地址

当你使用“其他 Git”连接来设置经典管道、禁用 Azure Pipelines 服务与 Bitbucket 服务器之间的通信,并使用自托管代理生成代码时,获得的体验将会降级

  • 必须在创建管道期间手动键入存储库的名称
  • 无法使用 CI 触发器,因为 Azure Pipelines 无法轮询代码更改
  • 无法将计划触发器与用于仅在发生更改时才执行生成的选项一起使用
  • 无法在用户界面中查看有关最新提交的信息

如果你要增强此体验,请务必启用从 Azure Pipelines 到 Bitbucket 服务器的通信。

若要允许来自 Azure DevOps 的流量进入 Bitbucket 服务器,请将入站连接中指定的 IP 地址或服务标记添加到防火墙的允许列表中。 如果使用 ExpressRoute,请务必将 ExpressRoute IP 范围也包含到防火墙的允许列表中。

允许 Azure Pipelines 尝试访问“其他 Git”服务连接中的 Git 服务器。

信息性运行

信息性运行告知 Azure DevOps 无法检索 YAML 管道的源代码。 源代码检索发生在对外部事件(例如,已推送提交)的响应中。 它还发生在对内部触发器的响应中,例如,检查是否发生了代码更改,以及是否启动了计划运行。 源代码检索可能因多种原因而失败,一个常见原因是 git 存储库提供程序限制了请求。 存在信息性运行不一定意味着 Azure DevOps 将运行管道。

信息性运行如以下屏幕截图所示。

Screenshot of an informational pipeline run.

可根据以下属性识别信息性运行:

  • 状态为 Canceled
  • 持续时间为 < 1s
  • 运行名称包含以下文本之一:
    • Could not retrieve file content for {file_path} from repository {repo_name} hosted on {host} using commit {commit_sha}.
    • Could not retrieve content for object {commit_sha} from repository {repo_name} hosted on {host}.
    • Could not retrieve the tree object {tree_sha} from the repository {repo_name} hosted on {host}.
    • Could not find {file_path} from repository {repo_name} hosted on {host} using version {commit_sha}. One of the directories in the path contains too many files or subdirectories.
  • 运行名称通常包含导致 YAML 管道加载失败的 BitBucket/GitHub 错误
  • 无阶段/作业/步骤

详细了解信息性运行

限制

Azure Pipelines 最多将存储库中的 2000 个分支加载到 Azure Devops 门户的下拉列表中,例如加载到“手动和计划生成的默认分支”设置中,或者在手动运行管道的情况下在选择分支时这样做。 如果在列表中没有看到所需的分支,请手动键入所需的分支名称。

常见问题解答

与 Bitbucket 服务器集成相关的问题分为以下几个类别:

  • 触发器失败将更新推送到存储库时,管道未触发。
  • 签出失败:管道正在触发,但在签出步骤中失败。

触发器失败

我已将更改推送到服务器,但管道未触发。

按照以下步骤对失败的触发器进行故障排除:

  • 是否可以从 Azure Pipelines 访问 Bitbucket 服务器? Azure Pipelines 会定期在 Bitbucket 服务器中轮询更改。 如果 Bitbucket 服务器位于防火墙后面,则此流量可能无法进入你的服务器。 如需了解详情,请参阅 Azure DevOps IP 地址,并验证是否已为所有必需的 IP 地址授予例外。 自你最初设置例外规则以来,这些 IP 地址可能已更改。 如果使用了外部 Git 连接并且无法从 Azure Pipelines 访问服务器,则只能启动手动运行。

  • 管道是否已暂停或禁用? 打开管道的编辑器,然后选择“设置”进行检查。 如果管道已暂停或禁用,则触发器将不起作用。

  • 是否排除了将更改推送到的分支或路径? 通过将更改推送到包含的分支中包含的路径进行测试。 请注意,触发器中的路径区分大小写。 在触发器中指定路径时,请确保使用与真实文件夹相同的大小写。

我未推送对我的代码所做的任何更新,但管道仍被触发。

  • Bitbucket 的持续集成触发器通过轮询来工作。 在每个轮询间隔之后,Azure Pipelines 会尝试联系 Bitbucket 服务器,以检查是否对代码做出了任何更新。 如果 Azure Pipelines 无法访问 Bitbucket 服务器(可能是因为出现网络问题),则我们会认为可能发生了代码更改,因而仍会启动新的运行。 当 Azure Pipelines 无法检索 YAML 管道的代码时,它会创建一个信息性运行

签出失败

当我尝试手动启动新的运行时,启动之前出现 4-8 分钟的延迟。

  • 无法从 Azure Pipelines 访问你的 Bitbucket 服务器。 确保未在 Bitbucket 服务连接中选择“尝试从 Azure Pipelines 访问此 Git 服务器”选项。 如果选择了该选项,则 Azure Pipelines 会尝试联系该服务器,而由于该服务器不可访问,因此 Azure Pipelines 最终会超时,同时仍会启动运行。 取消选中该选项可加快手动运行的速度。

签出步骤失败,并出现无法解析服务器的错误。

是否使用了 Microsoft 托管的代理? 如果是,这些代理可能无法访问你的 Bitbucket 服务器。 有关详细信息,请参阅无法从 Microsoft 托管的代理访问