以下天蓝色管道代码给出错误
“在此上下文中不允许使用模板表达式”
variables:
major: 2020
minor: 3
patch: 1
major_minor_patch: $(major).$(minor).$(patch)
trigger:
- master
- Dev
- release/R${{variables.major_minor_patch}}
- release/${{variables.major_minor_patch}}/*
我的目的是使用主要、次要和补丁变量来指定形成 CI 触发器的分支,而不是在管道 YAML 中对其进行硬编码。
谢谢
不支持触发块中的变量。请参阅文档此处了解更多信息。
触发器块不能包含变量或模板表达式。
如果您不希望管道被其他分支触发,您可以尝试下面的解决方法。
创建一个额外的管道来检查源分支是否与release/major_minor_patch匹配。然后在这个附加管道中触发主管道。
variables:
major: 2020
minor: 3
patch: 1
triggerMain: false
trigger:
branches:
include:
- releases/*
steps:
- powershell: |
$branch = "$(Build.SourceBranchName)"
if ($branch -match "$(major).$(minor).$(patch)") {
echo "##vso[task.setvariable variable=triggerMain]True" #set variable triggerMain to true if matches.
}
- task: TriggerBuild@3
inputs:
definitionIsInCurrentTeamProject: true
buildDefinition: '56' #{id of your main pipeline}
queueBuildForUserThatTriggeredBuild: true
ignoreSslCertificateErrors: false
useSameSourceVersion: true
useSameBranch: true
waitForQueuedBuildsToFinish: false
storeInEnvironmentVariable: false
authenticationMethod: 'Personal Access Token'
password: '$(system.accesstoken)'
enableBuildInQueueCondition: false
dependentOnSuccessfulBuildCondition: false
dependentOnFailedBuildCondition: false
checkbuildsoncurrentbranch: false
failTaskIfConditionsAreNotFulfilled: false
condition: eq(variables['triggerMain'], 'True')
在上面的管道中,首先会触发它来检查源分支是否与格式匹配。如果匹配,则将执行任务 TriggerBuild 以触发主管道。
我遇到了同样的问题,我的方法是这样的:
trigger:
batch: true
branches:
include:
- dev
- master
- releases/*
jobs:
- job: Job
condition: eq(variables['Build.SourceBranch'], variables['TARGET_BRANCH'])
steps: ...
在同一个管道上,我做了一个条件作业,它在每个分支上被触发,但它只执行我的目标分支中的步骤。
我也没有找到证据,但我认为这是设计上的正确行为。触发器是启动管道运行的东西。在启动此运行之前,无法计算变量。当他们可以的时候,已经太晚了——整个事情都被触发了。
这就是为什么,我认为,你必须调整并尝试仅使用通配符来实现你的目标。如果应该为名称中包含版本的发布分支触发管道,也许这种通配符模式可能有效:
release/R?.?.?