You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins声明式流水线构建执行git pull时出现挂起问题如何解决?

解决方案
  • 禁用Git交互提示避免无响应
    Jenkins为非交互运行环境,Git遇到需要输入凭据、确认主机密钥等场景时默认会等待终端输入,直接导致进程挂起。在_UPDATE_ALL.sh开头添加以下配置,让Git遇到交互需求时直接报错退出而非挂起:
export GIT_TERMINAL_PROMPT=0
export GIT_SSH_COMMAND="ssh -o BatchMode=yes"
git config --global core.askPass ""
  • 修正Jenkins运行用户的Git凭据配置
    手动执行脚本时使用的是当前登录用户的凭据(SSH密钥、HTTPS缓存凭据等),而Jenkins服务默认使用Local System账号运行,没有访问Git仓库的合法权限。需先进入Windows服务管理页,将Jenkins服务的运行账号修改为你手动测试时使用的用户,或单独给Jenkins服务账号配置对应Git仓库的访问凭据。

  • 调整MSYS2调用参数禁用伪终端
    通过PowerShell调用MSYS2执行脚本时,默认会尝试分配伪终端,在非交互的Jenkins环境下容易引发挂起问题。修改_RUN_STAGE.ps1中调用MSYS2的命令,添加-T参数禁用伪终端分配,示例如下:

# 原调用逻辑添加-T参数
c:\msys64\msys2_shell.cmd -defterm -no-start -T -c "./_UPDATE_ALL.sh"
  • 优化脚本执行逻辑避免输出缓冲挂起
    你当前脚本中使用echo $(git xxx)的写法会先捕获命令全部输出再统一打印,容易因输出缓冲满导致进程挂起,同时也看不到实时执行日志。将_UPDATE_ALL.sh修改为直接执行命令,并打开调试输出方便定位问题:
#!/bin/sh
set -ex
git stash
git pull
git submodule update --force --init --recursive
git fetch --all
git tag -l | xargs git tag -d
git fetch --tags
  • 规避系统目录权限限制
    你的Jenkins工作目录放在C:/Program Files (x86)下,该目录默认有严格的权限控制,非管理员账号没有写入权限,会导致Git拉取代码时写入文件失败引发挂起。建议将Jenkins工作目录迁移到C:/JenkinsWorkspace这类自定义的非系统目录,降低权限冲突概率。

内容的提问来源于stack exchange,提问作者martorad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 15:39:03