将命令的结果分配给声明式Jenkinsfile中的一个变量。

我正在实现声明式的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 步骤的支持。

给TA打赏
共{{data.count}}人
人已打赏
解决方案

convertfrom-json).head.head3.data8

2022-5-12 15:00:17

解决方案

用主方法计算到2个不同的值,并使用公共静态最后的 int

2022-5-12 15:00:19

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索