仅构建在解决方案中更改的项目 -Azure CI 管道 - YAML

Ani*_*ish 4 continuous-integration azure azure-devops azure-pipelines-yaml

我在一个解决方案下有多个项目,

ProjectA.csproj
projectB.csproj
projectC.csproj
Run Code Online (Sandbox Code Playgroud)

我已经使用 Master Branch 的触发器为此解决方案创建了一个 YAML CI 构建管道

“触发:-大师”

每当上述任何项目的 Master 发生签入时,它都会触发 CI 管道并为所有上述单个项目创建工件。

问题 - 我是否只能使用同一个 YAML 文件来构建具有更改的项目作为解决方案?

Lan*_*SFT 6

问题 - 我是否只能使用同一个 YAML 文件来构建具有更改的项目作为解决方案?

是的你可以。假设您有多个jobs/steps不同的项目,您可以使用条件来确定何时应运行/跳过某些特定步骤。你可以检查这个例子:

trigger:
- master

pool:
  vmImage: 'windows-latest'

steps:
- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: |
      $files=$(git diff HEAD HEAD~ --name-only)
      $temp=$files -split ' '
      $count=$temp.Length
      For ($i=0; $i -lt $temp.Length; $i++)
      {
        $name=$temp[$i]
        echo "this is $name file"
        if ($name -like "ProjectA/*")
          {
            Write-Host "##vso[task.setvariable variable=RunProjectA]True"
          }
        if ($name -like "ProjectB/*")
          {
            Write-Host "##vso[task.setvariable variable=RunProjectB]True"
          }
        if ($name -like "ProjectC/*")
          {
            Write-Host "##vso[task.setvariable variable=RunProjectC]True"
          }
      }

- script: echo "Run this step when ProjectA folder is changed."
  displayName: 'Run A'
  condition: eq(variables['RunProjectA'], 'True')

- script: echo "Run this step when ProjectB folder is changed."
  displayName: 'Run B'
  condition: eq(variables['RunProjectB'], 'True')

- script: echo "Run this step when ProjectC folder is changed."
  displayName: 'Run C'
  condition: eq(variables['RunProjectC'], 'True')
Run Code Online (Sandbox Code Playgroud)

然后,如果我们仅在文件夹中进行更改ProjectA,则只有那些步骤/任务condition: eq(variables['RunProjectA'], 'True')才会运行。您的管道中应该有ProjectAProjectB和的三个单独的构建任务ProjectC,并为它们提供自定义条件,然后您只能构建有更改的项目......(本期Jayendran的提示!)

希望它有效。

  • 这真的是最好的答案吗?看起来很不优雅。有没有办法触发 git 存储库中的特定目录更改? (3认同)