【问题标题】:Build only projects which are changed in a solution -Azure CI pipeline - YAML仅构建解决方案中更改的项目 -Azure CI 管道 - YAML
【发布时间】:2020-06-02 19:05:54
【问题描述】:

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

ProjectA.csproj
projectB.csproj
projectC.csproj

我已经为此解决方案创建了一个 YAML CI 构建管道,其中包含来自主分支的触发器

“触发器:-大师”

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

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

【问题讨论】:

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


    【解决方案1】:

    问题 - 我只能使用相同的方式构建具有更改的项目吗? 解决方案的单个 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 设置三个单独的构建任务,并为它们提供您的自定义条件,然后您只能构建有变化的项目......(来自 Jayendran 在this issue!)

    希望它有效。

    【讨论】:

    • 这真的是最好的答案吗?看起来很不雅。有没有办法触发 git repo 中的特定目录更改?
    【解决方案2】:

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

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

    【讨论】:

    • 你能详细说明一下吗?版本号如何更改?
    • 在提交之前更新项目属性 -> 应用程序 -> 程序集信息下的版本号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 2019-07-29
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多