天蓝色模板不允许工作关键字
azure template not allowing jobs keyword
与我无关,因为这是我真正深入研究 Azure 管道的第 2 周,但是..我看到了一个示例,我可以在其中创建一个包含 jobs:
部分的模板..
所以我可以在模板中正确分割内容.. 但是当我这样做时它会抱怨
yaml 片段
# File: template_process_folder.yaml
parameters:
- name: folder_name
default: YOURFOLDER
jobs:
- job: ProcessFolder
pool:
vmImage: ubuntu-latest
displayName: "Processing Folder"
steps:
- bash: |
blah blah blah
错误
error line X, Col 1... Unexpected value 'jobs'
有人知道我哪里做错了吗?我已经尝试过它的阶段..只有一份工作..等等..唯一对我有用的是仅在模板中的简单步骤
编辑:这可能是我调用模板的方式吗?有没有办法仍然在作业级别循环遍历这些数组值?到目前为止,我还没有在任何文档中看到这一点
我是怎么调用模板的
- stage: Build
displayName: "Build"
jobs:
- job: "Execute_Tests"
displayName: "Run Tests"
steps:
- ${{each p in parameters.mylistoffolders}}:
- template: template_process_folder.yaml
parameters:
folder_name: ${{p}}
我认为这是问题所在..现在我正在从 steps
区域删除模板调用并将其成功地提升到 jobs
区域..但现在我的错误是抱怨作业名称必须是唯一的。我想只是传递文件夹名称,但它包含不允许的 -
。现在尝试执行替换调用但未成功
新模板作业条目
jobs:
- job: ProcessFolder_${{ replace(${{parameters.folder_name}}, '-', '_') }}
错误我得到
unclosed function: 'replace'. Located at position 1 within expression replace(${{paramet....
的确,YAML 管道语法不如经典编辑器体验那么简单。 :)
但最好的入门方式是先了解管道的结构,了解哪些是必须具备的组件,哪些是可以跳过的。
如 YAML schema reference 文档中所述,层次结构如下所示:
请注意,您的 YAML 定义可能不需要包括所有这些级别,因为简单的管道不需要所有这些级别。
您可以快速尝试使用可用的 quickstart guide 构建新管道以查看实际效果,然后继续学习如何为您的特定用例配置 YAML 管道。
上面链接的模式参考文章包含每个管道组件的示例,并附有示例 yaml 片段,应该有助于使用法更清晰。
P.S.: 缩进是使用 YAML 定义时要注意的最重要方面之一!
在我这边测试,我也看到同样的错误Unclosed function: 'replace'. Located at position 1 within expression: replace(${{parameters.folder_name.
看来这个表达式在这里不起作用。
作为解决方法,您可以使用关键字 displayname
,这样就可以通过使用 displayName: ProcessFolder_${{parameters.folder_name}}
.
来解决作业名称必须唯一的错误
顺便说一句,以下yaml供您参考。
template_process_folder.yml
# File: template_process_folder.yml
parameters:
- name: folder_name
type: string
default: YOURFOLDER
jobs:
- job:
pool:
vmImage: ubuntu-latest
displayName: ProcessFolder_${{parameters.folder_name}}
steps:
- bash: |
echo ${{ parameters.folder_name }}
template_stage.yml
# File: template_stage.yml
parameters:
- name: mylistoffolders # defaults for any parameters that aren't specified
type: object
default:
- one
- two
stages:
- stage: Build
displayName: "Build"
jobs:
- ${{each p in parameters.mylistoffolders}}:
- template: template_process_folder.yml
parameters:
folder_name: ${{p}}
azure-pipelines.yml
pool:
vmImage: ubuntu-latest
stages:
- template: template_stage.yml
parameters:
mylistoffolders:
- test1-hi
- test2-bye
通过“将模板调用从步骤区域移动到作业区域”,您几乎已经自己解决了这个问题。为避免作业名称唯一的问题,您只需删除分配给作业的名称。如果您需要它来显示名称,请使用带有 displayName 属性的“Edward Han-MSFT”的建议。
与我无关,因为这是我真正深入研究 Azure 管道的第 2 周,但是..我看到了一个示例,我可以在其中创建一个包含 jobs:
部分的模板..
所以我可以在模板中正确分割内容.. 但是当我这样做时它会抱怨
yaml 片段
# File: template_process_folder.yaml
parameters:
- name: folder_name
default: YOURFOLDER
jobs:
- job: ProcessFolder
pool:
vmImage: ubuntu-latest
displayName: "Processing Folder"
steps:
- bash: |
blah blah blah
错误
error line X, Col 1... Unexpected value 'jobs'
有人知道我哪里做错了吗?我已经尝试过它的阶段..只有一份工作..等等..唯一对我有用的是仅在模板中的简单步骤
编辑:这可能是我调用模板的方式吗?有没有办法仍然在作业级别循环遍历这些数组值?到目前为止,我还没有在任何文档中看到这一点
我是怎么调用模板的
- stage: Build
displayName: "Build"
jobs:
- job: "Execute_Tests"
displayName: "Run Tests"
steps:
- ${{each p in parameters.mylistoffolders}}:
- template: template_process_folder.yaml
parameters:
folder_name: ${{p}}
我认为这是问题所在..现在我正在从 steps
区域删除模板调用并将其成功地提升到 jobs
区域..但现在我的错误是抱怨作业名称必须是唯一的。我想只是传递文件夹名称,但它包含不允许的 -
。现在尝试执行替换调用但未成功
新模板作业条目
jobs:
- job: ProcessFolder_${{ replace(${{parameters.folder_name}}, '-', '_') }}
错误我得到
unclosed function: 'replace'. Located at position 1 within expression replace(${{paramet....
的确,YAML 管道语法不如经典编辑器体验那么简单。 :)
但最好的入门方式是先了解管道的结构,了解哪些是必须具备的组件,哪些是可以跳过的。
如 YAML schema reference 文档中所述,层次结构如下所示:
请注意,您的 YAML 定义可能不需要包括所有这些级别,因为简单的管道不需要所有这些级别。
您可以快速尝试使用可用的 quickstart guide 构建新管道以查看实际效果,然后继续学习如何为您的特定用例配置 YAML 管道。
上面链接的模式参考文章包含每个管道组件的示例,并附有示例 yaml 片段,应该有助于使用法更清晰。
P.S.: 缩进是使用 YAML 定义时要注意的最重要方面之一!
在我这边测试,我也看到同样的错误Unclosed function: 'replace'. Located at position 1 within expression: replace(${{parameters.folder_name.
看来这个表达式在这里不起作用。
作为解决方法,您可以使用关键字 displayname
,这样就可以通过使用 displayName: ProcessFolder_${{parameters.folder_name}}
.
顺便说一句,以下yaml供您参考。
template_process_folder.yml
# File: template_process_folder.yml
parameters:
- name: folder_name
type: string
default: YOURFOLDER
jobs:
- job:
pool:
vmImage: ubuntu-latest
displayName: ProcessFolder_${{parameters.folder_name}}
steps:
- bash: |
echo ${{ parameters.folder_name }}
template_stage.yml
# File: template_stage.yml
parameters:
- name: mylistoffolders # defaults for any parameters that aren't specified
type: object
default:
- one
- two
stages:
- stage: Build
displayName: "Build"
jobs:
- ${{each p in parameters.mylistoffolders}}:
- template: template_process_folder.yml
parameters:
folder_name: ${{p}}
azure-pipelines.yml
pool:
vmImage: ubuntu-latest
stages:
- template: template_stage.yml
parameters:
mylistoffolders:
- test1-hi
- test2-bye
通过“将模板调用从步骤区域移动到作业区域”,您几乎已经自己解决了这个问题。为避免作业名称唯一的问题,您只需删除分配给作业的名称。如果您需要它来显示名称,请使用带有 displayName 属性的“Edward Han-MSFT”的建议。