仅构建在解决方案中更改的项目 -Azure CI 管道 - YAML
Build only projects which are changed in a solution -Azure CI pipeline - YAML
我在一个解决方案下有多个项目,
ProjectA.csproj
projectB.csproj
projectC.csproj
我已经为这个解决方案创建了一个 YAML CI 构建管道,使用来自 Master Branch 的触发器
"trigger: - Master"
每当对上述任何项目的 Master 进行签入时,它都会触发 CI 管道并为上述所有单个项目创建工件。
问题 - 我可以只构建有更改的项目,使用同一个 YAML 文件作为解决方案吗?
Question - can I only build projects which have changes using the same
single YAML file for the solution?
是的,你可以。假设你有多个 jobs/steps
用于不同的项目,你可以使用 Conditions 来确定什么时候应该 run/skip 一些特定的步骤。你可以查看这个例子:
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
文件夹中进行更改,则只有那些 steps/tasks 和 condition: eq(variables['RunProjectA'], 'True')
才会 运行。您应该在管道中为 ProjectA
、ProjectB
和 ProjectC
设置三个单独的构建任务,并为它们提供自定义条件,然后您只能构建有更改的项目...(提示来自 Jayendran !)
希望有用。
添加 allowPackageConflicts 输入。它允许在解决方案中只发布一个项目。仅发布具有更新版本号的项目。
# publish to artifacts:
- task: NuGetCommand@2
inputs:
command: 'push'
allowPackageConflicts: true
我在一个解决方案下有多个项目,
ProjectA.csproj
projectB.csproj
projectC.csproj
我已经为这个解决方案创建了一个 YAML CI 构建管道,使用来自 Master Branch 的触发器
"trigger: - Master"
每当对上述任何项目的 Master 进行签入时,它都会触发 CI 管道并为上述所有单个项目创建工件。
问题 - 我可以只构建有更改的项目,使用同一个 YAML 文件作为解决方案吗?
Question - can I only build projects which have changes using the same single YAML file for the solution?
是的,你可以。假设你有多个 jobs/steps
用于不同的项目,你可以使用 Conditions 来确定什么时候应该 run/skip 一些特定的步骤。你可以查看这个例子:
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
文件夹中进行更改,则只有那些 steps/tasks 和 condition: eq(variables['RunProjectA'], 'True')
才会 运行。您应该在管道中为 ProjectA
、ProjectB
和 ProjectC
设置三个单独的构建任务,并为它们提供自定义条件,然后您只能构建有更改的项目...(提示来自 Jayendran
希望有用。
添加 allowPackageConflicts 输入。它允许在解决方案中只发布一个项目。仅发布具有更新版本号的项目。
# publish to artifacts:
- task: NuGetCommand@2
inputs:
command: 'push'
allowPackageConflicts: true