Jenkins持久任务插件管道文本文件繁忙

时间:2017-06-28 18:20:46

标签: shell jenkins jenkins-plugins jenkins-pipeline

我经常收到此错误。它非常不一致,有时它会在那里,而且往往不是。我在管道代码中使用持久任务插件来运行shell命令。我在log previous命令中包含了一个chmod,它将执行标志添加到java文件中。

    Running in /var/lib/jenkins/jobs/My_Jobs/jobs/ubuntuvm04/workspace/build/tools/java/jre/bin

    [Pipeline] {

    [Pipeline] sh

    [bin] Running shell script

    + chmod +x ./java

    [Pipeline] sh

    [bin] Running shell script

    + sync

    [Pipeline] sh

    [bin] Running shell script

    + sleep 5

    [Pipeline] }

    [Pipeline] // dir

    [Pipeline] }

    [Pipeline] // stage

    [Pipeline] stage

    [Pipeline] { (check java version)

    [Pipeline] sh

    [workspace] Running shell script

    + ./build/tools/java/jre/bin/java -version

    /var/lib/jenkins/jobs/My_Jobs/jobs/ubuntuvm04/workspace@tmp/durable-b87cfd9e/script.sh: line 2: ./build/tools/java/jre/bin/java: Text file busy

.

我几乎放弃了这个错误,我担心我最终会编写代码来重试执行失败的行,但基于该错误,文本文件是否忙碌问题涉及插件制作的script.sh,还是java文件?我试图运行

1 个答案:

答案 0 :(得分:1)

这里的问题似乎是由Java错误https://bugs.openjdk.java.net/browse/JDK-8068370引起的。

当多个线程打开一个文件进行写入,关闭该文件然后执行它们(每个线程使用其自己的文件)时,可能会出现此问题。即使所有文件都“正确”关闭,由于文件句柄是如何在fork / exec周围工作的,一个线程中的子进程可能会继承该句柄到另一个线程的打开文件中,从而中断该线程的后续子进程调用。

看到类似的问题: