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

如何在递归搜索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

关键说明

  1. 层级控制:通过level参数跟踪当前递归深度,prefix参数动态生成缩进和分支符号,确保层级清晰
  2. 重复展开:脚本不对模板引用做去重,同一模板在不同层级被引用时,会完整重复展开其子模板
  3. 路径适配:如果你的模板引用使用变量(如- template: ${{ variables.subTemplate }}),需额外添加变量解析逻辑;路径拼接规则需根据项目实际结构调整
  4. 样式自定义:可修改树形符号(如用├─表示非最后子项、└─表示最后子项),需额外添加子项位置判断逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 23:09:54