问题描述
希望创建一个基于YAML的Azure构建流水线,根据不同条件运行特定的任务。具体地,当流水线自动运行时,只需要运行构建步骤;而当手动运行同一流水线时,需要运行构建、归档和发布构件的任务。
解决方案
请注意以下操作可能受到Azure DevOps版本的影响,确保您的环境和文档所示版本一致。
方案
您可以使用Azure DevOps的预定义变量和条件来实现这个需求。以下是一个基于条件运行特定任务的示例YAML配置:
trigger:
- '*'
pr:
- '*'
pool:
vmImage: 'windows-latest'
jobs:
- job: RunTasksBasedOnCondition
steps:
- task: UseDotNet@2
inputs:
packageType: 'sdk'
installationPath: $(Agent.ToolsDirectory)/dotnet
installationVersion: '6.0.x'
- task: NuGetToolInstaller@1
# Only run the build step for PR automated runs
- task: DotNetCoreCLI@2
displayName: 'Build'
condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'))
inputs:
command: 'build'
projects: '**/*.csproj'
arguments: '--configuration $(BuildConfiguration)'
# Always run the following steps
- script: echo Archive step
displayName: 'Archive'
condition: always()
- script: echo Publish Artifact step
displayName: 'Publish Artifact'
condition: always()
在上面的示例中,我们创建了一个名为RunTasksBasedOnCondition
的作业,其中包含了几个任务。根据特定条件,我们使用了不同的condition
来控制任务是否执行。
- 首先,我们使用
UseDotNet@2
任务来安装指定版本的.NET Core。 - 然后,我们使用
NuGetToolInstaller@1
任务来安装NuGet工具。 - 接着,我们使用
DotNetCoreCLI@2
任务来运行构建步骤,但只有在自动运行的PR时才会执行。这是通过condition
中的条件来实现的,即仅当构建成功并且构建原因是PullRequest
时才会执行该任务。 - 紧接着,我们使用两个脚本任务来演示在任何情况下都会运行的步骤(归档和发布构件)。
这个配置文件的关键是使用condition
属性来根据不同的条件决定任务是否执行。在上述示例中,我们使用了always()
来确保某些任务始终运行,而使用了eq(variables['Build.Reason'], 'PullRequest')
来检查构建原因是否为PR。
请根据您的实际需求和Azure DevOps环境进行适当的调整和测试。这个示例演示了如何基于条件在Azure YAML构建流水线中运行特定任务,帮助您实现自动化和手动运行时不同的任务执行逻辑。
正文完