Travis CI部署库至Bintray报错:build/libs路径不存在
解决Travis CI部署Bintray时
build/libs/路径不存在的问题 这问题我之前帮不少开发者排查过,结合你描述的情况(ls验证路径有效但部署阶段报错),咱们可以从这几个方向入手解决:
1. 确认部署阶段的工作目录是否和构建阶段一致
Travis的deploy阶段有时候会悄悄切换工作目录——哪怕你在script阶段用ls build/libs看到文件好好的,部署时可能已经不在项目根目录了。解决办法很直接,在deploy配置里明确指定工作目录:
deploy: provider: bintray user: YOUR_BINTRAY_USERNAME key: YOUR_BINTRAY_KEY working_directory: $TRAVIS_BUILD_DIR # 强制绑定项目根目录 # 其他配置(比如file或files)...
2. 修正Bintray文件配置的路径写法
很多时候问题出在files配置的格式上,别只写目录,最好明确匹配具体文件,避免插件解析路径时出现歧义:
如果是用bintray.json配置:
{ "files": [ { "pattern": "build/libs/*.jar", "uploadPattern": "libs/[你的groupId]/[你的artifactId]/${version}/[你的artifactId]-${version}.jar" }, { "pattern": "build/libs/*.pom", "uploadPattern": "libs/[你的groupId]/[你的artifactId]/${version}/[你的artifactId]-${version}.pom" } ], "publish": true }
如果直接在.travis.yml里写files:
deploy: # 其他配置... files: - "build/libs/*.jar" - "build/libs/*.pom"
注意别在路径末尾加多余的斜杠(比如把build/libs/改成build/libs或者直接匹配文件),这很容易触发路径解析bug。
3. 在部署前强制重新构建,确保产物新鲜存在
有时候Travis的缓存或者之前的构建残留会让你误以为文件存在,但实际本次构建可能没生成产物。可以在before_deploy阶段重新执行构建命令,把产物打扎实:
before_deploy: - ./gradlew clean build # Gradle项目用这个 # Maven项目换成:- mvn clean package - ls -la build/libs/ # 再次验证文件,方便后续排查
4. 扒一扒Travis日志的部署阶段细节
去Travis的构建日志里找到部署阶段的输出,看看实际工作目录是什么,有没有执行过cd之类的命令,或者Bintray插件有没有输出更详细的路径报错信息。比如可以在before_deploy里加个pwd命令确认当前位置:
before_deploy: - pwd # 打印当前工作目录,一目了然
按照这几个步骤排查,大概率能解决路径不存在的问题。
内容的提问来源于stack exchange,提问作者Jamy Bailly
相关产品推荐
相关产品推荐

