GitLab CI/CD清理项目目录与文件变量时失败报ERROR: Job failed: exit code 1
故障可能原因
- 基础镜像的底层操作系统已结束官方支持:你使用的
python:3.6-stretch基于Debian 9(Stretch),该系统版本2022年6月就已经终止长期支持,Nodesource官方在后续的源运维中,移除了对Debian 9适配的Node.js 12安装源,setup_12.x脚本检测到当前系统不在支持列表后,直接返回非0退出码,导致任务失败。 - 错误信息被静默参数屏蔽:执行curl时添加的
-s(静默模式)参数,完全隐藏了脚本执行抛出的版本不支持提示,所以你只能看到退出码1,看不到具体报错原因。 - 第三方依赖变动触发故障:流水线此前长期正常运行是因为Nodesource之前一直保留了旧版本系统的适配逻辑,近期官方清理历史资源导致适配失效,属于外部依赖变动导致的非预期故障,和你本地代码、GitLab Runner网络状态无关。
排查与修复方案
验证排查步骤
首先修改before_script中的curl命令,去掉-s参数,添加-v参数打印详细执行日志:
curl -v https://deb.nodesource.com/setup_12.x | bash
重新运行流水线如果日志中出现Your distribution, identified as "stretch", is not currently supported类提示,即可确认是上述原因导致的故障。
修复方案
可根据业务场景选择以下任意一种方案处理:
- 方案1:更换仍在支持周期内的基础镜像
将python:3.6-stretch替换为更高版本的Python镜像,比如python:3.9-bullseye(基于Debian 11,在官方支持周期内,同时适配Node.js 12的安装源)。如果业务强依赖Python 3.6版本,可直接使用第三方预构建的Python 3.6+Node.js 12镜像,避免每次构建重复安装依赖。 - 方案2:手动配置归档源(不更换基础镜像)
如果暂时无法更换基础镜像,可以删除原来拉取执行setup脚本的步骤,手动添加Nodesource归档源:
# 替换原有 curl -s https://deb.nodesource.com/setup_12.x | bash 步骤 apt-get install -y apt-transport-https ca-certificates curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add - echo "deb https://deb.nodesource.com/node_12.x stretch main" > /etc/apt/sources.list.d/nodesource.list echo "deb-src https://deb.nodesource.com/node_12.x stretch main" >> /etc/apt/sources.list.d/nodesource.list apt-get update
- 方案3:直接安装预编译的Node.js二进制包
不需要依赖系统源适配,直接下载Node.js官方预编译的二进制包解压到系统路径:
curl -s https://nodejs.org/dist/v12.22.12/node-v12.22.12-linux-x64.tar.xz | tar -xJf - -C /usr/local --strip-components=1
优化建议
后续可以把依赖安装步骤打包成自定义镜像,推送到私有镜像仓库使用,避免每次构建都依赖外部第三方源,降低这类外部资源变动导致的故障概率。
内容的提问来源于stack exchange,提问作者SlugQ
相关产品推荐
相关产品推荐

