Groovy:如何运行在Jenkins中作为参数输入的多行sh执行

时间:2019-08-09 15:59:23

标签: bash jenkins groovy jenkins-groovy

在我的Jenkins管道中,有一个参数允许用户添加将在一个阶段(行为阶段)中执行的bash命令。使用管道的groovy文件,目标是仅从参数中提取bash代码并在阶段中执行它。

代码正在输入名为BEHAVE_EXTRA的参数。

考虑到用户输入多行bash命令的可能性,我一直在尝试创建一个sh文件,将params.BEHAVE_EXTRA的内容写入该文件并最终执行sh文件的策略。

另一个要求是文件的每个新版本都将覆盖文件(不附加文件),即params.BEHAVE_EXTRA的新内容

到目前为止,我已经尝试了2种解决方案;

1)

//USING BASH 
sh """
touch BEHAVE_EXTRA.sh
echo ${params.BEHAVE_EXTRA} > BEHAVE_EXTRA.sh
bash ./BEHAVE_EXTRA.sh
"""    

2)

//USING GROOVY - PERMISSION DENIED   
def sh_execution = new File("./BEHAVE_EXTRA.sh")
sh_execution.createNewFile()
sh_execution << params.BEHAVE_EXTRA
sh_execution.execute()

1)当用户输入单行bash命令时,此解决方案有效;我输入了一个简单的“ echo Hello World”。但是,当我添加多行bash命令时,在日志中会出现以下错误:

2019-08-08 15:48:09  + echo echo Hello World
2019-08-08 15:48:09  echo Hello World
2019-08-08 15:48:09  + ls -l
2019-08-08 15:48:09  total 1
2019-08-08 15:48:09  -rw-r--r-- 1 DCUser 197121 17 Aug  8 15:48 BEHAVE_EXTRA.sh
2019-08-08 15:48:09  + echo test
2019-08-08 15:48:09  + bash ./BEHAVE_EXTRA.sh

2)我始终无法获得此解决方案,因为我总是收到一个权限被拒绝的错误,即使我尝试创建基本文本文件作为测试“ File file = new File(“ out.txt) “)”

2019-08-09 08:12:18     at java.io.FileOutputStream.open0(Native Method)
2019-08-09 08:12:18     at java.io.FileOutputStream.open(FileOutputStream.java:270)
2019-08-09 08:12:18     at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
2019-08-09 08:12:18     at java.io.FileWriter.<init>(FileWriter.java:107)
2019-08-09 08:12:18     at org.codehaus.groovy.runtime.ResourceGroovyMethods.append(ResourceGroovyMethods.java:868)

任何有关如何完成我所需要的内容以及哪种类型的解决方案(令人讨厌的代码)的建议都将不胜感激!

0 个答案:

没有答案