如何在递归搜索Azure DevOps模板时生成层级树形结构?
Azure DevOps模板依赖树形结构生成方案
需求实现思路
通过给递归函数添加层级跟踪和前缀符号控制,实现类似tree命令的层级展示;不对模板引用做去重处理,确保同一模板在不同层级被引用时,重复展开其子模板。
Shell脚本实现
#!/bin/bash # 递归解析模板并输出树形结构 # 参数1: 当前模板文件路径 # 参数2: 当前层级(从0开始,0为顶级模板) # 参数3: 前缀符号(控制树形分支的缩进与样式) render_template_tree() { local template_path="$1" local level="$2" local prefix="$3" # 提取模板文件名(仅显示文件名,可根据需求保留完整路径) local template_name=$(basename "$template_path") # 根据层级输出当前模板 if [ "$level" -eq 0 ]; then echo "$template_name" else echo "${prefix}└─ $template_name" fi # 查找当前模板中的所有静态模板引用(匹配'- template:'开头的行) grep -E '^\s*- template:' "$template_path" | while read -r line; do # 提取模板路径(从行中剥离前缀,仅保留路径部分) local sub_template=$(echo "$line" | sed -E 's/^\s*- template:\s*//') # 验证模板文件存在(需根据项目实际路径规则调整) if [ -f "$sub_template" ]; then # 生成下一层级的前缀 local new_prefix if [ "$level" -eq 0 ]; then new_prefix=" " else new_prefix="${prefix} " fi # 递归处理子模板,层级+1 render_template_tree "$sub_template" $((level + 1)) "$new_prefix" fi done } # 遍历所有顶级exttemplate文件并生成树形结构 find . -type f -name "*exttemplate*" | while read -r ext_template; do render_template_tree "$ext_template" 0 "" echo # 顶级模板之间添加空行分隔 done
关键说明
- 层级控制:通过
level参数跟踪当前递归深度,prefix参数动态生成缩进和分支符号,确保层级清晰 - 重复展开:脚本不对模板引用做去重,同一模板在不同层级被引用时,会完整重复展开其子模板
- 路径适配:如果你的模板引用使用变量(如
- template: ${{ variables.subTemplate }}),需额外添加变量解析逻辑;路径拼接规则需根据项目实际结构调整 - 样式自定义:可修改树形符号(如用
├─表示非最后子项、└─表示最后子项),需额外添加子项位置判断逻辑
内容的提问来源于stack exchange,提问作者moys
相关产品推荐
相关产品推荐

