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

GitLab CI执行失败:hw_03目录run.sh文件未找到求助

GitLab CI流水线执行失败:hw_03目录中找不到run.sh文件

仓库结构

/                   ...仓库根目录
|- hw_01/          ...第一份作业
|- hw_02/          ...第二份作业
...
|- Makefile       ...全局Makefile

每个hw_*子目录下包含main.c、Makefile和run.sh脚本。

流水线执行流程

  • GitLab CI执行根目录的全局Makefile
  • 全局Makefile遍历所有hw_*子目录,执行目录内的本地Makefile
  • 本地Makefile先编译main.c生成二进制文件,再执行run.sh完成测试

问题现象

hw_01、hw_02的构建与测试流程正常执行,但进入hw_03目录时,流水线报错:

./run.sh - no such file or directory

已确认本地仓库中hw_03目录下确实存在run.sh,且已做以下排查:

  • 合并了CI的“构建”与“测试”阶段,排除阶段间自动清理文件的可能
  • 将run.sh内容简化为仅echo "Hi, im here",确认报错是文件找不到而非脚本内部逻辑问题

相关文件内容

全局Makefile

SUBDIRS := $(wildcard hw_*)

all: $(SUBDIRS)

$(SUBDIRS):
	$(MAKE) -C $@

clean:
	for dir in $(SUBDIRS); do \
		$(MAKE) -C $$dir clean; \
	done

.PHONY: all clean $(SUBDIRS)

本地Makefile(hw_*目录内)

CC = gcc
CFLAGS = -Wall -Wextra -std=c99

all: main

main: main.c
	$(CC) $(CFLAGS) -o main main.c

test: main
	./run.sh

clean:
	rm -f main

.PHONY: all test clean

完整CI流水线输出片段

$ make
make[1]: Entering directory '/builds/honza/uni-hw/hw_01'
gcc -Wall -Wextra -std=c99 -o main main.c
./run.sh
Hi, im here
make[1]: Leaving directory '/builds/honza/uni-hw/hw_01'
make[1]: Entering directory '/builds/honza/uni-hw/hw_02'
gcc -Wall -Wextra -std=c99 -o main main.c
./run.sh
Hi, im here
make[1]: Leaving directory '/builds/honza/uni-hw/hw_02'
make[1]: Entering directory '/builds/honza/uni-hw/hw_03'
gcc -Wall -Wextra -std=c99 -o main main.c
./run.sh: No such file or directory
make[1]: *** [Makefile:8: test] Error 127
make[1]: Leaving directory '/builds/honza/uni-hw/hw_03'
make: *** [Makefile:5: hw_03] Error 2

可能的原因与解决方案

1. 文件换行符不兼容

如果run.sh在Windows系统下创建,换行符为CRLF,而GitLab CI运行环境是Linux,会将CR字符识别为路径的一部分,导致找不到文件。

  • 解决:将run.sh换行符转为LF,本地执行:
    sed -i 's/\r$//' hw_03/run.sh
    
    同时配置Git自动转换:
    git config core.autocrlf input
    

2. 文件缺少可执行权限

GitLab CI拉取代码后,run.sh可能无执行权限,Linux下无权限的脚本直接运行会触发“找不到文件”的类似报错。

  • 解决:
    1. 本地添加权限并提交:
      chmod +x hw_03/run.sh
      git add hw_03/run.sh
      git commit -m "Add execute permission to hw_03/run.sh"
      
    2. 或在全局Makefile中提前设置权限:
      $(SUBDIRS):
      
    chmod +x $@/run.sh
    $(MAKE) -C $@

3. Git忽略规则问题

检查.gitignore文件,确认是否误将run.sh加入忽略列表,导致CI拉取代码时未同步该文件。

  • 解决:删除.gitignore中run.sh相关条目并提交变更。

4. 目录名称大小写不匹配

Git默认大小写不敏感,但Linux环境(CI运行环境)大小写敏感,若本地目录名称与GitLab仓库中不一致(如HW_03 vs hw_03),会导致路径匹配错误。

  • 解决:统一本地与GitLab仓库的目录名称大小写,提交修正后的变更。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 12:50:22