You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins Agent容器中Maven构建RPM出现file: not found报错排查求助

解决Jenkins SSH Agent镜像构建RPM时出现file: not found的问题

问题背景

基于jenkins/ssh-agent:latest-jdk8制作了包含Maven的Docker镜像用于Jenkins项目构建,RPM生成及安装均正常,但构建日志中频繁出现ARG0: 1: file: not found和find: ‘file’: No such file or directory错误,手动进入容器运行RPM脚本却无报错,推测问题与Maven执行上下文有关。

镜像Dockerfile:

FROM maven:3.5.0-jdk-8 as mavensrc   
FROM jenkins/ssh-agent:latest-jdk8   
COPY --from=mavensrc /usr/share/maven /usr/share/maven

ENV MAVEN_HOME /usr/share/maven
ENV USER_HOME_DIR="/home/jenkins"
ENV MAVEN_CONFIG "$USER_HOME_DIR/.m2"

RUN sed -i "s|PATH=|PATH=/usr/share/maven/bin:|" /etc/environment   
       && apt-get update \
       && apt-get -y install binutils \
       && apt-get -y install rpm 

核心报错片段:

[INFO] + /usr/lib/rpm/brp-strip /usr/bin/strip
[INFO] ARG0: 1: file: not found
[INFO] ARG0: 1: file: not found
...
[INFO] + /usr/lib/rpm/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump
[INFO] find: ‘file’: No such file or directory

brp-strip脚本依赖file命令的核心逻辑:

find "$RPM_BUILD_ROOT" -type f \( -perm -0100 -or -perm -0010 -or -perm -0001 \) \! -regex "${RPM_BUILD_ROOT}/*usr/lib/debug.*" -print0 | \
    xargs -0 -r -P$NCPUS -n32 sh -c "file \"\$@\" | grep -v ' shared object,' | sed -n -e 's/^\(.*\):[  ]*ELF.*, not stripped.*/\1/p' | xargs -I{} $STRIP -g {}" ARG0

原因分析

  1. file命令缺失:jenkins/ssh-agent:latest-jdk8基于Debian/Ubuntu系统,默认未预装file工具包,而RPM构建的brp-*系列脚本依赖file命令识别ELF文件类型。你的Dockerfile仅安装了binutils和rpm,缺少file包导致脚本执行时找不到命令。
  2. 手动运行无报错的差异:手动进入容器时,可能临时安装过file包未清理,或是交互式shell的环境配置与Maven构建的非交互式环境不一致,导致手动测试时能找到命令,但构建时无法识别。

解决方案

修改Dockerfile,在apt-get install指令中添加file包,同时可选清理APT缓存减小镜像体积:

FROM maven:3.5.0-jdk-8 as mavensrc   
FROM jenkins/ssh-agent:latest-jdk8   
COPY --from=mavensrc /usr/share/maven /usr/share/maven

ENV MAVEN_HOME /usr/share/maven
ENV USER_HOME_DIR="/home/jenkins"
ENV MAVEN_CONFIG "$USER_HOME_DIR/.m2"

RUN sed -i "s|PATH=|PATH=/usr/share/maven/bin:|" /etc/environment \
       && apt-get update \
       && apt-get -y install binutils rpm file \
       && apt-get clean \
       && rm -rf /var/lib/apt/lists/*

重新构建镜像并替换Jenkins中的SSH Agent配置,再次执行构建即可消除该报错。


内容的提问来源于stack exchange,提问作者Lety

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 04:55:23