Jenkins Groovy脚本执行shell命令

jm81lzqq  于 2023-10-15  发布在  Jenkins
关注(0)|答案(5)|浏览(267)

我正在使用一个groovy脚本来计算我的构建持续时间并将指标发布到Hosted Graphite,从命令行将产生以下curl,并达到预期效果:

echo {someMetricHere} | nc carbon.hostedgraphite.com 2003

然而,在我的groovy脚本中,生成度量的最后一步是运行以下命令:

"echo "+ metric +" | nc carbon.hostedgraphite.com 2003".execute()

它的回归:
捕获:java.io.IOException:无法运行程序“|“:error=20,Not a directory java.io.IOException:无法运行程序“|“:error=20,Not a directory at hudson8814765985646265134.run(hudson8814765985646265134.groovy:27)原因:java.io.IOException:错误=20,不是目录.还有一个1口译
我想指挥官不明白“|“命令的一部分,有什么建议我可以修复这个脚本运行预期的bash?我认为可以在工作区中创建一个.sh文件,但不确定如何创建。
Pastebin对于那些想要看到完整脚本的人:https://pastebin.com/izaXVucF
Cheers:)

5n0oy7gb

5n0oy7gb1#

要使用管道|,请尝试以下代码:

// this command line definitely works under linux:
def cmd = ['/bin/sh',  '-c',  'echo "12345" | grep "23"']
// this one should work for you:
// def cmd = ['/bin/sh',  '-c',  'echo "${metric}" | nc carbon.hostedgraphite.com 2003']

cmd.execute().with{
    def output = new StringWriter()
    def error = new StringWriter()
    //wait for process ended and catch stderr and stdout.
    it.waitForProcessOutput(output, error)
    //check there is no error
    println "error=$error"
    println "output=$output"
    println "code=${it.exitValue()}"
}

输出:

error=
output=12345
code=0
6g8kf2rb

6g8kf2rb2#

我觉得你做的连接有问题。
这段代码应该工作:

"echo ${metric} | nc carbon.hostedgraphite.com 2003".execute()
r7knjye2

r7knjye23#

一个更简单的方法是使用Jenkins Job DSL。它具有一个shell命令,可以从给定的step中发出。举例来说:

// execute echo command
job('example-1') {
    steps {
        shell('echo Hello World!')
    }
}

// read file from workspace
job('example-2') {
    steps {
        shell(readFileFromWorkspace('build.sh'))
    }
}

你可以在这里找到参考。

j1dl9f46

j1dl9f464#

除了来自daggett的伟大(尽管复杂)的公认答案之外,这里是简单的(记住并在Jenkins Script UI中输入)方法:

['/bin/sh', '-c', 'env | grep JAVA_OPTS'].execute().text

脚本管道就像sh 'env | grep JAVA_OPTS'一样简单

kmb7vmvb

kmb7vmvb5#

如果必须向groovy脚本传递一个变量,可以使用${variableName}。双引号并不像你想象的那样被解释,每个编译器都以一种奇怪的方式对待它。
在你的情况下,下面的一行应该有助于做你想做的事情:

sh "echo ${metric} | nc carbon.hostedgraphite.com 2003"

相关问题