You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Pipelines:如何基于代码变更触发路径设置变量?

在Azure Pipelines中基于代码变更路径自动生成变量(main分支自动触发场景)

核心思路

通过脚本分析本次提交的变更文件路径,提取目标文件夹名(A/B或未来新增的文件夹),并将其设置为流水线变量,供后续任务直接调用。

具体实现步骤

1. 添加脚本任务提取变更文件夹

在流水线的steps阶段新增脚本任务(Bash或PowerShell任选其一),用于解析变更路径并生成变量:

Bash版本
# 提取本次提交中abc/xyz下变更的目标文件夹并去重
CHANGED_FOLDERS=$(git diff --name-only HEAD~1 HEAD | grep -E 'abc/xyz/([A-Za-z0-9]+)/' | cut -d'/' -f3 | sort | uniq)

# 将结果设置为流水线输出变量(isOutput=true允许跨任务引用)
echo "##vso[task.setvariable variable=TargetFolder;isOutput=true]$CHANGED_FOLDERS"
PowerShell版本
# 获取本次提交的所有变更文件路径
$changedFiles = git diff --name-only HEAD~1 HEAD

# 匹配abc/xyz下的子文件夹并去重
$targetFolders = $changedFiles | Where-Object { $_ -match 'abc/xyz/([A-Za-z0-9]+)/' } | ForEach-Object { ($_ -split '/')[2] } | Select-Object -Unique

# 设置流水线输出变量
Write-Host "##vso[task.setvariable variable=TargetFolder;isOutput=true]$targetFolders"

2. 引用生成的变量

后续任务可直接通过$(TargetFolder)调用该变量,示例如下:

# 进入目标文件夹执行处理逻辑
cd abc/xyz/$(TargetFolder)
# 此处添加你的文件处理命令...

适配未来新增文件夹的优化

如果后续新增C、D等文件夹,只需完成两项操作:

  • 更新trigger中的paths.include,添加- abc/xyz/C/*这类新路径;
  • 修改脚本中的正则表达式(比如把(A|B)替换为([A-Za-z0-9]+)),即可自动匹配所有新增子文件夹,无需大幅调整脚本。

关于多文件夹变更触发多次的后续方案(提前铺垫)

当前脚本会把所有变更文件夹合并为一个变量(格式如"A B"),若要实现每个变更文件夹独立触发一次流水线,可采用以下方向:

  1. 将合并后的变量拆分为数组;
  2. 使用流水线矩阵(matrix)遍历数组中的每个文件夹,生成独立作业;
  3. 借助Azure Pipelines的模板(template)功能,动态生成对应文件夹的任务。

内容的提问来源于stack exchange,提问作者Unrockbar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 22:10:31