Azure DevOps中的条件生成解决方案

时间:2019-01-19 07:24:14

标签: continuous-integration azure-devops

我正在开发一个使用多个小型项目/解决方案的大型应用程序。每个解决方案都内置在各自的代理中。类似于下面的截图 enter image description here

现在的问题是,即使更改了一个项目文件,所有项目/解决方案也都已编译。

为了减少CI的构建时间,我想在构建中添加条件表达式,该条件表达式仅在更改其各自的源时才构建项目。

我知道可以通过Custom condition using variable expressions在Azure DevOps中实现。但是我不确定如何检查相应的源代码 enter image description here

有人知道variable expression我需要在这里写什么吗?

2 个答案:

答案 0 :(得分:0)

您不能有条件地实现这一目标。条件是用于在内部执行任务。您正在寻找Yaml文件中的构建触发器:

trigger:
  branches:
    include:
      - master
  paths:
    include:
      - path\to\app\*

仅当更改path \ to \ app \文件夹下的任何内容时,此构建版本才会触发。这样,您就可以为每个应用创建一个版本,并将这些版本隔离到更改的特定文件中。

https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=vsts&tabs=schema#pipeline

答案 1 :(得分:0)

好吧,据我所知,您正在使用Git Repo,您​​可以按照以下方式进行操作

首先,您需要确定是否修改了哪个项目/解决方案。

您可以从我的answer here中找到解决方案,在那里您可以看到我使用了一个简单的powershell脚本来提取修改后的文件,并启用了相应的变量。

示例Powershell脚本以提取修改后的文件

$files=$(git diff HEAD HEAD~ --name-only)
$temp=$files -split ' '
$count=$temp.Length
echo "Total changed $count files"
For ($i=0; $i -lt $temp.Length; $i++)
{
  $name=$temp[$i]
  echo "this is $name file"
  if ($name -like "SubFolderA/*")
    {
      Write-Host "##vso[task.setvariable variable=MicroserviceAUpdated]True"
    }
}