问题描述
在使用Azure DevOps时,有一个需求是希望在跳过构建的同时,不触发Release。目前,当构建被跳过时,Release仍然会被标记为成功,并创建一个空的Drop。这会触发一个失败的Release,因为Drop是空的。用户想知道正确的跳过构建并不触发Release的方法。是否有可能只禁用创建空的Drop?
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
可以尝试在特定分支上添加一个阶段条件,只有满足条件时才运行该阶段。以下是一个示例:
stages:
- stage: CheckShouldBuildStage
displayName: Check Should Build
jobs:
- job: CheckShouldBuildJob
displayName: Check Should Build
steps:
- powershell: |
$doBuild = $True
$sourceBranchName="$env:BUILD_SOURCEBRANCHNAME"
$buildReason="$env:BUILD_REASON"
# Get PR information for branch
...
if ($branchHasPr -eq $True -and $buildReason -ne "PullRequest" -and $buildReason -ne "Manual") {
$doBuild = $False
Write-Host "Pr Build found, and not the merged PR build. Cancelled build."
}
...
if ($doBuild -eq $True) {
Write-Host "DoBuildVar=YES"
Write-Host "##vso[task.setvariable variable=DoBuildVar;isOutput=true]YES"
} else {
Write-Host "DoBuildVar=NO"
Write-Host "##vso[task.setvariable variable=DoBuildVar;isOutput=true]NO"
}
name: CheckShouldBuildTask
displayName: Check Should Build
- stage: BuildAndTest
condition: eq(dependencies.CheckShouldBuildStage.outputs['CheckShouldBuildJob.CheckShouldBuildTask.DoBuildVar'], 'YES')
dependsOn: CheckShouldBuildStage
displayName: Build and Test
jobs:
...
在上面的示例中,我们首先定义了一个名为CheckShouldBuildStage
的阶段,用于检查是否应该构建。在该阶段中,我们使用了一个PowerShell脚本来检查当前分支是否有关联的PR,并根据条件设置一个变量DoBuildVar
。如果满足构建条件,变量值为YES
,否则为NO
。
然后,在BuildAndTest
阶段中,我们使用了一个条件来判断是否应该运行该阶段。条件是检查前一个阶段的输出变量DoBuildVar
的值是否为YES
。只有当满足条件时,才会运行该阶段。
方案2
使用脚本或工具来管理构建和发布的顺序可能会增加复杂性,并且需要确保构建和发布之间的依赖关系正确设置。
另一种方法是编写脚本或使用工具来控制构建和发布的顺序。你可以使用Azure DevOps的条件语法来控制构建和发布的触发条件。以下是一个示例:
stages:
- stage: Build
displayName: Build
jobs:
- job: BuildJob
displayName: Build
steps:
# 构建步骤
- stage: Release
displayName: Release
dependsOn: Build
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'))
jobs:
- job: ReleaseJob
displayName: Release
steps:
# 发布步骤
在上面的示例中,我们定义了两个阶段:Build
和Release
。Release
阶段依赖于Build
阶段,并且只有当Build
阶段成功完成且分支为master
时,才会触发Release
阶段。
请注意,这只是一个示例,你可以根据自己的需求和条件来调整条件语句。
请注意,以上解决方案仅供参考,具体实现方式可能因你的具体情况而有所不同。建议你参考Azure DevOps的官方文档和其他资源,以了解更多关于条件语法和构建发布流程的信息。