有时候我们历史的git仓库,提交了某个比较大的文件如果不限制 depth ,就会拉取所有的历史提交记录,这样在历史仓库比较大的时候 clone 非常之慢,而实际上我们只需要最新的代码来构建就行了,为了优化性能,我们可以配置指定拉取:
关键配置:
stage('Check code') {
echo("gitCommitId value is: ${gitCommitId}")
// sh "sleep 10000"
def scmVars = checkout([
$class: 'GitSCM',
branches: [[name: "${gitCommitId}"]],
extensions: [
[$class: 'CloneOption', depth: 1, shallow: true, noTags: true, honorRefspec: true, timeout: 3000]
],
userRemoteConfigs: [[
credentialsId: "${gitlabCredential}",
url: "${gitlabURL}",
refspec: "+refs/heads/${gitCommitId}:refs/remotes/origin/${gitCommitId}"
]]
])
commitHash = scmVars.GIT_COMMIT.take(8)
echo("${commitHash}")
}
上面的拉取方式只适合拉取分支的,如果还要兼容commitId,需要下面的配置:
// 判断是分支名还是 commit hash
def isCommitHash = gitCommitId ==~ /^[a-f0-9]{7,40}$/
def scmVars = checkout([
$class: 'GitSCM',
branches: [[name: isCommitHash ? "${gitCommitId}" : "origin/${gitCommitId}"]],
extensions: [
[$class: 'CloneOption', depth: 1, shallow: true, noTags: true, honorRefspec: true, timeout: 3000]
],
userRemoteConfigs: [[
credentialsId: "${gitlabCredential}",
url: "${gitlabURL}",
refspec: isCommitHash ?
"+${gitCommitId}:refs/remotes/origin/target-commit" :
"+refs/heads/${gitCommitId}:refs/remotes/origin/${gitCommitId}"
]]
])