生成本地 Bitbucket 存储库
Azure DevOps Services
注释
若要将 Bitbucket Cloud 与 Azure Pipelines 集成,请参阅 Bitbucket Cloud。
可以将本地 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 将运行管道。
信息性运行如以下屏幕截图所示。
信息性管道运行的屏幕截图。
可根据以下属性识别信息性运行:
- 状态为
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 服务器集成相关的问题分为以下类别:
触发器失败
我已将更改推送到服务器,但未触发管道。
按照以下各步骤对失败的触发器进行故障排除:
Bitbucket 服务器是否可从 Azure Pipelines 访问? 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 将尝试联系服务器,并且由于服务器无法访问,因此它最终会超时并无论如何启动运行。 取消选中该选项可加快手动运行速度。
签出步骤失败,出现服务器无法解决的错误。
是否使用Microsoft托管代理? 如果是这样,这些代理可能无法访问 Bitbucket 服务器。 有关详细信息,请参阅 无法访问Microsoft托管代理。