拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 Jenkinsgitcheckout冻结LFS的凭据

Jenkinsgitcheckout冻结LFS的凭据

白鹭 - 2022-02-12 2111 0 0

我有一个基于 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 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *