Templates 如何在Azure devops管道中将调度程序和触发器添加到嵌套模板?

Templates 如何在Azure devops管道中将调度程序和触发器添加到嵌套模板?,templates,azure-devops,yaml,Templates,Azure Devops,Yaml,我是Azure devops的新手,希望得到您的建议。我有一个主azure-pipeline.yml,它引用了一个嵌套模板(azure-pipeline-e2e.yml)文件。基本上,当主azure-pipeline.yml运行时,它会触发嵌套模板,如果分支不是主分支,则将跳过嵌套模板作业 查询: 我希望嵌套模板作为夜间计划的一部分运行。我还希望这个嵌套管道没有触发器(触发器:none)。。。。请注意,当前设置工作正常。只有在嵌套模板中添加调度程序作业和触发器作业时,主azure-pipelin

我是Azure devops的新手,希望得到您的建议。我有一个主azure-pipeline.yml,它引用了一个嵌套模板(azure-pipeline-e2e.yml)文件。基本上,当主azure-pipeline.yml运行时,它会触发嵌套模板,如果分支不是主分支,则将跳过嵌套模板作业

查询:

我希望嵌套模板作为夜间计划的一部分运行。我还希望这个嵌套管道没有触发器(触发器:none)。。。。请注意,当前设置工作正常。只有在嵌套模板中添加调度程序作业和触发器作业时,主azure-pipeline.yml才会抱怨调度程序和触发器命令未知?请建议如何在嵌套管道中同时使用触发器和调度程序,以便主管道不会出现问题

当前设置: 主azure-pipeline.yml文件

触发器:
-主人
游泳池:
姓名:EDEA
阶段:
-阶段:发展
工作:
-工作:构建\测试\部署\用户界面\到\开发人员
步骤:
-任务:NodeTool@0
displayName:'Install Node.js'
投入:
versionSpec:'12.x'
等
-阶段:e2e
条件:和(successed(),eq(变量['Build.SourceBranch'],'refs/heads/master'))
displayName:“运行e2e测试”
工作:
-模板:“azure-pipelines-e2e.yml”
-阶段:dtc
工作:
-工作:构建和部署用户界面到DTC
步骤:
-任务:NodeTool@0
displayName:'Install Node.js'
投入:
versionSpec:'12.x'

etc….
主管道抱怨
触发器
调度
参数,因为它只需要在嵌套模板中定义的作业。在您提供的当前示例中,通过将模板中的这两个参数定义到主管道中,结果如下:

[...]
- stage: e2e
  condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master')) 
  displayName: 'Run e2e Tests'
  jobs:
  schedules:
   - cron: "0 0 * * *"
     displayName: Daily midnight build
     branches:
       include:
       - master
     always: true
  trigger: none
  - job:
[...]
。。。这显然不是正确的语法

最好的解决方法可能是在主管道中包含
计划
,并为计划触发构建时需要执行的阶段添加运行条件
eq(变量['Build.Reason','schedule')
。 结果类似于:(main)azure-pipelines.yml

 schedules:
 - cron: "0 0 * * *"
   displayName: Daily midnight build
   branches:
     include:
     - master
   always: true
 trigger:
 - master
 pool:
   name: EDEA

 stages:
   [...]
 - stage: e2e
   condition: or(and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master')), eq(variables['Build.Reason'], 'Schedule')) 
   displayName: 'Run e2e Tests'
   jobs:
   - template: 'azure-pipelines-e2e.yml'

在嵌套模板中还需要相同的运行条件。

触发器应该在主yaml azure管道中定义,而不是在嵌套模板yaml中定义

模板yaml将与主yaml管道一起触发。您所能做的就是通过跳过该阶段来防止该阶段被执行。您可以通过将条件
eq(变量['Build.Reason'],'Schedule')
添加到需要按照LJ提到的计划执行的阶段来实现这一点。。有关更多信息,请参阅


如果在计划的构建中只需要运行e2e阶段,您还可以尝试创建另一个yaml管道来运行模板yaml中的作业。然后,您可以在新的yaml管道中定义计划触发器,并且此管道仅在计划中触发。

感谢LJ的评论。谢谢。嵌套模板中的“触发器:无”如何?例如,如何设置嵌套模板,使其不会被触发。。当前,当签入到“我的要素”分支(主管道)时,将触发嵌套管道,并跳过嵌套模板中的作业,因为它不是主分支。基本上,我希望嵌套模板不被触发所有…再次感谢您的帮助<代码>阶段:e2e和嵌套管道将在每次运行时被触发,因为它是主管道的一部分,在触发整个构建时被预加载。如果运行条件定义正确,则无需担心,因为如果条件不匹配,嵌套管道中的作业将始终被跳过。我不熟悉您的整个工作流程,但如果整个管道中只有
stage:e2e
需要按计划执行,那么您需要添加
ne(变量['Build.Reason'],'schedule'))
对于主管道中的其他每个阶段,因为计划运行最有可能基于主分支,这将触发所有其他阶段,条件为
eq(变量['Build.SourceBranch'],'refs/heads/master')