需在Jenkins获取Jenkinsfile的位置执行git remote prune origin,该位置在哪?
Jenkins获取Jenkinsfile的初始Git调用位置说明
Jenkins拉取Jenkinsfile的初始Git操作,是在Jenkins控制器(原主节点/内置节点)的临时缓存目录执行的,和流水线代理节点的工作区完全是两个独立的位置。
这个缓存目录的路径规律是:
- Linux/macOS系统:
${JENKINS_HOME}/caches/git-<随机哈希字符串> - Windows系统:
${JENKINS_HOME}\caches\git-<随机哈希字符串>
这些目录是Jenkins用来存储各个Git仓库的元数据、临时克隆内容的,包括拉取Jenkinsfile时用到的仓库快照。你之前试的几种操作没生效,就是因为全针对的是代理节点的工作区,根本没碰控制器上的这些缓存。
要清理初始拉取产生的 stale 分支,你可以这么做:
- 先找对应仓库的缓存目录:进入Jenkins后台的「系统管理」→「系统信息」,搜索
gitCacheRoot查看缓存根路径,再根据你的仓库URL找到对应的子目录 - 进入该目录后执行命令:
git remote prune origin - 嫌麻烦的话,直接删掉对应仓库的整个缓存目录也行,下次拉取Jenkinsfile时会重新克隆一份
如果想通过配置自动解决这个问题,还有几个方案可选:
- 把Git插件更新到最新版,部分新版本优化了控制器端的分支清理逻辑
- 去Jenkins全局配置的「Git」设置里,看看有没有「全局清理过时远程追踪分支」的选项,开启后会作用于控制器的Git操作
- 声明式流水线可以加个前置步骤,指定在控制器节点执行清理:
node('master') { git url: '你的仓库地址', credentialsId: '你的凭据ID' sh 'git remote prune origin' deleteDir() // 清理临时目录,避免占用空间 } pipeline { // 你的流水线配置内容 }
注意:操作Jenkins控制器的文件系统时,要确保有足够权限,别影响正在运行的流水线。
内容的提问来源于stack exchange,提问作者kemzter
相关产品推荐
相关产品推荐

