Spring Boot项目build文件夹未推送到GitLab致CI/CD构建失败
问题:GitLab CI构建报错
chmod: cannot access 'build': No such file or directory,本地build文件夹未推送到仓库 原因分析
.gitignore规则导致build文件夹被忽略
你的.gitignore中明确配置了build/,这会让Git忽略根目录下的整个build文件夹,所以执行git add .时不会将build文件夹纳入版本控制,自然无法推送到GitLab。不过这其实是合理的——构建产物(比如build文件夹)不应该被提交到代码仓库,属于版本控制的最佳实践。CI脚本存在语法错误
你在gitlab-ci.yml的script里写了chmod +x ./gradlew build,这条命令的逻辑是给./gradlew添加执行权限,同时把build当作第二个参数传给chmod。但此时CI环境中还没有执行构建,build文件/文件夹根本不存在,所以chmod会报错找不到目标。
解决方法
1. 保留.gitignore的正确配置(无需修改)
继续忽略build文件夹,构建产物应该由CI流水线在运行时生成,而不是从仓库拉取。
2. 修复GitLab CI的构建脚本
修改gitlab-ci.yml中build-job的script部分,拆分错误的命令,先给gradlew加权限,再执行构建:
script: - echo "Compiling the code..." - chmod +x ./gradlew - ./gradlew build - echo "Compile complete."
3. 移除不必要的Docker安装步骤(可选)
当前build-job是用Gradle编译Java代码,不需要Docker环境,所以可以删除before_script里的Docker安装命令,以及services中的docker:dind,简化流水线配置:
build-job: stage: build image: gradle:jdk17 script: - echo "Compiling the code..." - chmod +x ./gradlew - ./gradlew build - echo "Compile complete." artifacts: paths: - ./build/libs/
这样调整后,CI流水线会先给Gradle wrapper脚本加执行权限,然后执行构建生成build文件夹,最后将build/libs/下的产物作为artifacts保存,后续的test/deploy阶段就可以正常使用这些产物了。
内容的提问来源于stack exchange,提问作者Stella
相关产品推荐
相关产品推荐

