GitLab流水线构建Job无法上传RPM制品问题求助
解决GitLab流水线RPM制品上传失败的问题
核心问题定位
你遇到的问题根源是RPM生成路径与GitLab CI工作目录不匹配:CentOS镜像中默认执行rpmbuild会在/root/rpmbuild/目录生成文件,但GitLab CI的工作目录是$CI_PROJECT_DIR(即/builds/firstnameName/project),上传制品时会在工作目录下查找指定路径,自然找不到/root/下的文件。
具体修复方案
方案1:复制RPM到工作目录
在build阶段的脚本末尾添加复制命令,将生成的RPM转移到GitLab CI的工作目录:# 确认文件存在后复制 if [ -f /root/rpmbuild/RPMS/x86_64/project-0.1-1.el8.x86_64.rpm ]; then cp /root/rpmbuild/RPMS/x86_64/project-0.1-1.el8.x86_64.rpm $CI_PROJECT_DIR/ fi之后制品上传配置直接指定
project-0.1-1.el8.x86_64.rpm或*.rpm即可。方案2:指定rpmbuild输出到工作目录
执行rpmbuild时通过参数直接将RPM生成到工作目录下,避免后续复制步骤:rpmbuild -ba your-spec-file.spec \ --define "_rpmdir $CI_PROJECT_DIR/rpmbuild/RPMS" \ --define "_sourcedir $CI_PROJECT_DIR"此时上传路径可配置为
rpmbuild/RPMS/x86_64/*.rpm,与你之前的配置一致,但文件实际存在于工作目录的对应子路径下。
关键注意事项
- 制品上传路径必须是相对于GitLab CI工作目录的相对路径,绝对路径(如
/root/rpmbuild/...)会被解析为工作目录下的子路径,导致找不到文件。 - 调试时在build脚本中添加以下命令,确认文件位置:
pwd # 输出当前工作目录 ls -la /root/rpmbuild/RPMS/x86_64/ # 确认RPM生成位置 ls -la $CI_PROJECT_DIR/ # 确认工作目录下的文件
内容的提问来源于stack exchange,提问作者Amaranth03
相关产品推荐
相关产品推荐

