DevOps发布流水线无法提取Terraform工件文件的排查求助
Terraform DevOps流水线发布阶段无法找到工件文件的排查与解决
问题场景
已配置Terraform DevOps流水线,分支策略限制仅通过Pull Request合并至main分支。持续部署流水线可正常输出文件作为工件,但发布流水线尝试提取指定归档文件时失败,报错信息如下:
##[error]Specified archive: /home/vsts/work/r1/a/_Terraform Plan/8-tfplan/8-tfplan.tgz can not be extracted because it can not be accessed: Error: ENOENT: no such file or directory, stat '/home/vsts/work/r1/a/_Terraform Plan/8-tfplan/8-tfplan.tgz'
at Object.statSync (node:fs:1551:3)
排查思路
- 核对工件发布与下载的路径配置
检查CD流水线中Publish Pipeline Artifacts(或Publish Build Artifacts)任务的Artifact name和发布路径,是否与发布流水线Download Pipeline Artifacts任务的配置完全匹配,重点注意路径中的空格(如_Terraform Plan)是否在两处都正确处理,避免拼写、大小写或转义差异导致路径错误。 - 确认工件是否成功生成并上传
查看CD流水线的工件发布任务日志,确认是否有成功上传的提示;同时在CD流水线末尾添加命令任务,直接查看目标路径的文件情况:
验证ls -l /home/vsts/work/r1/a/_Terraform\ Plan/8-tfplan/8-tfplan.tgz是否真实存在。 - 检查发布流水线的下载权限与配置
确认发布流水线的下载任务是否指定了正确的源流水线、源阶段和工件名称;如果是跨流水线调用,检查执行账号是否具备读取源工件的权限。另外,若自定义了下载路径,需确认该路径已存在且有读写权限。 - 排查特殊字符导致的路径解析问题
路径中的空格可能引发解析异常,尝试将工件名称或路径中的空格替换为下划线(如_Terraform_Plan),重新运行CD流水线后测试发布流程。 - 验证代理机器的路径权限
在发布流水线中添加权限检查命令,确认VSTS服务账号对目标路径有访问权限:ls -ld /home/vsts/work/r1/a/_Terraform\ Plan/8-tfplan/
对应解决方案
- 路径配置不一致:修正CD与发布流水线的工件名称、路径配置,确保细节完全匹配(包括空格、大小写)。
- 工件未正确生成:检查CD流水线中
terraform plan打包步骤的日志,确认8-tfplan.tgz生成路径正确,修复打包逻辑后重新发布工件。 - 权限不足:为VSTS服务账号添加目标目录的读写权限,或调整代理机器的目录权限设置。
- 特殊字符问题:将路径中的空格替换为下划线等无特殊含义字符,避免解析错误。
- 调试定位:在发布流水线下载工件前添加命令任务,打印当前工作目录与目标路径状态:
通过日志快速定位问题点。echo "当前工作目录: $(pwd)" ls -l /home/vsts/work/r1/a/ ls -l /home/vsts/work/r1/a/_Terraform\ Plan/8-tfplan/ || echo "目标目录不存在"
内容的提问来源于stack exchange,提问作者pendragon
相关产品推荐
相关产品推荐

