基于条件在Azure YAML构建流水线中运行特定任务

40次阅读
没有评论

问题描述

希望创建一个基于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构建流水线中运行特定任务,帮助您实现自动化和手动运行时不同的任务执行逻辑。

正文完