我想在 jenkins 管道脚本中评估 powershell/bat 调用。 Powershell 脚本文件使用 bat 脚本(在管道脚本中定义(调用。
我可以将ps/bat脚本的返回标准输出到变量中,现在我在正确评估它时遇到了问题。
这是脚本:
pipeline {
agent any
stages {
stage('Checkout') {
steps {
// Powershell Skript auschecken
checkout([$class: 'SubversionSCM', additionalCredentials: [], excludedCommitMessages: '', excludedRegions: '', excludedRevprop: '', excludedUsers: 'someUser', filterChangelog: false, ignoreDirPropChanges: false, includedRegions: '', locations: [[cancelProcessOnExternalsFail: true, credentialsId: 'someid', depthOption: 'infinity', ignoreExternalsOption: true, local: 'localPath', remote: '${CopySkript}']], quietOperation: true, workspaceUpdater: [$class: 'CheckoutUpdater']])
}
}
stage('CopyPitchDBFrontend') {
steps {
script {
def myBat = new StringBuilder()
myBat.append("%SystemRoot%\\syswow64\\WindowsPowerShell\\v1.0\\powershell.exe -File %WORKSPACE%\\myScript.ps1 -dbTargetPath \\123.123.123.123\myfile.file -dbSvnPath http://myserver.com/repo/trunk/myfile.file")
def result = bat(
returnStdout : true,
script: "${myBat.toString()}"
)
echo result.trim()
if (result.trim() == "0")
{
echo 'Myresult: Success'
currentBuild.result = 'SUCCESS'
}
else if (result.trim() == "-1"){
echo 'My result: Failure -1'
currentBuild.result = 'FAILURE'
}
else{
echo 'My result: Failure unknown'
currentBuild.result = 'FAILURE'
}
}
}
}
}
}
下面是成功脚本调用的控制台输出。 我的意思是脚本返回 0(见第二行(。
some text
0
[Pipeline] echo
My result: Failure unknown
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: FAILURE
执行跳转到 if 的 else 分支,我不明白。(result.trim() == "0")
,不是吗? 我也试过(result.trim() == 0)
但结果是一样的。
结果值是怎么回事?
也许有更好的方法可以做到这一点?
如果您尝试计算命令的退出代码,那么最简单的方法是利用bat
方法的returnStatus
参数。这将以整数类型的形式返回命令的状态值。然后,您可以按如下方式调整代码:
Integer result = bat( // fine tune type specification
returnStatus: true,
script: "${myBat.toString()}"
)
if (result == 0) { // integer comparison now
echo 'My result: Success'
currentBuild.result = 'SUCCESS'
}
else if (result == -1){ // integer comparison now
echo 'My result: Failure -1'
currentBuild.result = 'FAILURE'
}
else {
echo 'My result: Failure unknown'
currentBuild.result = 'FAILURE'
}
这将更容易,并按预期为您工作。请注意 bat 方法的相关文档。
由于returnStdout: true
您的"某些文本"实际上是返回的内容的一部分,显然它不是"0",因此是 else 分支。您可能希望将returnStdout
替换为returnStatus
。