Bitbucket Pipeline中curl输出文件丢失及Heroku部署问题
Bitbucket Pipeline curl下载文件丢失问题解决办法
核心原因
你当前用的是parallel并行步骤,Bitbucket Pipeline的并行步骤是完全独立的运行环境,Run build步骤里下载的file.json不会自动同步到Zip the sources步骤,这就是文件找不到的关键原因。
两种修复方案
方案1:取消并行,合并成单一步骤(最简单直接)
把构建和打包的逻辑合并到同一个步骤里,这样下载的文件就能被后续的tar命令包含:
branches: development: - step: name: Build & Package caches: - node script: # 先确保目标目录存在,避免curl因目录不存在失败 - mkdir -p ./filefolder - curl -X GET "https:myurl.com/file.json" -o ./filefolder/file.json - export NODE_OPTIONS=--max-old-space-size=3072 - npm install - npm run build - npm test - mkdir heroku - tar -czf ../tmp/123.tar.gz . - cd heroku - mv ../../tmp/123.tar.gz . artifacts: - heroku/**
方案2:保留并行,用artifacts传递文件
如果必须保留并行结构,需要在Run build步骤里配置artifacts输出下载的文件,让Zip the sources步骤能获取到:
branches: development: - parallel: - step: name: Run build caches: - node script: - mkdir -p ./filefolder - curl -X GET "https:myurl.com/file.json" -o ./filefolder/file.json - export NODE_OPTIONS=--max-old-space-size=3072 - npm install - npm run build - npm test artifacts: # 把下载的文件标记为输出产物 - filefolder/file.json - step: name: "Zip the sources" script: - mkdir heroku # 此时artifacts已经被自动下载到当前目录,打包会包含filefolder/file.json - tar -czf ../tmp/123.tar.gz . - cd heroku - mv ../../tmp/123.tar.gz . artifacts: - heroku/**
额外要检查的点
- 一定要加
mkdir -p ./filefolder:curl不会自动创建目录,如果目录不存在,curl看起来执行成功,但实际没写入文件 - 确认tar命令的路径:
tar -czf ../tmp/123.tar.gz .是打包当前目录所有内容,确保filefolder在当前目录下,会被包含进去 - 最后验证Heroku部署时是否正确解压了tar包,确保文件被放到了预期路径
内容的提问来源于stack exchange,提问作者eko
相关产品推荐
相关产品推荐

