GitLab CI/CD如何进入运行容器获取交互式shell进行调试
GitLab CI/CD script段获取交互式shell的方法
在Docker环境中我们可以通过
docker-compose exec containername /bin/bash拿到容器的交互式shell,但GitLab CI/CD的script段默认运行在非交互式的无TTY环境,没有用户输入通道,无法直接启动交互式shell等待操作。
可行的排查方案
方案1:使用GitLab内置调试终端(推荐)
GitLab 13.7及以上版本自带CI作业调试功能,可以直接提供官方的交互式终端入口:
- 进入项目「设置」→「CI/CD」→「通用管道」,开启「启用调试作业」选项
- 运行流水线时勾选「启用调试模式」,或者直接在作业配置中添加
debug: true参数,配置示例如下:
build: stage: build debug: true script: - pwd; ls -al
- 作业启动后,进入作业详情页的「终端」标签页,即可直接获取当前运行环境的交互式shell,执行任意命令排查问题。
方案2:挂起作业后手动接入容器(适用于私有Runner)
如果你使用的是自行托管的GitLab Runner,可以通过阻塞命令挂起作业后,从Runner宿主机直接接入运行中的容器:
- 临时修改作业配置,添加sleep命令挂起作业,预留足够的排查时间:
build: stage: build script: - pwd; ls -al # 挂起作业30分钟,到期后自动恢复执行 - sleep 1800
- 登录到Runner所在的宿主机,执行
docker ps找到当前正在运行的CI作业容器 - 执行
docker exec -it 容器ID /bin/bash即可进入容器获取交互式shell,排查完成后可以手动kill掉sleep进程让作业继续运行。
注意事项
- GitLab官方公共共享Runner默认不支持调试终端功能,仅私有托管的Runner可正常使用
- 调试专用的临时配置不要提交到主分支,避免正常流水线被阻塞浪费资源
- 调试完成后请及时关闭调试作业开关,避免产生不必要的安全风险
内容的提问来源于stack exchange,提问作者Santhosh
相关产品推荐
相关产品推荐

