gpt4 book ai didi

jenkins - 中止的 Jenkins 管道作业继续在后期运行

转载 作者:行者123 更新时间:2023-12-02 04:26:16 26 4
gpt4 key购买 nike

我使用的是最新版本的 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 作为退出代码。 https://github.com/dotnet/coreclr/issues/21243前几天解决了,现在还没有发布。

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

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

// Do stuff

return 0;
}

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

关于jenkins - 中止的 Jenkins 管道作业继续在后期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54294408/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com