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

如何让Jenkins将代码检出到独立目录且不含.git文件夹?

解决方案

核心问题

Jenkins的GitSCM插件(即你使用的checkout步骤)会自行管理Git仓库的存储路径,不会读取GIT_WORK_TREE环境变量,所以你之前的配置无法生效。要实现代码直接检出到测试站点且不带.git文件夹,建议直接使用原生Git命令替代插件的checkout步骤,这样能精确控制Git目录和工作树的位置。

方案一:分离Git目录与工作树(推荐)

这个方案会把Git仓库的.git目录存在Jenkins工作区,代码直接检出到C:\Inetpub\wwwroot,目标目录不会留下任何Git相关文件:

修改你的流水线代码如下:

pipeline {
    agent any
    stages {
        stage('checkout to test site') {
            steps {
                bat '''
                    :: 创建存放Git仓库的目录(Jenkins工作区内)
                    if not exist "%WORKSPACE%\\git_repo" mkdir "%WORKSPACE%\\git_repo"
                    cd "%WORKSPACE%\\git_repo"

                    :: 初始化Git仓库(仅第一次执行需要,后续跳过也可)
                    if not exist ".git" git init

                    :: 设置远程仓库(仅第一次执行需要)
                    git remote get-url origin >nul 2>&1 || git remote add origin ssh://git@myBitBucketServer/web/wwwroot.git

                    :: 拉取最新代码
                    git fetch origin

                    :: 将test_branch分支的代码检出到测试站点目录
                    git checkout test_branch --work-tree="C:\\Inetpub\\wwwroot"
                '''
            }
        }
        stage('verify') {
            steps {
                bat 'dir "C:\\Inetpub\\wwwroot"'
                println "All done"
            }
        }
    }
}

方案二:克隆时指定分离的Git目录

如果是第一次部署,也可以用clone --separate-git-dir直接完成,但会在C:\Inetpub\wwwroot生成一个.git文本文件(指向Jenkins工作区的Git目录),如果介意这个文件,优先选方案一:

pipeline {
    agent any
    stages {
        stage('clone to test site') {
            steps {
                bat '''
                    :: 克隆仓库,Git目录存在Jenkins工作区,工作树在测试站点
                    git clone --separate-git-dir="%WORKSPACE%\\test_repo.git" ssh://git@myBitBucketServer/web/wwwroot.git "C:\\Inetpub\\wwwroot"
                    cd "C:\\Inetpub\\wwwroot"
                    git checkout test_branch
                '''
            }
        }
        stage('verify') {
            steps {
                bat 'dir "C:\\Inetpub\\wwwroot"'
                println "All done"
            }
        }
    }
}

补充说明

  • 确保Jenkins代理用户拥有C:\Inetpub\wwwroot的读写权限,否则检出会失败。
  • 后续提交后,方案一的git fetch + checkout操作会非常快,和你之前的增量检出速度一致。
  • 如果需要清理测试站点的旧文件,可以在checkout前添加bat 'rmdir /s /q "C:\\Inetpub\\wwwroot" && mkdir "C:\\Inetpub\\wwwroot"'(注意:会删除目标目录所有内容,谨慎使用)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:15:41