BitBucket流水线执行zip命令报错:文件匹配失败排查
正常示例
某应用执行以下命令可正常完成打包:
zip powwow.zip appspec.yml target/pow-wow-0.0.2-SNAPSHOT.jar scripts/* adding: appspec.yml (deflated 26%) adding: target/pow-wow-0.0.2-SNAPSHOT.jar (deflated 9%) adding: scripts/deploy.sh (deflated 37%) adding: scripts/powwow-deploy-old.sh (deflated 37%) adding: scripts/powwow-deploy.sh (deflated 53%)
文件夹结构:
- pom.xml - appspec.yml - scripts/ - powwow-deploy.sh - target/ - pow-wow-0.0.2-SNAPSHOT.jar
所有文件均按预期打包进powwow.zip。
异常示例
另一应用执行类似命令时出现警告,无法匹配EAR文件:
zip -r corpapp.zip appspec.yml corporateEAR/target/cEAR-3.10.ear scripts/* zip warning: name not matched: corporateEAR/target/cEAR-3.10.ear adding: appspec.yml (deflated 25%) adding: scripts/corpapp-deploy.sh (deflated 42%)
文件夹结构:
- pom.xml - appspec.yml - scripts/ - corpapp-deploy.sh - corporateEAR/ - target/ - cEAR-3.10.ear
补充说明:该命令在本地机器执行可正常生成压缩包,但在BitBucket流水线中运行时出现文件匹配失败警告。
可能的原因及验证方法
子模块EAR文件未在流水线中生成
本地环境中你可能已提前执行子模块的构建命令(如mvn install或mvn package),但BitBucket流水线的构建流程可能仅执行了根模块构建,未触发corporateEAR子模块的编译打包,导致corporateEAR/target/目录下不存在目标EAR文件。
验证:在zip命令前添加ls -l corporateEAR/target/,查看输出是否包含cEAR-3.10.ear。流水线工作目录与本地不一致
本地是在项目根目录执行zip命令,但流水线步骤可能切换了工作目录(如cd到子文件夹),此时相对路径corporateEAR/target/cEAR-3.10.ear指向错误位置,导致文件找不到。
验证:在zip命令前添加pwd命令,确认当前工作目录是否为项目根目录。路径大小写不匹配
BitBucket流水线通常运行在Linux环境,文件系统大小写敏感;而本地如果是Windows或默认配置的macOS,文件系统大小写不敏感。若流水线中实际文件夹/文件名与命令路径存在大小写差异(如实际是CorporateEAR但命令写corporateEAR),会出现匹配失败。
验证:在流水线中执行ls -l查看根目录子文件夹名称,确认与命令路径完全一致。构建缓存或产物清理问题
流水线可能启用了构建缓存,或前一次构建产物被清理,导致corporateEAR/target/未生成新的EAR文件。
验证:在构建步骤添加mvn clean package(针对Maven项目),强制清理并重新构建子模块。
内容的提问来源于stack exchange,提问作者Richard

