中止的jenkins管道作业将继续运行后续阶段

中止的jenkins管道作业将继续运行后续阶段,jenkins,.net-core,jenkins-pipeline,Jenkins,.net Core,Jenkins Pipeline,我使用的是最新版本的Jenkins和管道插件,我有一个Jenkins声明性管道作业,配置如下: pipeline { agent { label 'default' } stages { stage('Prepare') { steps { dir('foo') { git ... } }

我使用的是最新版本的Jenkins和管道插件,我有一个Jenkins声明性管道作业,配置如下:

pipeline { 
    agent {
        label 'default'
    }
    stages {
        stage('Prepare') {
            steps {
                dir('foo') {
                    git ...
                }
            }
        }
        stage('Temp1') {
            steps {
                sh script: 'dotnet run ...'
                echo 'Temp1'
            }
        }
        stage('Temp2') {
            steps {
                echo 'Temp2'
            }
        }
    }
}
如果我在Temp1阶段的sh脚本期间中止构建,我的期望是Temp1阶段和Temp2阶段的其余部分都不会运行。但是,当我中止它时,它会停止sh脚本,然后运行Temp1阶段的其余部分,并继续运行Temp2阶段

以下是日志:

Running in Durability level: MAX_SURVIVABILITY
[Pipeline] node
Running on ...
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Prepare)
[Pipeline] dir
Running in ...
[Pipeline] {
[Pipeline] git
Fetching changes from the remote Git repository
...
[Pipeline] }
[Pipeline] // dir
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Temp1)
[Pipeline] sh
+ dotnet run ...
Aborted by ...
Sending interrupt signal to process
[Pipeline] echo
Temp1
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Temp2)
[Pipeline] echo
Temp2
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: ABORTED

如何使构建真正中止?

这最终成为一个dotnet问题,当被SIGTERM终止时,它返回0作为退出代码。几天前已解决,但尚未发布

作为解决方法,您可以执行以下操作:

public static int Main(string[] args)
{
    Environment.ExitCode = 1;

    // Do stuff

    return 0;
}

如果
Main
成功完成,它将返回退出代码0。如果它收到SIGTERM,它将返回
环境中的值。ExitCode

这确实很有趣。
dotnet是否运行..
如果接收到中断信号,则返回代码>0?这种行为是否也发生在管道的其他阶段,还是只在中断
dotnet运行时发生?
stage?@fishi如果我在本地运行
dotnet
并按Ctrl+C,那么
$?
是130,所以我认为这不是问题所在。但是我在sh脚本中添加了一个
echo$?
,它正在打印0,所以问题可能还是出在退出代码上。这种行为只在
dotnet运行时发生。
还是在管道的其他阶段中止时也会发生?如果它只发生在
dotnet运行期间..
,那么我敢打赌退出代码不正确。运行足够长时间以中止它们的唯一阶段是
dotnet运行
,因此我将去找其他测试工具。您可以在管道中添加
sh脚本:“sleep 100'
,并使用该脚本进行测试。