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

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

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

ProjectA.csproj
projectB.csproj
projectC.csproj

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

“触发:-主”

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

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

最佳答案

Question - can I only build projects which have changes using the same single YAML file for the solution?

是的,可以。假设您对不同的项目有多个作业/步骤,则可以使用 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 issueJayendran 的提示!)

希望它能起作用。

关于azure - 仅构建在解决方案中更改的项目 -Azure CI 管道 - YAML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62159527/

相关文章:

azure - 如何递归比较 Azure 资源组?

angular - 使用 cypress 登录 Azure B2C

git - Azure DevOps 中 Git 存储库的差异

tfs - 如何从托管 TFS 迁移到本地 TFS?

python - 我将如何开始将 pyflakes 与 Hudson 集成

azure - 如何从其他 terraform 部署创建的 keyvault 获取 secret 值?

azure - 使用 MS Graph API 向应用程序注册添加更多应用程序角色

git - 如何解决 pull 请求期间的 merge 冲突?

git - 如何使用 Github Actions 查看最新提交?

javascript - 安装插件后无法在 Jenkins 中看到 Node 选项 'Global Configure'