web-dev-qa-db-ja.com

パラメータオプションでJenkinsグルーヴィースクリプトからシェルスクリプトを実行するにはどうすればよいですか?

Uno-Choice動的参照パラメーターでシェルスクリプトを呼び出して、いくつかの操作(ファイルを作成し、呼び出されたシェルスクリプトから他のいくつかのシェルスクリプトを呼び出す)を実行したいと思います。

現在のところ、シェルスクリプトを呼び出して一部のファイルをcatすることはできますが、新しいファイルを作成したり、このファイルから別のシェルスクリプトを呼び出したりすることはできません。

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のシェルコマンドの実行

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

7
Triangle

Bashスクリプトをgroovyラッパーから実行しているため、stdoutとstderrはすでにgroovyラッパーにリダイレクトされています。これを上書きするには、シェルスクリプト内でexecを使用する必要があります。

例えば:

グルーヴィーなスクリプト:

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

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

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

script.shという名前のシェルスクリプトは、同じフォルダーにあります。

#!/bin/bash
echo "Test redirect"

上記のシェルスクリプトでgroovyを実行すると、groovyスクリプトのstdoutにTest redirectという出力が生成されます

ここで、script.sh`にexecを使用してstdoutリダイレクトを追加します。

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

これでgroovyスクリプトを実行すると、コンテンツ/tmp/testを含むファイルTest redirectが作成されます

I/Oリダイレクトの詳細については、bashを参照してください here

17
Yuri G.