Bitbucket部署Laravel至Azure Web App时pipeline成功但Artifacts未上传
Bitbucket 流水线部署Laravel到Azure时Artifacts上传失败问题修复
问题相关参考截图
- 流水线配置代码截图:

- 流水线运行结果截图1:

- 流水线运行结果截图2:

故障根因
从配置和运行日志判断,故障由3个典型配置错误导致:
- 跨步骤文件未做留存配置
Bitbucket Pipelines 每个步骤运行在独立的隔离Docker容器中,步骤间默认不共享文件系统。当前配置把构建、测试、Artifacts上传拆分为独立步骤,但没有在生成部署包的构建步骤下声明需要留存的产物路径,后续上传步骤根本无法读取到前序步骤生成的部署文件,最终出现0文件匹配的报错。 - Artifacts路径匹配规则有误
配置中使用了模糊的多层通配符匹配产物,且未考虑Linux运行环境的大小写敏感特性,路径、文件名只要出现大小写偏差就会直接匹配失败。 - 产物生成逻辑无校验
构建步骤执行完打包命令后没有做文件存在性校验,若打包命令因为权限、目录不存在等问题静默失败,后续上传步骤自然找不到对应文件。
修复步骤
- 调整Artifacts声明位置
把Artifacts配置移动到生成部署包的构建步骤下,明确声明需要跨步骤留存的文件路径,参考配置:- step: name: 构建Laravel生产部署包 script: # 安装生产依赖 - composer install --no-dev --optimize-autoloader --no-interaction - npm ci - npm run build # 打包部署文件 - zip -r laravel-azure-deploy.zip . -x "*.git*" "tests/*" "node_modules/*" ".env.example" # 校验文件是否生成 - ls -la laravel-azure-deploy.zip # 必须在生成文件的步骤下声明artifacts,后续步骤才能访问 artifacts: - laravel-azure-deploy.zip - 简化路径匹配规则
不要使用**/*.zip这类模糊通配符,直接写准确的产物相对路径,反复核对路径、文件名的大小写,和打包命令输出的文件完全一致。 - 调整测试步骤的依赖关系
如果测试步骤不需要用到构建后的产物,可以把测试步骤放在构建步骤之前执行,减少不必要的文件传输;如果测试依赖构建产物,明确给测试步骤添加depends_on配置关联构建步骤。 - 校验Azure部署任务的路径配置
后续调用Azure Web App部署任务时,指定的部署包路径要和留存的Artifacts路径完全一致,不要额外添加不存在的目录前缀。
内容的提问来源于stack exchange,提问作者nelsonym
相关产品推荐
相关产品推荐

