У меня есть сервер jenkins, работающий на Ubuntu 16.04.2 x64, но недавно задания начали случайным образом давать сбой при выполнении сценария оболочки.Я могу выполнить сценарий вручную на сервере, и он работает, но при выполнении jenkins происходит сбой по следующим причинам:
Fail 1
JavaProcess leaked file descriptors. See https://jenkins.io/redirect/troubleshooting/process-leaked-file-descriptors for more information
Build step 'Execute shell' marked build as failure
Fail2
# gradle script that downloads some jars..
Download https://jcenter.bintray.com/org/pegdown/pegdown/1.6.0/pegdown-1.6.0.jar
Build step 'Execute shell' marked build as failure
Skipped archiving because build is not successful
Это не всегда та же самая банка, которую не удается загрузить в Fail 2 .
Я пытался обновить jenkins до последней версии (2.164.2), но все еще та же проблема.
Я пробовал решения, упомянутые в Ошибка обработки дескрипторов файлов утечки на JENKINS для Ошибка 1 , но безуспешно, по-прежнему не удаетсяТаким же образом.
Обновление 1
Я локализовал проблему в моем сценарии оболочки для этой части:
# Run script in docker container
chmod +x tmp.sh
docker run --entrypoint=/bin/bash -v $(pwd):/src --workdir=/build mydocker/myimage -c "/src/tmp.sh"
rm -f tmp.sh
ИтакКогда Docker выполняет мой tmp.sh через Jenkins "Execute shell", он случайно завершается неудачей.
Журнал из Docker journalctl -u docker.service
May 21 10:33:23 jenkins dockerd[1332]: time="2019-05-21T10:33:23.886024261Z" level=error msg="attach: stdout: write unix /var/run/docker.sock->@: write: broken pipe"
May 21 10:33:25 jenkins dockerd[1332]: time="2019-05-21T10:33:25.186663914Z" level=error msg="attach: stderr: write unix /var/run/docker.sock->@: write: broken pipe"
May 21 10:33:25 jenkins dockerd[1332]: time="2019-05-21T10:33:25.186715731Z" level=error msg="attach failed with error: write unix /var/run/docker.sock->@: write: broken pipe"
Журнал из контейнера Docker docker container logs cranky_cori
BUILD SUCCESSFUL
Total time: 38.273 secs
This build could be faster, please consider using the Gradle Daemon: https://docs.gradle.org/2.14/userguide/gradle_daemon.html
Заключение
Трубопровод к stdout и stderr разрывается, и jenkins сообщает об этом как о неудачномild, но в журналах Docker-контейнеров показано, что Docker продолжал выполняться и успешно завершил мой сценарий gradle.