Git checkout 出现问题 | git-lfs filter-process 因信号 15 而中止

3
Git版本为2.22.1。我们有一个项目,其中包含Web资源(主要是图像和CSS),并且在Jenkins上的构建一直很顺利,直到我们转移到多分支管道构建。在Jenkinsfile中没有发生任何重大变化。构建不断失败,出现以下异常:
hudson.plugins.git.GitException: Command "git checkout -f 0d29a50ec65a5fc6302d9ed56efc59b789f727c7" returned status code 128:
stdout: 
stderr: fatal: the remote end hung up unexpectedly
error: git-lfs filter-process died of signal 15

    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:2372)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$1000(CliGitAPIImpl.java:80)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$9.execute(CliGitAPIImpl.java:2681)
Caused: hudson.plugins.git.GitException: Could not checkout 0d29a50ec65a5fc6302d9ed56efc59b789f727c7
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$9.execute(CliGitAPIImpl.java:2705)
    at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1195)
    at org.jenkinsci.plugins.workflow.steps.scm.SCMStep.checkout(SCMStep.java:124)
    at org.jenkinsci.plugins.workflow.steps.scm.SCMStep$StepExecutionImpl.run(SCMStep.java:93)
    at org.jenkinsci.plugins.workflow.steps.scm.SCMStep$StepExecutionImpl.run(SCMStep.java:80)
    at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution.lambda$start$0(SynchronousNonBlockingStepExecution.java:47)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

根据日志,源代码检出在10分钟的超时时间内失败。即使我们将超时时间更新为60分钟,它仍然无法检出。在另一台机器上,代码检出只需要5分钟,因此这不应该是一个问题。
[Pipeline] checkout
using credential buildsvc
Cloning the remote Git repository
Cloning with configured refspecs honoured and without tags
Cloning repository https://buildsvc@repo.testops.com:8443/scm/pro/web-assets.git
 > git init /var/lib/jenkins/workspace/_assets-test-ci_feature_pro-1967 # timeout=10
Fetching upstream changes from https://buildsvc@repo.testops.com:8443/scm/pro/web-assets.git
 > git --version # timeout=10
using GIT_ASKPASS to set credentials buildsvc is a service user that is not associated with any person. This is used to checkout source code from a version control system.
 > git fetch --no-tags --force --progress -- https://buildsvc@repo.testops.com:8443/scm/pro/web-assets.git +refs/heads/*:refs/remotes/origin/* # timeout=10
 > git config remote.origin.url https://buildsvc@repo.testops.com:8443/scm/pro/web-assets.git # timeout=10
 > git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10
 > git config remote.origin.url https://buildsvc@repo.testops.com:8443/scm/pro/web-assets.git # timeout=10
Fetching without tags
Fetching upstream changes from https://buildsvc@repo.testops.com:8443/scm/pro/web-assets.git
using GIT_ASKPASS to set credentials buildsvc is a service user that is not associated with any person. This is used to checkout source code from a version control system.
 > git fetch --no-tags --force --progress -- https://buildsvc@repo.testops.com:8443/scm/pro/web-assets.git +refs/heads/*:refs/remotes/origin/* # timeout=10
Checking out Revision 0d29a50ec65a5fc6302d9ed56efc59b789f727c7 (feature/pro-1967)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f 0d29a50ec65a5fc6302d9ed56efc59b789f727c7 # timeout=10
ERROR: Timeout after 10 minutes
4个回答

0

我遇到了同样的问题,因为LFS被激活了,但在我们的流水线中,在检出步骤中没有添加该扩展。

解决方法只是在检出中添加GitLFSPull

checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'WipeWorkspace'], [$class: 'PruneStaleBranch'],[$class: 'GitLFSPull'] ....

官方文档网站中:

$class: 'GitLFSPull' 通过在检出完成后拉取大文件来为工作区启用git大文件支持。要求控制器和执行LFS检出的每个代理都已安装git lfs


0
对我来说,事实证明大文件没有正确上传到服务器。
在一台拥有实际文件副本的机器上运行git lfs push --all origin master修复了这个问题。

0

通过删除 .gitattributes 文件中存在的所有属性(全部与lfs相关),解决了这个问题。我推送了这个更改,Jenkins(多分支流水线)成功地检出了源代码。然后,我重新添加了所有这些git属性,并再次推送了更改。尽管代码基本上没有改变,但是通过这两个步骤,检出仍然成功进行。

我还添加了“Git LFS在检出后拉取”配置,但这与代码检出问题无关。


0

谢谢您的回复。恐怕,添加这个并没有产生任何区别。 - undefined
嘿,关于你对git lfs的回答,我建议仍然使用checkout步骤,但是要尽可能准确地进行配置。checkout步骤有许多选项,比如GitLFSPull和CloneOption,例如我在stackoverflow上找到了这个问题:https://dev59.com/h1cP5IYBdhLWcg3wDWVq - undefined
是的,我同意。我们确实有一个具有类似配置的结账步骤。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接