如何在参数选项中从Jenkins groovy脚本执行shell脚本?

时间:2015-05-15 07:15:22

标签: shell groovy jenkins

我想在Uno-Choice动态参考参数中调用shell脚本 并执行一些操作(创建一些文件并调用其他一些shell 来自被调用shell脚本的脚本。)

截至目前,我可以调用shell脚本并编写一些文件,但我无法使用 创建新文件或从中调用另一个shell脚本。

def sout = new StringBuffer(), serr = new StringBuffer()

// 1) 
def proc ='cat /home/path/to/file'.execute()
//display contents of file

// 2) 
def proc="sh /home/path/to/shell/script.sh".execute()
//to call a shell script but the above dosent work if I echo some contents
//into some file.

proc.consumeProcessOutput(sout, serr)
proc.waitForOrKill(1000)
return sout.tokenize()

例如: - script.sh如果我添加行

echo "hello world" > test

然后没有创建测试文件

了解更多:

Groovy executing shell commands

http://jenkins-ci.361315.n4.nabble.com/Executing-a-shell-python-command-in-Jenkins-Dynamic-Choice-Parameter-Plugin-td4711174.html

1 个答案:

答案 0 :(得分:13)

由于您正在从groovy包装器运行bash脚本,因此stdout和stderr已经重定向到groovy包装器。要覆盖它,您需要在shell脚本中使用exec

例如:

groovy脚本:

def sout = new StringBuffer(), serr = new StringBuffer()

def proc ='./script.sh'.execute()

proc.consumeProcessOutput(sout, serr)
proc.waitForOrKill(1000)
println sout

名为script.sh的shell脚本位于同一文件夹中:

#!/bin/bash
echo "Test redirect"

使用上面的shell脚本运行groovy将在groovy脚本的stdout上生成输出Test redirect

现在在script.sh`中添加带exec的标量重定向:

#!/bin/bash
exec 1>/tmp/test
echo "Test redirect"

现在运行groovy脚本将创建一个文件/tmp/test,内容为Test redirect

您可以在bash here

中阅读有关I / O重定向的更多信息