我在.NET中有一个简单的控制台应用程序.它只是更大应用程序的测试部分.我想指定我的控制台应用程序的"退出代码".我该怎么做呢?
在我正在开发的项目中,我们使用shell脚本来执行不同的任务.有些脚本是运行Rsync的SH/Bash,有些是PHP脚本.其中一个PHP脚本正在运行一些集成测试,这些测试输出到JUnit XML,代码覆盖率报告等.
Jenkins能够将作业标记为基于退出状态的成功/失败.在PHP中,如果在运行期间检测到测试失败,则脚本将退出1.其他shell脚本运行命令并使用其中的退出代码将构建标记为失败.
// :: End of PHP script:
// If any tests have failed, fail the build
if ($build_error) exit(1);
Run Code Online (Sandbox Code Playgroud)
在Jenkins术语中,不稳定的构建被定义为
如果构建成功并且一个或多个发布者报告它不稳定,则构建不稳定.例如,如果配置了JUnit发布者并且测试失败,则构建将标记为不稳定.
在运行shell脚本时,如何让Jenkins将构建标记为不稳定而不是仅成功/失败?
我需要使用PowerShell -Command"&scriptname"运行一个脚本,如果我从PowerShell返回的退出代码与脚本本身返回的退出代码相同,我真的很喜欢它.不幸的是,如果脚本返回0,则PowerShell返回0;如果脚本返回任何非零值,则PowerShell返回1,如下所示:
PS C:\test> cat foo.ps1
exit 42
PS C:\test> ./foo.ps1
PS C:\test> echo $lastexitcode
42
PS C:\test> powershell -Command "exit 42"
PS C:\test> echo $lastexitcode
42
PS C:\test> powershell -Command "& ./foo.ps1"
PS C:\test> echo $lastexitcode
1
PS C:\test>
Run Code Online (Sandbox Code Playgroud)
使用[Environment] :: Exit(42)几乎可以正常工作:
PS C:\test> cat .\baz.ps1
[Environment]::Exit(42)
PS C:\test> powershell -Command "& ./baz.ps1"
PS C:\test> echo $lastexitcode
42
PS C:\test>
Run Code Online (Sandbox Code Playgroud)
除了脚本以交互方式运行时,它将退出整个shell.有什么建议?