Azure DevOps流水线中Post-Job Checkout挂起问题求助
代理机器资源瓶颈
部分代理速度快说明不是全局配置问题,慢代理大概率存在CPU、内存或磁盘IO耗尽的情况。Post-Job阶段通常会清理临时文件、释放锁资源,若代理使用机械硬盘、磁盘空间不足或磁盘读写延迟过高,会直接拖慢清理操作。
可通过top/htop查看CPU负载,df -h检查磁盘剩余空间,iostat分析磁盘读写延迟来确认。Git配置或缓存异常
即便流水线未显式执行仓库检出,部分CI/CD系统的Post-Job Checkout仍会默认清理Git相关缓存或临时仓库。如果代理的Git全局配置存在问题(比如http.postBuffer设置过小、SSH连接未正常释放),会导致清理过程卡住。
可手动在慢代理上执行git clean -xfd命令,模拟清理操作,观察是否出现卡顿。代理与服务器网络不稳定
Post-Job阶段需要向流水线服务器上报状态或清理远程关联资源,若慢代理与服务器之间存在网络丢包、延迟过高的情况,会触发重试机制,导致长时间等待。
可通过ping/traceroute测试代理到服务器的网络延迟,用ss命令检查TCP连接状态是否异常。默认Post-Job钩子逻辑问题
部分CI/CD系统会默认挂载Checkout相关的Post-Job清理钩子,即便流水线未检出仓库也会执行。如果钩子逻辑存在缺陷(比如等待不存在的进程、循环检查无效资源),会导致挂起。
可尝试在流水线配置中禁用默认的Checkout清理钩子,测试是否解决问题。文件或进程锁占用
Post-Job清理时,若有其他进程占用了流水线临时目录的文件或Git仓库资源,会导致清理命令卡住等待资源释放。
可通过lsof命令查看慢代理上流水线临时目录的文件占用情况,排查是否有异常进程持有锁资源。
内容的提问来源于stack exchange,提问作者user22868203

