GitLab Runner未使用Docker镜像执行before_script,apt-get命令未找到
问题分析与解决方案
你遇到的问题核心在于GitLab Runner的执行器类型和你预期的不一致,导致.gitlab-ci.yml里的image: ubuntu:latest配置根本没生效,作业直接跑在了你的Redhat宿主机上,自然找不到apt-get命令。
为什么会这样?
GitLab Runner有多种执行器类型,其中:
- Docker执行器:会根据你指定的镜像创建独立容器,在容器内执行作业,完全隔离宿主机环境。
- Shell执行器:直接在Runner所在的宿主机系统上执行命令,会忽略你在
.gitlab-ci.yml里指定的image配置。
你的Runner用的是Shell执行器,所以虽然写了ubuntu:latest,但实际运行环境是Redhat(用yum而不是apt-get)。
解决方法
方案1:切换为Docker执行器(推荐,隔离性更好)
- 打开GitLab Runner的配置文件,通常路径是
/etc/gitlab-runner/config.toml - 修改
executor字段为docker,并添加默认镜像配置(可选):[[runners]] name = "Your Runner Name" url = "https://your-gitlab-instance.com/" token = "your-runner-token" executor = "docker" [runners.docker] tls_verify = false image = "ubuntu:latest" # 默认镜像,也可以在.gitlab-ci.yml里指定 privileged = false disable_entrypoint_overwrite = false oom_kill_disable = false disable_cache = false volumes = ["/cache"] shm_size = 0 - 重启GitLab Runner服务:
sudo gitlab-runner restart
这样配置后,作业会在Ubuntu容器内运行,apt-get命令就能正常使用了。
方案2:继续使用Shell执行器,适配Redhat环境
如果你必须用Shell执行器,需要把作业里的命令换成Redhat兼容的:
- 修改
.gitlab-ci.yml的before_script部分:before_script: - yum update -y # 注意:Redhat下的PHP扩展包名称和Ubuntu不同,需要调整,比如: - yum install -y php-mbstring php-mcrypt php-pdo_pgsql php-curl php-json php-intl php-gd php-xml php-zip php-bz2 php-opcache - 确保宿主机已经安装了PHP和相关依赖,否则需要先在Redhat服务器上提前部署好这些环境。
内容的提问来源于stack exchange,提问作者Fanan Dala
相关产品推荐
相关产品推荐

