Jenkins声明式管道Powershell插件未终止Powershell进程

时间:2018-11-02 15:19:58

标签: powershell jenkins build jenkins-declarative-pipeline

我们正在使用Jenkins来构建我们的项目,但是有时在构建脚本运行后作业会挂起(恰好3个小时)。

我们正在使用声明性管道,并且詹金斯脚本看起来像这样:

steps {
        powershell """
            "cd '${WORKSPACE}'" 
            & ./build.ps1
            write-host after script 
            Start-Sleep -s 5
            write-host after sleep
            exit \$LastExitCode
        """
        echo "after build"
        powershell """
        write-host second powershell
        """
    }

build powershell脚本使用MSBuild和Gradle来构建项目,然后将结果添加到zip文件中。

当作业挂起时,我在作业的控制台输出中看到“休眠后”输出,然后3个小时什么都没输出。在整个3个小时中,我可以看到“处理中”标志旋转,这意味着詹金斯的工作正在进行中。 3小时后,将输出“ after build”行。

当作业挂起时,我仍然可以在Jenkin的服务器上看到powershell进程(实际上,我可以看到2个powershell进程,不知道这是否正常)。这意味着exit \ $ LastExitCode命令没有终止Powershell进程。在调用build脚本后,我试图将这些行放入try-catch块中,但是没有捕获到异常,并且'after sleep'仅输出一次,因此在调用exit时卡住了工作。

我不知道这是否与https://issues.jenkins-ci.org/browse/JENKINS-48175有关,因为我的脚本运行良好。我的脚本的最后一行是写主机构建成功,我确实看到了消息。

如果作业挂起并且尝试取消它,我会在控制台输出中看到Sending interrupt signal to process After 10s process did not stop消息。

我还尝试将“持久任务”插件降级到1.15,但是由于我使用的是依赖于更高版本的其他插件,因此构建失败。

总体而言,我认为问题在于Jenkins作业无法终止Powershell进程。 Jenkins服务器是Windows Server 2012 R2,Jenkins版本是2.147。

提前感谢大家:)

0 个答案:

没有答案