GitLab 15.0升级后CI作业sudo失效、apt源连接超时排查
故障原因
sudo: command not found 根因
GitLab 15.0版本升级后,官方共享CI Runner默认使用的容器基础镜像从预装了全套常用工具的标准Debian镜像,切换为了Debian精简镜像:
- 这类精简镜像默认没有预装
sudo组件 - CI作业容器本身默认以
root用户运行,本来就不需要sudo提权,旧版本镜像里的sudo属于冗余预装内容,升级后被裁剪掉了 - 未修改CI配置、重跑历史作业仍复现故障,完全符合平台侧默认运行环境变更的特征,和仓库内的代码、配置改动无关
apt连接超时、找不到软件包根因
这个问题和sudo报错属于同一轮平台环境变更引发的连锁问题:
- apt执行update时无法连接Debian官方源,本地包索引没有拉取成功,后续安装包时自然会报「Unable to locate package」类错误
- 你之前尝试加的
docker build --network host配置无效,是因为这个参数仅对docker in docker模式下的镜像构建操作生效,普通CI作业容器不支持直接调用宿主机网络,对apt等普通命令的网络连通性没有任何改善作用
修复步骤
所有操作都可以直接通过GitLab Web UI编辑.gitlab-ci.yml完成,不需要操作底层服务器或Runner配置:
- 移除所有脚本里的
sudo前缀,容器内默认root权限完全可以直接执行apt等命令 - 在执行apt update前先替换系统默认的软件源为平台网络可达的镜像源,避免直连Debian官方源超时
- 可选:显式指定使用稳定的旧版标准Debian镜像作为作业运行环境,彻底规避默认精简镜像的兼容问题
修改后的完整.gitlab-ci.yml参考配置如下:
stages: - deploy variables: RA_NAME: "My_project" DEBIAN_FRONTEND: noninteractive image: debian:bullseye default: before_script: - sed -i 's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list - sed -i 's/security.debian.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list - apt-get update -qq - apt-get install -y latex209-bin texlive-latex-base texlive-latex-extra ant zip unzip deploy_Default: stage: deploy script: - sh -x deploy.sh "$RA_NAME" "$(cat RA_VERSION)" artifacts: paths: - "${RA_NAME}_$(cat RA_VERSION).zip" only: - master - dev - tags
配置里的
DEBIAN_FRONTEND: noninteractive变量是为了屏蔽apt安装过程中的交互式提示,避免作业意外卡住。如果替换源后仍有连通性问题,可以换其他可用的软件源地址,不需要固定用示例里的源。
内容的提问来源于stack exchange,提问作者Alexandru DuDu
相关产品推荐
相关产品推荐

