trigger:
branches:
include:
- main
- releases/*
- feature/*
exclude:
- releases/old*
- feature/*-working
paths:
include:
- docs/*.md
PR 触发器
拉取请求 (PR) 触发器会导致管道在打开拉取请求或推送更改时运行。 在 Azure Repos Git 中,此功能是使用分支策略实现的。 若要启用 PR 验证,请导航到所需分支的分支策略,并为该分支配置 生成验证策略 。 有关详细信息,请参阅 配置分支策略。
如果已打开 PR 并将更改推送到其源分支,则可能会运行多个管道:
目标分支的生成验证策略指定的管道将在合并提交 (拉取请求) 的源分支与目标分支之间的合并代码上运行,而不管是否存在其消息或说明包含[skip ci]
(或其任何变体) 的推送提交。
如果没有 推送提交 的消息或说明包含 [skip ci]
(或其任何变体) ,则为更改 PR 的源分支触发的管道。 如果至少有一个推送的提交包含 [skip ci]
,则管道将不会运行。
最后,合并 PR 后,Azure Pipelines 将运行由推送到目标分支的 CI 管道,即使某些合并提交的消息或说明包含 [skip ci]
(或其任何变体) 也是如此。
若要为 Azure Repos Git 存储库配置验证版本,你必须是其项目的项目管理员。
即使配置分支策略,草稿拉取请求也不会触发管道。
验证分叉的贡献
从Azure Repos分支生成拉取请求与在同一存储库或项目中生成拉取请求没有什么不同。 只能在项目所属的同一组织中创建分叉。
限制作业授权范围
Azure Pipelines 提供了多个安全设置来配置管道运行的作业授权范围。
将作业授权范围限制为当前项目
保护对 YAML 管道中存储库的访问
将作业授权范围限制为当前项目
Azure Pipelines 为当前项目设置提供两个 限制作业授权范围 :
将作业授权范围限制为非发布管道的当前项目 - 此设置适用于 YAML 管道和经典生成管道。 此设置不适用于经典发布管道。
将作业授权范围限制为发布管道的当前项目 - 此设置仅适用于 经典发布管道 。
管道使用集合范围内的访问令牌运行,除非启用了管道类型的相关设置。 使用 “限制作业授权范围 ”设置,可以将所有管道的访问范围缩小到当前项目。 如果要访问组织中其他项目中的 Azure Repos Git 存储库,则可能会影响管道。
如果Azure Repos Git 存储库与管道位于不同的项目中,并且启用了管道类型的“限制作业授权范围”设置,则必须向第二个项目授予对管道的生成服务标识的权限。 有关详细信息,请参阅 管理生成服务帐户权限。
Azure Pipelines 提供了一个安全设置,用于配置管道运行的作业授权范围。
将作业授权范围限制为当前项目 - 此设置适用于 YAML 管道和经典生成管道。 此设置不适用于 经典发布管道。
管道使用集合范围的访问令牌运行,除非已启用 将作业授权范围限制为当前项目 。 此设置允许将所有管道的访问范围缩小到当前项目。 如果要访问组织中其他项目中的 Azure Repos Git 存储库,则可能会影响管道。
如果Azure Repos Git 存储库与管道位于不同的项目中,并且启用了“限制作业授权范围”设置,则必须向第二个项目授予对管道的生成服务标识的权限。 有关详细信息,请参阅作业授权范围。
有关 限制作业授权范围的详细信息,请参阅 了解作业访问令牌。
将作业授权范围限制为引用的 Azure DevOps 存储库
除非启用了将 作业授权范围限制 为引用的 Azure DevOps 存储库,否则管道可以访问授权项目中的任何 Azure DevOps 存储库 ,如上一节中所述。 启用此选项后,可以将所有管道的访问范围缩小为仅由 checkout
使用该存储库的管道作业中的步骤或 uses
语句显式引用的 Azure DevOps 存储库。
若要配置此设置,请导航到“管道”、“组织设置”或“项目设置”。 如果在组织级别启用,则设置将灰显,在项目设置级别不可用。
启用将作业授权范围限制为引用的 Azure DevOps 存储库时,YAML 管道必须显式引用要在管道中使用的任何Azure Repos Git 存储库,作为使用该存储库的作业中的签出步骤。 除非首先显式引用该存储库,否则无法使用脚本任务和 git 命令为 Azure Repos Git 存储库提取代码。
在启用了将作业授权范围限制为引用 Azure Repos的 Azure DevOps 存储库时,在管道中使用 git 存储库之前,存在一些例外情况,即无需显式引用该存储库。
如果管道中没有显式签出步骤,则就像有一个步骤一 checkout: self
样,存储库 self
已签出。
如果使用脚本对公共项目中的存储库执行只读操作,则无需在步骤 checkout
中引用公共项目存储库。
如果使用向存储库提供自己的身份验证的脚本(例如 PAT),则无需在步骤中 checkout
引用该存储库。
例如,启用“将作业授权范围限制为引用的 Azure DevOps 存储库”时,如果管道位于FabrikamProject/Fabrikam
组织中的存储库中,并且你想要使用脚本来检查FabrikamProject/FabrikamTools
存储库,则必须在步骤中或语句uses
中checkout
引用此存储库。
如果已在使用签出步骤签出 FabrikamTools
管道中的存储库,则可以随后使用脚本与该存储库进行交互。
steps:
- checkout: git://FabrikamFiber/FabrikamTools # Azure Repos Git repository in the same organization
- script: # Do something with that repo
# Or you can reference it with a uses statement in the job
uses:
repositories: # List of referenced repositories
- FabrikamTools # Repository reference to FabrikamTools
steps:
- script: # Do something with that repo like clone it
在许多情况下,可以利用多存储库签出,无需使用脚本在管道中检查其他存储库。 有关详细信息,请参阅 在管道中签出多个存储库。
保护对 YAML 管道中存储库的访问
管道可以访问授权项目中的任何 Azure DevOps 存储库,如前面的 将作业授权范围限制为当前项目 部分所述,除非启用了 保护对 YAML 管道中的存储库的访问 。 启用此选项后,可以将所有管道的访问范围缩小到仅由 checkout
使用该存储库的管道作业中的步骤或 uses
语句显式引用的 Azure DevOps 存储库。
若要配置此设置,请导航到“管道”、“组织设置”或“项目设置”。 如果在组织级别启用,则设置将灰显,在项目设置级别不可用。
默认情况下,为 2020 年 5 月之后创建的新组织和项目启用保护对 YAML 管道中的存储库的访问。
启用“保护对 YAML 管道中的存储库的访问”后,YAML 管道必须显式引用要在管道中使用的任何Azure Repos Git 存储库,作为使用该存储库的作业中的签出步骤。 除非首先显式引用该存储库,否则无法使用脚本任务和 git 命令为 Azure Repos Git 存储库提取代码。
在启用 YAML 管道中保护对存储库的访问时,在管道中使用 Azure Repos git 存储库之前,存在一些例外情况,即无需显式引用该存储库。
如果管道中没有显式签出步骤,则就像有一个步骤一 checkout: self
样,存储库 self
已签出。
如果使用脚本对公共项目中的存储库执行只读操作,则无需在步骤 checkout
中引用公共项目存储库。
如果使用向存储库提供自己的身份验证的脚本(例如 PAT),则无需在步骤中 checkout
引用该存储库。
例如,启用“在 YAML 管道中保护对存储库的访问”时,如果管道位于FabrikamProject/Fabrikam
组织的存储库中,并且你想要使用脚本来检查FabrikamProject/FabrikamTools
存储库,则必须在步骤中checkout
引用此存储库,或者使用 uses
语句引用此存储库。
如果已在使用签出步骤签出 FabrikamTools
管道中的存储库,则可以随后使用脚本与该存储库进行交互。
steps:
- checkout: git://FabrikamFiber/FabrikamTools # Azure Repos Git repository in the same organization
- script: # Do something with that repo
# Or you can reference it with a uses statement in the job
uses:
repositories: # List of referenced repositories
- FabrikamTools # Repository reference to FabrikamTools
steps:
- script: # Do something with that repo like clone it
在许多情况下,可以利用多存储库签出,无需使用脚本在管道中检查其他存储库。 有关详细信息,请参阅 在管道中签出多个存储库。
触发管道时,Azure Pipelines 会从 Azure Repos Git 存储库拉取源代码。 你可以控制其发生方式的各个方面。
在管道中包含签出步骤时,我们将运行以下命令: git -c fetch --force --tags --prune --prune-tags --progress --no-recurse-submodules origin --depth=1
。
如果这不能满足你的需求,你可以选择通过 checkout: none
排除内置签出,然后使用脚本任务执行你自己的签出。
Git 的首选版本
Windows 代理附带了自己的 Git 副本。
如果希望提供自己的 Git 而不是使用包含的副本,请将 设置为 System.PreferGitFromPath
true
。
在非 Windows 代理上,此设置始终为 true。
如果要签出单个存储库,默认情况下,源代码将签出到名为 的 s
目录中。 对于 YAML 管道,可以通过使用 path
指定checkout
来更改此设置。 指定的路径相对于 $(Agent.BuildDirectory)
。 例如:如果签出路径值为 mycustompath
且 $(Agent.BuildDirectory)
为 C:\agent\_work\1
,则源代码将签出到 C:\agent\_work\1\mycustompath
中。
如果使用多个 checkout
步骤并签出多个存储库,并且未使用 path
显式指定文件夹,则每个存储库都放置在以存储库命名的 的 s
子文件夹中。 例如,如果检查两个名为 tools
和 code
的存储库,则源代码将签出到 C:\agent\_work\1\s\tools
和 C:\agent\_work\1\s\code
中。
请注意,签出路径值不能设置为高于 $(Agent.BuildDirectory)
的任何目录级别,因此 path\..\anotherpath
将导致有效的签出路径 (即 C:\agent\_work\1\anotherpath
) ,但类似 的值 ..\invalidpath
不会 (即 C:\agent\_work\invalidpath
) 。
可以在管道的path
“签出”步骤中配置设置。
steps:
- checkout: self # self represents the repo where the initial Pipelines YAML file was found
clean: boolean # whether to fetch clean each time
fetchDepth: number # the depth of commits to ask Git to fetch
lfs: boolean # whether to download Git-LFS files
submodules: true | recursive # set to 'true' for a single level of submodules or 'recursive' to get submodules of submodules
path: string # path to check out source code, relative to the agent's build directory (e.g. \_work\1)
persistCredentials: boolean # set to 'true' to leave the OAuth token in the Git config after the initial fetch
此设置在经典编辑器中不可配置。 源代码将签出到名为 s
的目录中,该目录相对于 $(Agent.BuildDirectory)
。 例如:如果 $(Agent.BuildDirectory)
为 C:\agent\_work\1
,则源代码将签出到 C:\agent\_work\1\mycustompath
中。
如果要从子模块下载文件,submodules
可以在管道的 Checkout 步骤中配置 设置。
steps:
- checkout: self # self represents the repo where the initial Pipelines YAML file was found
clean: boolean # whether to fetch clean each time
fetchDepth: number # the depth of commits to ask Git to fetch
lfs: boolean # whether to download Git-LFS files
submodules: true | recursive # set to 'true' for a single level of submodules or 'recursive' to get submodules of submodules
path: string # path to check out source code, relative to the agent's build directory (e.g. \_work\1)
persistCredentials: boolean # set to 'true' to leave the OAuth token in the Git config after the initial fetch
包含在上面指定的 Azure Repos Git 存储库所在的同一项目中。 代理用于从 main 存储库获取源的相同凭据也用于获取子模块的源。
通过使用相对于 main 存储库的 URL 添加。 例如:
此将签出: git submodule add ../../../FabrikamFiberProject/_git/FabrikamFiber FabrikamFiber
在此示例中,子模块引用同一 Azure DevOps 组织中 (FabrikamFiber) 存储库,但在 FabrikamFiberProject) (不同的项目中。 代理用于从 main 存储库获取源的相同凭据也用于获取子模块的源。 这要求作业访问令牌有权访问第二个项目中的存储库。 如果如上一部分所述限制作业访问令牌,则无法执行此操作。 可以通过以下方法允许作业访问令牌访问第二个项目中的存储库: () 显式授予对第二个项目中的项目生成服务帐户的访问权限,或者 (b) 使用集合范围的访问令牌而不是整个组织的项目范围令牌。 有关这些选项及其安全隐患的详细信息,请参阅 访问存储库、项目和其他资源。
此名称不会签出: git submodule add https://fabrikam-fiber@dev.azure.com/fabrikam-fiber/FabrikamFiberProject/_git/FabrikamFiber FabrikamFiber
在某些情况下,无法使用 “签出子模块 ”选项。
你可能有这样一种情况:需要一组不同的凭据才能访问子模块。
例如,如果main存储库和子模块存储库不存储在同一 Azure DevOps 组织中,或者作业访问令牌无权访问不同项目中的存储库,则可能会发生这种情况。
如果无法使用 “签出子模块 ”选项,则可以改用自定义脚本步骤来提取子模块。
首先, (PAT) 获取个人访问令牌,并使用 作为 pat:
前缀。
接下来,对此前缀字符串进行 base64 编码 ,以创建基本身份验证令牌。
最后,将此脚本添加到管道:
git -c http.https://<url of submodule repository>.extraheader="AUTHORIZATION: Basic <BASE64_ENCODED_STRING>" submodule update --init --recursive
请务必将“<BASE64_ENCODED_STRING>”替换为 Base64 编码的“pat:token”字符串。
在项目或生成管道中使用机密变量来存储生成的基本身份验证令牌。
使用该变量在上述 Git 命令中填充机密。
问:为什么不能在代理上使用 Git 凭据管理器?答: 在专用生成代理上安装的 Git 凭据管理器中存储子模块凭据通常无效,因为每当更新子模块时,凭据管理器可能会提示你重新输入凭据。 当无法进行用户交互时,在自动生成期间,这是不可取的。
提取 Git 存储库的内容时, --tags
签出步骤使用 选项。 这会导致服务器提取所有标记以及这些标记指向的所有对象。 这会增加在管道中运行任务的时间,尤其是在具有大量标记的大型存储库时。 此外,即使启用浅取选项,签出步骤也会同步标记,因此可能会破坏其用途。 为了减少从 Git 存储库提取或提取的数据量,Microsoft 添加了一个新的签出选项来控制同步标记的行为。 此选项在经典管道和 YAML 管道中均可用。
是否在签出存储库时同步标记可以通过设置 fetchTags
属性在 YAML 中配置,并在 UI 中通过配置 同步标记 设置来配置。
对于在 2022 年 9 月发布的 Azure DevOps 冲刺 209 发布之前创建的现有管道,同步标记的默认值与添加 同步标记 选项之前的现有行为相同,即 true
。
对于在 Azure DevOps 冲刺版本 209 之后创建的新管道,同步标记的默认值为 false
。
如果在步骤中checkout
显式设置fetchTags
,该设置优先于管道设置 UI 中配置的设置。
你可能想要限制在历史记录中下载的距离。 这实际上会导致 git fetch --depth=n
。 如果存储库很大,此选项可能会提高生成管道的效率。 如果存储库已使用很长时间并且具有相当大的历史记录,则存储库可能很大。 如果添加和以后删除了大型文件,则它也可能很大。
在 2022 年 9 月 Azure DevOps sprint 209 更新 后创建的新管道默认启用 浅层提取 ,并配置为深度为 1。 以前默认不是浅层提取。 若要检查管道,请在管道设置 UI 中查看浅层提取设置,如以下部分所述。
可以在管道的fetchDepth
“签出”步骤中配置设置。
steps:
- checkout: self # self represents the repo where the initial Pipelines YAML file was found
clean: boolean # whether to fetch clean each time
fetchDepth: number # the depth of commits to ask Git to fetch
lfs: boolean # whether to download Git-LFS files
submodules: true | recursive # set to 'true' for a single level of submodules or 'recursive' to get submodules of submodules
path: string # path to check out source code, relative to the agent's build directory (e.g. \_work\1)
persistCredentials: boolean # set to 'true' to leave the OAuth token in the Git config after the initial fetch
还可以通过在管道设置 UI 中设置 浅层深度 选项来配置提取深度。
编辑 YAML 管道,然后选择 “更多操作”、“ 触发器”。
选择 “YAML”、“ 获取源”。
配置 浅层提取 设置。 取消选中“浅层提取”以禁用浅取,或检查框并输入“深度”以启用浅取。
管道启动时,要生成的分支将解析为提交 ID。 然后,代理提取分支并签出所需的提交。 分支解析为提交 ID和代理执行签出之间有一个小窗口。 如果分支更新迅速,并且你为浅层提取设置了非常小的值,则代理尝试检查它时,提交可能不存在。如果发生这种情况,请增加浅层提取深度设置。
你可能想要跳过提取新提交。 在需要以下情况时,此选项非常有用:
使用自己的自定义选项进行 Git 初始化、配置和提取。
使用生成管道仅运行自动化 (例如,某些脚本) 不依赖于版本控制中的代码。
在运行生成之前,可以执行不同形式的清理自承载代理的工作目录。
通常,为了提高自承载代理的性能,请不要清理存储库。 在这种情况下,若要获得最佳性能,请确保通过禁用用于生成的任务或工具的任何 “清理 ”选项,以增量方式生成。
如果确实需要清理存储库 (例如,以避免以前生成) 中的剩余文件导致的问题,选项如下。
如果使用 Microsoft 托管的代理 ,则清理无效,因为每次都会获得新的代理。
可以在管道的clean
“签出”步骤中配置设置。
steps:
- checkout: self # self represents the repo where the initial Pipelines YAML file was found
clean: boolean # whether to fetch clean each time
fetchDepth: number # the depth of commits to ask Git to fetch
lfs: boolean # whether to download Git-LFS files
submodules: true | recursive # set to 'true' for a single level of submodules or 'recursive' to get submodules of submodules
path: string # path to check out source code, relative to the agent's build directory (e.g. \_work\1)
persistCredentials: boolean # set to 'true' to leave the OAuth token in the Git config after the initial fetch
当 设置为 true
时clean
,生成管道将执行中任何更改$(Build.SourcesDirectory)
的撤消操作。 更具体地说,以下 Git 命令是在提取源之前执行的。
git clean -ffdx
git reset --hard HEAD
有关更多选项,可以配置workspace
作业的设置。
jobs:
- job: string # name of the job, A-Z, a-z, 0-9, and underscore
workspace:
clean: outputs | resources | all # what to clean up before the job runs
这提供了以下干净选项。
outputs:与上一签出任务中所述的清理设置相同的操作,以及:删除并重新创建 $(Build.BinariesDirectory)
。 请注意,始终在 $(Build.ArtifactStagingDirectory)
每次生成之前删除并重新创建 和 $(Common.TestResultsDirectory)
,而不考虑这些设置中的任何一个。
资源:删除并重新创建 $(Build.SourcesDirectory)
。 这会导致为每个生成初始化新的本地 Git 存储库。
all:删除并重新创建 $(Agent.BuildDirectory)
。 这会导致为每个生成初始化新的本地 Git 存储库。
源:生成管道执行中 $(Build.SourcesDirectory)
任何更改的撤消操作。 更具体地说,以下 Git 命令是在提取源之前执行的。
git clean -ffdx
git reset --hard HEAD
源和输出目录:与上述 “源” 选项相同的操作,以及:删除并重新创建 $(Build.BinariesDirectory)
。 请注意,始终在 $(Build.ArtifactStagingDirectory)
每次生成之前删除并重新创建 和 $(Common.TestResultsDirectory)
,而不考虑这些设置中的任何一个。
源目录:删除并重新创建 $(Build.SourcesDirectory)
。 这会导致为每个生成初始化新的本地 Git 存储库。
所有生成目录:删除并重新创建 $(Agent.BuildDirectory)
。 这会导致为每个生成初始化新的本地 Git 存储库。
在 标记格式 中,可以使用作用域为“全部”的用户定义变量和预定义变量。例如:
$(Build.DefinitionName)_$(Build.DefinitionVersion)_$(Build.BuildId)_$(Build.BuildNumber)_$(My.Variable)
前四个变量是预定义的。 My.Variable
可以在 “变量”选项卡上定义。
生成管道使用 Git 标记标记源。
某些生成变量可能会生成不是有效标签的值。 例如,和 $(Build.DefinitionName)
等$(Build.RequestedFor)
变量可以包含空格。 如果值包含空格,则不会创建标记。
生成管道标记源后,带有 Git ref refs/tags/{tag}
的项目会自动添加到已完成的生成中。 这为团队提供了额外的可跟踪性和更方便用户的方式,用于从生成导航到生成的代码。 标记被视为生成项目,因为它是由生成生成的。 手动或通过保留策略删除生成时,也会删除 标记。
常见问题解答
与Azure Repos集成相关的问题分为三类:
失败的触发器: 将更新推送到存储库时,管道未触发。
签出失败: 我的管道正在触发,但在签出步骤中失败。
版本错误: 我的管道运行,但它使用的是源/YAML 的意外版本。
失败的触发器
我刚刚创建了一个包含 CI/PR 触发器的新 YAML 管道,但未触发该管道。
请遵循以下每个步骤对失败的触发器进行故障排除:
你的 YAML CI 或 PR 触发器是否 被 UI 中的管道设置覆盖? 编辑管道时,选择 “...” ,然后选择 “触发器”。
选中“ 从此处替代 YAML 触发器 ”设置,了解存储库可用的触发器类型 (持续集成 或 拉取请求验证) 。
你是在 YAML 文件还是存储库的分支策略中配置 PR 触发器? 对于 Azure Repos Git 存储库,无法在 YAML 文件中配置 PR 触发器。 需要使用 分支策略。
管道是否已暂停或禁用? 打开管道的编辑器,然后选择“设置”以检查。 如果暂停或禁用管道,则触发器不起作用。
是否已在正确的分支中更新 YAML 文件? 如果将更新推送到分支,则同一分支中的 YAML 文件将控制 CI 行为。 如果将更新推送到源分支,则源分支与目标分支合并产生的 YAML 文件将控制 PR 行为。 请确保正确分支中的 YAML 文件具有必要的 CI 或 PR 配置。
是否已正确配置触发器? 定义 YAML 触发器时,可以为分支、标记和路径指定 include 和 exclude 子句。 确保 include 子句与提交的详细信息匹配,并且 exclude 子句不会排除它们。 检查触发器的语法,并确保其准确。
是否在定义触发器或路径时使用了变量? 不支持。
是否对 YAML 文件使用了模板? 如果是这样,请确保在 main YAML 文件中定义了触发器。 不支持在模板文件中定义的触发器。
是否排除了将更改推送到的分支或路径? 通过将更改推送到包含分支中的包含路径进行测试。 请注意,触发器中的路径区分大小写。 在触发器中指定路径时,请确保使用与实际文件夹相同的大小写。
你刚刚推送了一个新分支吗? 如果是这样,新分支可能不会启动新的运行。 请参阅“创建新分支时触发器的行为”部分。
我的 CI 或 PR 触发器工作正常。 但是,他们现在停止工作了。
首先完成上一个问题中的故障排除步骤。 然后,执行以下附加步骤:
PR 中是否有合并冲突? 对于未触发管道的 PR,请将其打开并检查它是否具有合并冲突。 解决合并冲突。
处理推送或 PR 事件时是否遇到延迟? 通常可以通过查看该问题是特定于单个管道还是项目中所有管道或存储库通用来验证此问题。 如果对任何存储库的推送或 PR 更新出现此症状,则可能在处理更新事件时遇到延迟。 在 状态页上检查我们是否遇到服务中断。 如果状态页显示问题,则我们的团队必须已开始处理该问题。 经常查看页面以获取有关该问题的更新。
我不希望用户在更新 YAML 文件时替代触发器的分支列表。 如何执行此操作?
有权贡献代码的用户可以更新 YAML 文件并包括/排除其他分支。 因此,用户可以在其 YAML 文件中包含自己的功能或用户分支,并将该更新推送到功能或用户分支。 这可能会导致针对该分支的所有更新触发管道。 如果要阻止此行为,可以:
在 Azure Pipelines UI 中编辑管道。
导航到 “触发器 ”菜单。
从此处选择“替代 YAML 持续集成触发器”。
指定要为触发器包含或排除的分支。
执行这些步骤时,将忽略 YAML 文件中指定的任何 CI 触发器。
我的 YAML 管道中有多个存储库。 如何为每个存储库设置触发器?
请参阅使用多个存储库中的触发器。
在签出步骤期间,我在日志文件中看到以下错误。 如何解决问题?
remote: TF401019: The Git repository with name or identifier XYZ does not exist or you do not have permissions for the operation you are attempting.
fatal: repository 'XYZ' not found
##[error] Git fetch failed with exit code: 128
请遵循以下每个步骤对签出失败进行故障排除:
存储库是否仍然存在? 首先,通过在 “存储库 ”页中打开它,确保它确实存在。
是否使用脚本访问存储库? 如果是,检查“将作业授权范围限制为引用的 Azure DevOps 存储库”设置。 启用“将作业授权范围限制为引用的 Azure DevOps 存储库”后,将无法使用脚本检查Azure Repos Git 存储库,除非先在管道中显式引用它们。
管道的 作业授权范围 是什么?
如果范围是 集合:
这可能是间歇性错误。 重新运行管道。
某人可能已删除对 Project Collection 生成服务帐户的访问权限。
转到存储库所在的项目的 “项目设置 ”。 选择“存储库>>特定存储库”,然后选择“安全性”。
检查 项目集合生成服务 (集合名称) 是否存在于用户列表中。
检查该帐户是否具有 “创建标记” 和 “读取 ”访问权限。
某人可能已删除对 Project Build Service 帐户的访问权限。
转到存储库所在的项目的 “项目设置 ”。 选择“存储库>>特定存储库”,然后选择“安全性”。
检查用户列表中是否存在 your-project-name 生成服务 (your-collection-name) 。
检查该帐户是否具有 “创建标记” 和 “读取 ”访问权限。
对于 CI 触发器,将评估正在推送的分支中的 YAML 文件,以查看是否应运行 CI 生成。
对于 PR 触发器,将评估合并 PR 的源分支和目标分支所产生的 YAML 文件,以查看是否应运行 PR 生成。
计划的触发器
管道完成触发器