我有一个基于 Jenkins 档案的 MultiBranch Pipeline,该档案明确克隆了由自变量提供的另一个存盘库。我看到它在尝试请求凭据git-lfs
作为git checkout -f <HASH>
命令的一部分后冻结并超时。
如何检出具有凭证 git lfs 访问权限的存盘库?
詹金斯档案:
stages {
stage('Fetch Source Code') {
steps{
dir('repo') {
git branch: "${params.Branch}", credentialsId: 'git-creds', url: "${params.RepoURL}"
}
}
}
詹金斯控制台:
> git init /home/jenkins/agent/workspace/<PIPELINE_NAME>/repo # timeout=10
Fetching upstream changes from <HTTPS_PRIVATE_GITLAB_URL>
> git --version # timeout=10
> git --version # 'git version 2.30.2'
using GIT_ASKPASS to set credentials Credentials to access git resources
> git fetch --tags --force --progress -- <HTTPS_PRIVATE_GITLAB_URL> refs/heads/*:refs/remotes/origin/* # timeout=10
Avoid second fetch
Checking out Revision HASH (refs/remotes/origin/master)
> git config remote.origin.url <HTTPS_PRIVATE_GITLAB_URL> # timeout=10
> git config --add remote.origin.fetch refs/heads/*:refs/remotes/origin/* # timeout=10
> git rev-parse refs/remotes/origin/master^{commit} # timeout=10
> git config core.sparsecheckout # timeout=10
> git checkout -f <HASH> # timeout=10
Times out
uj5u.com热心网友回复:
经过足够的除错。我发现发生了什么事。
默认情况下,Git 插件不会向大多数 git 命令提供凭据(仅获取它出现),因此当它执行 a 时,它会checkout
冻结等待凭据访问 LFS。
通过良好的设计,虽然令我沮丧的是,git/jenkins 不会在机器上的任何地方保存密码,并且 LFS 物件作为提取的一部分被下载。设定 Jenkins 在结帐后执行 LFS 拉取并不能解决问题,因为它试图在结帐期间执行 LFS 拉取。
解决方案是GIT_LFS_SKIP_SMUDGE=1
在全域环境变量中设定并将 LFS pull 添加到 checkout 步骤以显式拉入 LFS 物件。
0 评论