我的问题
我尝试创建模板化的 yaml Azure Devops 管道:
parameters:
- name: envs
type: object
default:
- QUAL
- PROD
- PREPROD
stages:
- template: Orchestrator.yml
parameters:
name: envs
type: object
default:
- QUAL
- PROD
- PREPROD
这是我的模板:
parameters:
envs: {}
stages:
- ${{ each env in parameters.envs }}:
- stage: ${{ env }}
jobs:
- job: Deploy
steps:
- script: echo Deploy project
displayName: 'Deploy'
- job: Tests
steps:
- script: echo Unit tests
displayName: Test 1
但我收到此错误消息:
<块引用>加载 YAML 构建管道时出错。数组 必须至少包含一个元素。参数名称:stage
好的,我像这样修改我的主脚本:
parameters:
- name: envs
type: object
default:
- QUAL
- PROD
- PREPROD
stages:
- stage: Build
jobs:
- job: Build
steps:
- script: echo Compilation completed...
displayName: 'Compile'
- template: Orchestrator.yml
parameters:
name: envs
type: object
default:
- QUAL
- PROD
- PREPROD
这次管道运行,但只有第一个作业。模板未加载。
我需要什么
我能够使用单个文件脚本使此场景工作,但我想使其与模板化脚本一起工作。
是否支持此方案?我该怎么办?
谢谢
答案 0 :(得分:0)
这里我有一个示例作为参考:
template.yaml
)中,这样写。parameters:
- name: envs
type: object
default:
- QUAL
- PROD
- PREPROD
stages:
- ${{ each env in parameters.envs }}:
- stage: ${{ env }}
displayName: 'Stage ${{ env }}'
jobs:
- job: job1
displayName: 'Job 1'
steps:
- bash: echo "Current job is job1 in ${{ env }}"
- job: job2
displayName: 'Job 2'
steps:
- bash: echo "Current job is job2 in ${{ env }}"
pipeline.yaml
)中,这样写。trigger:
- main
extends:
template: template.yaml
如果您不想硬编码 envs
中参数 'template.yaml
' 的值,您可以如下编写。
template.yaml
中这样写。parameters:
- name: envs
type: object
default: []
stages:
- ${{ each env in parameters.envs }}:
- stage: ${{ env }}
displayName: 'Stage ${{ env }}'
jobs:
- job: job1
displayName: 'Job 1'
steps:
- bash: echo "Current job is job1 in ${{ env }}"
- job: job2
displayName: 'Job 2'
steps:
- bash: echo "Current job is job2 in ${{ env }}"
pipeline.yaml
中这样写。trigger:
- main
stages:
- template: template.yaml
parameters:
envs:
- QUAL
- PROD
- PREPROD
要查看更多详细信息,您可以查看“YAML schema reference”。