我是Azure开发人员的新手,希望您的建议。我有一个主要的azure-pipeline.yml,它引用了一个嵌套模板(azure-pipeline-e2e.yml)文件。基本上,当主要的azure-pipeline.yml运行时,它会触发嵌套模板,如果分支不是主分支,则将跳过嵌套模板作业。
查询:
我希望嵌套模板作为过夜计划的一部分运行。我还希望此嵌套管道没有触发器(trigger:无)...。请注意,当前设置可以正常工作。仅当我在嵌套模板中添加调度程序作业和触发器作业时,主要的azure-pipeline.yml抱怨调度程序和触发器命令未知吗?请告知如何在嵌套管道中同时使用触发器和调度程序,以使主管道不会抱怨
当前设置: 主要的azure-pipeline.yml文件
trigger:
- master
pool:
name: EDEA
stages:
- stage: dev
jobs:
- job: build_test_deploy_UI_to_DEV
steps:
- task: NodeTool@0
displayName: 'Install Node.js'
inputs:
versionSpec: '12.x'
etc.....
- stage: e2e
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'))
displayName: 'Run e2e Tests'
jobs:
- template: 'azure-pipelines-e2e.yml'
- stage: dtc
jobs:
- job: build_and_deploy_UI_to_DTC
steps:
- task: NodeTool@0
displayName: 'Install Node.js'
inputs:
versionSpec: '12.x'
etc.....
嵌套模板(azure-pipeline-e2e.yml)
jobs:
- job: run_e2e_tests
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'))
steps:
- task: SecretsManagerGetSecret@1
displayName: Get AWS secrets
inputs:
awsCredentials: 'project.dev.Aws'
regionName: 'eu-central-1'
secretIdOrName: 'secretname'
variableName: 'tempvariable'
基本上,在上面的嵌套模板中,当我添加调度程序和触发器作业时,嵌套模板不会出现错误。但是主要的天蓝色管道抱怨调度程序和触发器命令是未知的
建议:azure-pipeline-e2e.yml
schedules:
- cron: "0 0 * * *"
displayName: Daily midnight build
branches:
include:
- master
always: true
trigger: none
jobs:
- job: run_e2e_tests
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'))
steps:
- task: SecretsManagerGetSecret@1
displayName: Get AWS secrets
inputs:
awsCredentials: 'project.dev.Aws'
regionName: 'eu-central-1'
secretIdOrName: 'secretname'
variableName: 'tempvariable'
答案 0 :(得分:0)
主管道抱怨trigger
和schedule
参数,因为它只希望在嵌套模板中定义作业。在您提供的当前示例中,通过在模板结果中定义这两个参数进入主管道,如下所示:
[...]
- 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:
[...]
...那显然不是正确的语法。
对此的最佳解决方法可能是在主管道中包括schedule
并为计划触发构建时需要执行的阶段添加运行条件eq(variables['Build.Reason'], 'Schedule')
。
结果将类似于以下内容:(主要)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'
您还需要在嵌套模板中使用相同的运行条件。
答案 1 :(得分:0)
触发器应在主Yaml天蓝色管道中定义,而不是在嵌套模板yaml中定义。
模板yaml将与主yaml管道一起触发。您所能做的就是通过跳过该阶段而使其不被执行。您可以通过将条件eq(variables['Build.Reason'], 'Schedule')
添加到需要按LJ提及的时间表执行的阶段中来实现。请参阅condtions了解更多信息。
如果只需要在计划的构建中运行e2e阶段,则还可以尝试创建另一个yaml管道来运行模板yaml中的作业。然后,您可以在新的yaml管道中定义计划的触发器,并且仅在计划中触发该管道。