使用Jenkins从共享文件夹上的存储库中提取信息时,Git挂起

时间:2019-06-18 09:39:39

标签: git jenkins nfs amazon-efs

我在工作中使用的是Jenkins从属服务器,这些从属服务器是亚马逊现场实例,所以我使用共享文件夹(EFS)来挂载.m2 / .npm和工作区等共享文件夹。

当作业开始并尝试从远程git存储库中拉出时,构建会在克隆时挂起。

当我不使用efs并在即时实例本身上进行克隆时,一切都按预期工作,因此手动创建其他文件或通过ef上的Jenkins创建其他文件也可以正常工作。 共享文件夹的权限与Jenkins使用的用户相同。

任何建议会导致这种行为吗?

这是构建日志:

11:41:20 Fetching upstream changes from git@git.assembla.com:alpha.saas.git
11:41:20  > git --version # timeout=10
11:41:20 using GIT_SSH to set credentials jenkins@Dev_Builder(ssh)
11:41:20  > git fetch --no-tags --progress git@git.assembla.com:alpha.saas.git +refs/heads/*:refs/remotes/origin/* # timeout=5
11:41:29  > git rev-parse refs/remotes/origin/master^{commit} # timeout=10
11:41:29  > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
11:41:29 Checking out Revision e0dd60499d693a40fa0d3669201437b49cc2b0c4 (refs/remotes/origin/master)
11:41:29  > git config core.sparsecheckout # timeout=10
11:41:29  > git checkout -f e0dd60499d693a40fa0d3669201437b49cc2b0c4
11:48:59 Build was aborted

1 个答案:

答案 0 :(得分:0)

所以看来问题出在git中Packfile太大了, 看起来EFS处理如此大的文件的速度非常慢,这导致它挂了这么长时间。 我通过使用 lsof 命令注意到了这一点:

lsof +D ./

指出索引文件和打包文件已打开很长时间,并且它们都很大:

./。git / objects / pack / pack-601f9b58380bc69d49bcc429d046c8940c5ed9d2.idx

./。git / objects / pack / pack-601f9b58380bc69d49bcc429d046c8940c5ed9d2.pack

为了解决这个问题,我在詹金斯(Jenkins)中使用了浅表克隆:

checkout([
        $class: 'GitSCM',
        branches: [[name: "$git_branch" ]],
        doGenerateSubmoduleConfigurations: false,
        extensions: [[$class: 'CloneOption', depth: 0, noTags: true, reference: '', shallow: true]],
        submoduleCfg: [],
        userRemoteConfigs: [[url: "$git_repo" , credentialsId: env.gitCredentialsJenkins]]])

这解决了这个问题,尽管克隆1.8GB的存储库仍需要很长时间。