Git зависает при извлечении из хранилища в общей папке с помощью Jenkins - PullRequest
0 голосов
/ 18 июня 2019

Я использую ведомое устройство Jenkins в своих работах, ведомые устройства являются экземплярами amazon spot, поэтому я использую общую папку (EFS) для монтирования общих папок, таких как .m2 / .npm и рабочей области.

, когдазадание запускается и пытается извлечь из удаленного репозитория git сборка зависает при клонировании.

Когда я не использую efs и клон на самом экземпляре spot, все работает как положено, создавая другие файлы вручную или через Jenkins наEFS также работает нормально.разрешения для общей папки такие же, как у пользователя 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 голосов
/ 18 июня 2019

Так что, похоже, проблема в большом размере Packfile в git, похоже, что EFS довольно медленно обрабатывает такие большие файлы, из-за чего он так долго зависает.Я заметил это с помощью команды lsof :

lsof +D ./

Что указывает на то, что индексный файл и файл пакета открыты долгое время, и оба они имеют большие файлы:

*

То, что я сделал, чтобы решить эту проблему, - это использование мелкого клона в 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,8 ГБ все еще занимает много времени.

...