GitLab CI作业报错bash: line 147: mkdir: command not found求助
解决GitLab CI Shell执行器报
mkdir: command not found的问题 可能的原因及排查步骤
1. 环境变量PATH被修改
Shell执行器依赖系统默认的PATH定位系统命令(如mkdir),若PATH被意外覆盖或修改,会导致命令找不到:
- 在CI脚本中添加打印
PATH的命令,确认路径是否正常:
运行作业后,检查输出是否包含unitTests: stage: unittests script: - echo $PATH # 新增此行,查看当前环境变量 - chmod +x gradlew - ./gradlew test/bin、/usr/bin这类系统命令所在路径。若没有,说明PATH被错误修改。
2. mkdir命令本身缺失
服务器上的mkdir可能被意外删除或损坏:
- 登录GitLab Runner所在服务器,执行以下命令检查
mkdir是否存在:
正常应返回which mkdir/bin/mkdir或/usr/bin/mkdir。若无输出,说明命令缺失,需重新安装coreutils包:- Debian/Ubuntu系统:
apt install --reinstall coreutils - CentOS/RHEL系统:
yum reinstall coreutils
- Debian/Ubuntu系统:
3. Runner执行用户或权限变化
若GitLab Runner的执行用户被修改,或用户的环境配置(如.bashrc、.profile)被更改,会导致PATH异常:
- 找到Runner的执行用户(通常在
/etc/gitlab-runner/config.toml的user字段),切换到该用户:
然后执行su - <runner-user>echo $PATH和mkdir test-dir,查看是否能正常运行。若用户环境的PATH异常,需修复用户的环境配置文件。
4. 前置脚本修改了环境变量
检查GitLab Runner的全局配置(/etc/gitlab-runner/config.toml)是否有pre_clone_script、pre_build_script这类全局脚本,或CI配置里的before_script,这些脚本可能修改了PATH:
- 临时注释掉这类前置脚本,重新运行作业,查看是否恢复正常。
5. Gradle脚本内部的环境问题
手动在服务器上拉取代码,切换到Runner执行用户,直接运行./gradlew test,查看是否能正常执行。若手动执行也报错,说明是Gradle脚本或项目依赖的问题,需排查Gradle构建过程中是否有修改环境变量的操作。
内容的提问来源于stack exchange,提问作者Sakeb Akhtar
相关产品推荐
相关产品推荐

