Azure Pipelines YAML If条件验证失败,请求技术排查
Azure Pipelines YAML 条件判断语法错误排查
报错信息
/azure-pipelines.yml (Line: 64, Col: 16): Expected at least one key-value pair in the mapping
/azure-pipelines.yml (Line: 76, Col: 62): Expected a mapping
/azure-pipelines.yml (Line: 76, Col: 16): Expected at least one key-value pair in the mapping
问题代码片段
name: $(Version.Major).$(Version.Minor).$(Version.Semantic) trigger: branches: include: - master - feature/* - bug/* parameters: - name: host type: string default: 1 values: - 1 - 2 - 3 - name: checkserver displayName: 检查服务器是否为Tomcat type: boolean variables: # 错误起始部分 - ${{ if contains(parameters.host, '1_') }}: - task: Maven@3 inputs: mavenPomFile: pom.xml mavenOptions: '-YAZZ' javaHomeOption: JDKVersion - ${{ if contains(parameters.host, '_4_') }}: - task: Maven@4 inputs: mavenPomFile: pom.xml mavenOptions: '-ZYZZ' javaHomeOption: JDKVersion jdkVersionOption: '1.17' displayName: 编译Maven项目
错误原因及修复方案
核心是两个YAML语法层级问题:
嵌套条件缩进错误
第二个${{ if }}属于第一个条件块的嵌套内容,但当前代码中它和第一个条件下的- task同级,导致解析器认为它是独立的条件块,破坏了层级结构。条件块无有效内容
- ${{ if }}:冒号后必须缩进并跟随映射/列表内容,第二个条件下的- task没有缩进在条件范围内,导致条件块为空,触发"Expected at least one key-value pair"错误。
修复后的代码
name: $(Version.Major).$(Version.Minor).$(Version.Semantic) trigger: branches: include: - master - feature/* - bug/* parameters: - name: host type: string default: 1 values: - 1 - 2 - 3 - name: checkserver displayName: 检查服务器是否为Tomcat type: boolean variables: # 修复后的条件块 - ${{ if contains(parameters.host, '1_') }}: - task: Maven@3 inputs: mavenPomFile: pom.xml mavenOptions: '-YAZZ' javaHomeOption: JDKVersion # 嵌套条件缩进至父条件同级,确保属于父条件块内容 - ${{ if contains(parameters.host, '_4_') }}: - task: Maven@4 inputs: mavenPomFile: pom.xml mavenOptions: '-ZYZZ' javaHomeOption: JDKVersion jdkVersionOption: '1.17' displayName: 编译Maven项目
额外提示
- 当前
host参数值为1/2/3,但条件判断的是'1_'和'_4_',永远无法匹配,需根据实际业务调整参数值或条件字符串。 - YAML缩进严格统一(建议用2个空格),避免混用空格和制表符。
内容的提问来源于stack exchange,提问作者Rupesh SA
相关产品推荐
相关产品推荐

