“配置触发器失败,再次编辑并保存管道”,没有明显错误,也没有更多详细信息
Posted
技术标签:
【中文标题】“配置触发器失败,再次编辑并保存管道”,没有明显错误,也没有更多详细信息【英文标题】:"Configuring the trigger failed, edit and save the pipeline again" with no noticeable error and no further details 【发布时间】:2021-10-19 11:27:48 【问题描述】:在将一堆 YAML 管道转换为使用模板来保存作业逻辑以及定义我的管道变量后,我遇到了一个奇怪的问题。管道运行得非常好,但是我收到“检测到与管道触发器相关的一些最近的问题”。管道摘要页面顶部的警告和查看详细信息仅指出:“配置触发器失败,请再次编辑并保存管道。”
这里的奇怪部分是管道完全正常工作,包括触发器。没有任何问题,也没有提供有关假定问题的更多详细信息。我目前为管道覆盖了 YAML 触发器,但我也在 YAML 中定义了相同的触发器,看看是否有帮助(它没有)。
鉴于错误/警告提供的详细信息完全缺乏,我正在寻找有关可能导致此问题的原因或如何进一步排除故障的任何想法。这在开发人员中造成了很多困惑,他们认为警告可能导致他们的构建存在问题。
这里是主要管道。构建存储库是一个共享存储库,用于保存跨构建系统中的多个存储库使用的代码。 dev.yaml 包含开发环境特定的变量值。 Shared 持有基于管道运行的分支有条件地设置变量。
name: ProductName_$(BranchNameLower)_dev_$(MajorVersion)_$(MinorVersion)_$(BuildVersion)_$(Build.BuildId)
resources:
repositories:
- repository: self
- repository: build
type: git
name: Build
ref: master
# This trigger isn't used yet, but we want it defined for later.
trigger:
batch: true
branches:
include:
- 'dev'
variables:
- template: YAML/variables/shared.yaml@build
- template: YAML/variables/dev.yaml@build
jobs:
- template: ProductNameDevJob.yaml
parameters:
pipelinePool: $ variables.PipelinePool
validRef: $ variables.ValidRef
那么这就是实际工作 yaml 的开始。它提供了可在多个总体管道中使用的可重用作业定义:
parameters:
- name: dependsOn
type: object
default:
- name: pipelinePool
default: ''
- name: validRef
default: ''
- name: noCI
type: boolean
default: false
- name: updateBeforeRun
type: boolean
default: false
jobs:
- job: Build_ProductName
displayName: 'Build ProductName'
pool:
name: $ parameters.pipelinePool
demands:
- msbuild
- visualstudio
dependsOn:
- $ each dependsOnThis in parameters.dependsOn :
- $ dependsOnThis
condition: and(succeeded(), eq(variables['Build.SourceBranch'], variables['ValidRef']))
steps:
**step logic here
最后,我们有变量 YAML,它根据我们正在构建的内容有条件地设置管道变量:
variables:
- $ if or(eq(variables['Build.SourceBranch'], 'refs/heads/dev'), eq(variables['Build.SourceBranch'], 'refs/heads/users/ahenderson/azure_devops_build')) :
- name: BranchName
value: Dev
** Continue with rest of pipeline variables and settings of each value for each different context.
【问题讨论】:
【参考方案1】:我想我可能已经找到了问题所在。这似乎与在变量设置中使用条件有关。虽然将在任何有效的触发器配置中设置变量,但在验证期间似乎没有使用正确的值,这可能是导致问题的原因。将我的条件变量切换为首先设置一个默认值,然后有条件地替换该值似乎已经解决了这个问题。
如果 Microsoft 能在此处提供更有用的错误消息,那就太好了,在一定程度上找不到给定变量的值,但添加默认值似乎已经解决了问题。
【讨论】:
解决问题后能否给我们看一张更新后的管道图?顺便谢谢【参考方案2】:你可以在这里查看我的帖子:Azure DevOps pipeline trigger issue message not going away
正如我在您的 YAML 文件中看到的,您正在使用这个分支:'refs/heads/users/ahenderson/azure_devops_build'。
我认为您所引用的一些 YAML 文件在您的构建中定义为默认的分支中缺少:
切换到你的分支
【讨论】:
这不是正在使用的分支。这只是可能使用的一个可能的分支。默认分支是 dev 并且包含所有文件以及所有变量定义。问题是它在评估这个逻辑时实际上并没有使用任何分支名,这就是为什么需要一组默认的变量值。 这解决了我的问题。我正在使用带有 yaml 的辅助分支,而 master(default) 没有,因此出现此错误。谢谢克里斯托夫【参考方案3】:在我们的例子中,这是因为 YAML 文件的路径以斜杠开头:/builds/build.yaml
删除斜线修复了错误:builds/build.yaml
【讨论】:
以上是关于“配置触发器失败,再次编辑并保存管道”,没有明显错误,也没有更多详细信息的主要内容,如果未能解决你的问题,请参考以下文章