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

时间:2020-06-02 19:05:54

标签: azure azure-devops continuous-integration azure-pipelines-yaml

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

ProjectA.csproj
projectB.csproj
projectC.csproj

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

“触发器:-大师”

只要Master在上述任何项目中签到,都会触发CI管道并为上述所有单个项目创建工件。

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

2 个答案:

答案 0 :(得分:0)

问题-我只能使用相同的内容构建具有更改的项目 该解决方案使用单个YAML文件吗?

是的,可以。假设您有多个jobs/steps用于不同的项目,则可以使用Conditions确定何时应运行/跳过一些特定步骤。您可以检查以下示例:

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')

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

希望它能起作用。

答案 1 :(得分:0)

添加allowPackageConflicts输入。它只允许发布解决方案中的单个项目。仅发布具有更新版本号的项目。

# publish to artifacts:
- task: NuGetCommand@2
  inputs:
    command: 'push'
    allowPackageConflicts: true