首页 > 解决方案 > 使用参数化模板来避免代码重复会导致错误消息:'A sequence was expected'

问题描述

对于我们的构建,我想使用一个为每个推送/拉取请求触发的阶段,构建矩阵中的参数组合数量有限。

另一个阶段,每晚使用预定的构建执行,我想使用带有所有参数组合的完整构建矩阵。由于 Azure Pipelines不支持构建矩阵的紧凑表示,我至少想将构建矩阵放入一个单独的文件中,以便该文件至少排列清楚。

azure-pipelines.yml(主文件)

stages:
  - stage: ci_build_on_default_pool
    jobs:
      - template: tools/azure-pipelines/azure-jobs.yml
        parameters:
          stage_name: ci_build_on_default_pool
          pool_definition:
            name: Default
          test_strategy:
            - template: tools/azure-pipelnes/ci-build-matrix.yml

  - stage: ci_build_on_azure_os_free_pool
    jobs:
      - template: tools/azure-pipelines/azure-jobs.yml
        parameters:
          stage_name: ci_build_on_azure_os_free_pool
          pool_definition:
            vmImage: 'ubuntu-latest'
          test_strategy:                
            - template: tools/azure-pipelnes/ci-build-matrix.yml

  # Special stage for midnight build:
  - stage: cron_build_on_azure_os_free_pool
    condition: eq(variables['Build.Reason'], 'Schedule')
    jobs:
      - template: tools/azure-pipelines/azure-jobs.yml
        parameters:
          stage_name: cron_build_on_azure_os_free_pool
          pool_definition:
            vmImage: 'ubuntu-latest'
          test_strategy:
              matrix:
                core:
                  parameter: core
                python:
                  parameter: python
                libraries:
                  parameter: libraries

azure-jobs.yml(包含构建作业定义的文件)

parameters:
  pool_definition:
  stage_name:
  test_strategy: {}

jobs:
[ ... ]

- job: runOnAzure_test
  pool: ${{parameters.pool_definition}}
  container: flink-build-container
  strategy: ${{parameters.test_strategy}}
  steps:


ci-build-matrix.yml(两个阶段共享的默认矩阵定义)

matrix:
  core:
    parameter: core
  python:
    parameter: python
  libraries:
    parameter: libraries

[ ... ]

完整的源代码可在此处获得

使用这些输入,我收到以下错误

/tools/azure-pipelines/azure-jobs.yml (Line: 60, Col: 13): A sequence was not expected

我该如何解决这个问题?

标签: azure-pipelines

解决方案


我记得当我第一次开始使用模板时遇到过这个问题。我很确定它必须与模板的第一步有关,这必须是一项任务。


推荐阅读