我正在实现声明式的Jenkinsfile,我想运行windows命令并将结果分配给一个变量。
这是我的代码。
stage('check latest commit') {
steps {
script{
COMMIT = bat("c:\\Software\\Git\\bin\\git.exe log -n 1 --pretty=format:'%%H'").trim() as String
echo "${COMMIT}"
}
}
}
我在Jenkins的工作中得到了以下记录
c:\Software\JenkinsWorkspace\workspace\TFS - XXX>c:\Software\Git\bin\git.exe log -n 1 --pretty=format:'%H'
'656669102c187fe390a1e9d72ed47aa2d8528ad6'[Pipeline] }
[Pipeline] // script
因此,该命令如期执行,并返回一个最新提交的哈希值。很好。然而,在运行结束时,我得到了这个错误。
[Pipeline] End of Pipeline
java.lang.NullPointerException: Cannot invoke method trim() on null object
at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:91)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:48)
在运行结束时,我得到了这个错误。这意味着命令中的值是 null
即使命令本身会产生一个结果。
如果我不包含修剪,比如说。
stage('check latest commit') {
steps {
script{
COMMIT = bat("c:\\Software\\Git\\bin\\git.exe log -n 1 --pretty=format:'%%H'")
echo "${COMMIT}"
}
}
}
下面的日志记录显示:
[Pipeline] bat
c:\Software\JenkinsWorkspace\workspace\TFS - XXX>c:\Software\Git\bin\git.exe log -n 1 --pretty=format:'%H'
'c77c806cdafd4f45373ef0cef8c6ff60da26611f'[Pipeline] echo
null
[Pipeline] }
请注意… NULL 的值在日志中。这是我试图打印COMMIT值的结果。
问题:我如何正确地给一个变量赋值?我如何正确地将一个值分配给一个变量 当这个值应该从cmd命令中返回的时候 我正在实现声明式的Jenkinsfile,现在我无法回到脚本式的。
EDIT: 是的,我知道我可以用不同的方式来获取提交哈希值,但是,我还需要运行其他命令,我也需要它们的值。
解决方案:
你执行的方式是 bat
步骤不返回任何输出。
COMMIT = bat("c:\\Software\\Git\\bin\\git.exe log -n 1 --pretty=format:'%%H'")
默认行为是返回 null
并将输出打印到控制台。如果你想捕获输出,你需要设置为 returnStdout
参数为 true
.
COMMIT = bat(script: "@c:\\Software\\Git\\bin\\git.exe log -n 1 --pretty=format:'%%H'", returnStdout: true).trim()
你可以查看 官方文件页 了解更多关于所有参数的信息 bat
步骤的支持。