“配置触发器失败,再次编辑并保存管道”,没有明显错误,也没有更多详细信息

AJ *_*son 20 azure-devops azure-devops-server azure-pipelines-yaml azure-devops-server-2020

在将一堆 YAML 管道转换为使用模板来保存作业逻辑以及定义管道变量后,我遇到了一个奇怪的问题。管道运行得很好,但是我收到“最近检测到的一些与管道触发相关的问题”。管道摘要页面顶部的警告和仅查看详细信息指出:“配置触发器失败,请再次编辑并保存管道。”

这里奇怪的部分是管道工作得很好,包括触发器。没有任何问题,也没有提供有关假定问题的更多细节。目前,我已经为管道覆盖了 YAML 触发器,但我也在 YAML 中定义了相同的触发器,看看这是否有帮助(但没​​有)。

我正在寻找有关可能导致此问题的原因的任何想法,或者鉴于错误/警告提供的完全缺乏详细信息,我如何能够进一步对其进行故障排除。这给开发人员带来了很多困惑,他们认为警告可能导致他们的构建出现问题。

这是主要管道。构建存储库是一个共享存储库,用于保存在构建系统中的多个存储库中使用的代码。dev.yaml 包含开发环境特定的变量值。共享保存基于管道运行的分支有条件设置的变量。

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 }}
Run Code Online (Sandbox Code Playgroud)

然后这就是实际工作 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
Run Code Online (Sandbox Code Playgroud)

最后,我们有变量 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.
Run Code Online (Sandbox Code Playgroud)

Chr*_*e P 13

您可以在此处查看我的帖子:Azure DevOps 管道触发器问题消息不会消失

正如我在 YAML 文件中看到的,您正在使用此分支:“refs/heads/users/ahenderson/azure_devops_build”。

我认为您所引用的一些 YAML 文件在您的构建中定义为默认的分支中丢失了: 在此输入图像描述

切换到您的分支

  • 这解决了我的问题。我正在使用带有 yaml 的辅助分支,而 master(默认)没有,所以出现了此错误。谢谢克里斯托夫 (3认同)

AJ *_*son 5

我想我可能已经找出问题所在了。看来这与变量设置中条件的使用有关。虽然变量将在任何有效的触发器配置中设置,但在验证过程中似乎未使用正确的值,这可能导致了问题。将我的条件变量切换为首先设置默认值,然后有条件地替换该值似乎已经解决了问题。

如果微软能在这里给出更有用的错误消息,在没有找到给定变量的值的范围内,那就太好了,但添加默认值似乎确实解决了问题。

  • 您能否向我们展示解决问题后更新后的管道的图像?顺便谢谢 (4认同)