GitLab CI/CD执行MATLAB任务无限挂起,请求技术支持
GitLab CI/CD 运行MATLAB脚本挂起问题解决思路
问题场景
- 环境:MATLAB 2023b + Windows 11,GitLab部署在私有云,GitLab Runner标签为
matlab-win - 配置的
.gitlab-ci.yml:
stages: - Test Testing: tags: - matlab-win stage: Test script: - matlab -batch "runner"
runner.m内容:
a = 10; b = 12; disp(a+b)
- 问题现象:任务无限期挂起,超时前弹出警告:
WARNING: Failed to terminate process: failed to attach to the console of the process being terminated: Access is denied. WARNING: Failed to force-kill: exit status 128
- 已尝试操作:管理员权限执行无效;任务管理器可见MATLAB后台进程,CPU/内存占用极低。
解决思路
1. 优化MATLAB启动参数
Windows环境下GitLab Runner默认以服务模式运行,MATLAB的-batch模式可能受会话隔离影响无法正常初始化,可添加无图形相关参数强制非交互启动:
matlab -batch "runner" -noFigureWindows -nosplash -nodesktop
同时确保脚本在仓库目录执行,避免路径问题:
cd %CI_PROJECT_DIR% && matlab -batch "runner" -noFigureWindows -nosplash -nodesktop
2. 切换GitLab Runner运行模式
服务模式的Runner存在会话隔离限制,改为交互式模式运行:
- 停止并卸载现有Runner服务:
gitlab-runner stop gitlab-runner uninstall - 以交互式启动Runner:
gitlab-runner run
交互式模式下Runner运行在当前用户会话,可避免服务会话的权限/隔离问题。
3. 排查MATLAB初始化卡点
添加日志输出定位MATLAB启动时的卡点:
matlab -batch "disp('Start'); runner; disp('End')" -logfile matlab_ci.log -noFigureWindows -nosplash -nodesktop
任务结束后查看matlab_ci.log,确认是否卡在许可证验证、配置加载等步骤。同时验证许可证有效性:
matlab -batch "license('test','MATLAB')"
4. 调整Runner权限与进程隔离
- 检查GitLab Runner服务的运行账户:打开服务管理器,找到GitLab Runner服务,在“登录”选项卡切换为本地系统账户并勾选“允许服务与桌面交互”(注意安全风险),或使用拥有MATLAB完整权限的本地用户账户。
- 临时禁用Windows Defender或第三方安全软件的实时保护,测试是否是安全软件拦截了MATLAB进程操作。
5. 验证版本兼容性
- 升级MATLAB 2023b至最新补丁版本,部分旧补丁在Windows 11服务会话中存在兼容性问题。
- 更新GitLab Runner到最新版本,旧版本Windows Runner可能存在进程管理bug。
内容的提问来源于stack exchange,提问作者manasvb
相关产品推荐
相关产品推荐

