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