Azure DevOps Pipeline:多TGZ文件分对应子文件夹提取方法问询
解决方案:动态提取多个TGZ到对应子文件夹
由于无法预知应用名称,静态配置的ExtractFiles@1任务无法满足需求,必须通过脚本动态遍历并处理每个TGZ文件。以下提供PowerShell和Bash两种实现,适配不同的代理环境:
PowerShell 脚本(适用于Windows代理)
在流水线中添加PowerShell@2任务,使用以下脚本自动处理所有TGZ文件:
# 递归查找bundles目录下所有tgz文件 Get-ChildItem -Path "$(System.DefaultWorkingDirectory)/bundles" -Recurse -Filter "*.tgz" | ForEach-Object { # 从文件所在目录名获取应用标识 $appName = $_.Directory.Name # 构建目标提取路径 $targetDir = "$(System.DefaultWorkingDirectory)/bundle_extracts/$appName" # 确保目标目录存在(不存在则创建) New-Item -ItemType Directory -Path $targetDir -Force | Out-Null # 执行解压操作 tar -xzf $_.FullName -C $targetDir }
脚本说明
Get-ChildItem递归遍历bundles下所有.tgz文件- 通过
$_.Directory.Name获取每个TGZ所在的子文件夹名称(即应用名) - 在
bundle_extracts下创建对应应用的子文件夹 - 使用
tar命令将TGZ解压到指定的目标文件夹
Bash 脚本(适用于Linux/macOS代理)
如果流水线使用Linux或macOS代理,添加Bash@3任务,使用以下脚本:
# 查找所有bundles目录下的tgz文件 find "$(System.DefaultWorkingDirectory)/bundles" -type f -name "*.tgz" | while read -r tgzPath; do # 获取应用名称(TGZ所在的子文件夹名) appName=$(basename "$(dirname "$tgzPath")") # 构建目标路径 targetDir="$(System.DefaultWorkingDirectory)/bundle_extracts/$appName" # 创建目标目录(自动处理层级) mkdir -p "$targetDir" # 解压TGZ到目标目录 tar -xzf "$tgzPath" -C "$targetDir" done
注意事项
- Azure托管代理默认已预装
tar命令,自托管代理需确保tar已安装并加入环境变量 - 脚本会自动处理所有符合条件的TGZ文件,无需提前指定应用名称
- 解压后的文件会严格对应到
bundle_extracts/<应用名>目录下,避免文件冲突
内容的提问来源于stack exchange,提问作者Paul Rouleau
相关产品推荐
相关产品推荐

