一般我们进行Jekins构建代码时,会使用Git插件从gitlab库拉取项目代码。jekins pipeline脚本如下
def scmVars = checkout([
$class: 'GitSCM',
branches: [[name: "origin/master"]],
doGenerateSubmoduleConfigurations: false,
extensions: [ [$class: 'CloneOption',timeout:10] ],
submoduleCfg: [],
userRemoteConfigs: [[ credentialsId: 'git',
url: 'http://121.x.x.x/project/service/your-service.git' ]]
])
使用jekins执行构建命令,查看控制台日志,如如下图所示,可以看到最终会执行git fetch命令,下载下来的是包含项目所有的分支和历史提交记录等信息,如下图所示
问题:随着产品不断迭代开发,如果每次都全量拉取所有的分支和提交记录等信息,速度会越来越慢,可以看到本地的.git文件夹会越来越大。.git文件夹包含了所有的数据文件和提交记录等信息,如果服务器带宽分配不是很大,就会出现拉取代码需要很久的情况。
解决:正常jekins构建代码只是为了拉取指定的分支并发布,并不关心其他分支和代码提交记录,故只要进行浅克隆并且拉取指定分支即可。参考配置plugins.jenkins.io/git/?cache=… 调整脚本如下
def scmVars = checkout([
$class: 'GitSCM',
branches: [[name: "origin/master"]],
doGenerateSubmoduleConfigurations: false,
extensions: [
[$class: 'CloneOption',timeout:10,noTags: true,shallow: true]
],
submoduleCfg: [],
userRemoteConfigs: [[
credentialsId: 'git',
refspec: "+refs/heads/master:refs/remotes/origin/master",
url: 'http://121.x.x.x/project/service/your-service.git'
]]])
主要增加了几个参数
- noTags: true, 拉取不包含标签
- shallow: true 只进行浅克隆,不会获取历史的提交记录
- refspec 只拉取指定的分支,而不是所有的分支 调整后,最终在jekins执行的代码拉取命令如下: