不能 运行 具有动态创建阶段的模板化 yaml Azure Devops 管道
Can't run a templated yaml Azure Devops pipeline with dynamically created stage
我的问题
我尝试创建模板化的 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
但我收到此错误消息:
An error occurred while loading the YAML build pipeline. The array
must contain at least one element. Parameter name: stages
好的,我这样修改我的主脚本:
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
这次管道运行,但只运行第一个作业。模板未加载。
我需要的
我能够使用单个文件脚本来实现此场景,但我想使用模板化脚本来实现它。
这个场景支持吗?我该怎么办?
谢谢
这里我有一个示例作为参考:
- 在模板YAML文件中(这里我命名为
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 }}"
- 在管道YAML(这里我命名为
pipeline.yaml
)中,这样写。
trigger:
- main
extends:
template: template.yaml
- 结果
如果你不想在template.yaml
中硬编码参数'envs
'的值,你可以像下面这样写。
- 在
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”。
我的问题
我尝试创建模板化的 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
但我收到此错误消息:
An error occurred while loading the YAML build pipeline. The array must contain at least one element. Parameter name: stages
好的,我这样修改我的主脚本:
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
这次管道运行,但只运行第一个作业。模板未加载。
我需要的
我能够使用单个文件脚本来实现此场景,但我想使用模板化脚本来实现它。
这个场景支持吗?我该怎么办?
谢谢
这里我有一个示例作为参考:
- 在模板YAML文件中(这里我命名为
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 }}"
- 在管道YAML(这里我命名为
pipeline.yaml
)中,这样写。
trigger:
- main
extends:
template: template.yaml
- 结果
如果你不想在template.yaml
中硬编码参数'envs
'的值,你可以像下面这样写。
- 在
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”。