问题描述
在Jenkins Job中,我使用以下方式获取一个字符串参数:
FoldersList = test1,test2,test3,Folder name1,Folder name2,Folder name3
当我将这个值传递给环境变量时,Jenkins Job会因为文件夹名称中不允许有空格而失败,显示错误信息:Unknown lifecycle phase等等。
我在goals和options部分这样传递环境变量:
exec:java -Dexec.classpathScope="test" -Dexec.mainClass="com.mypackage.main.TestNGRunner" -Dexec.cleanupDaemonThreads=false "-Dexec.args=-inputexcel=Data.xlsx -jenkinsJobName=testJob -layer=MultiplefolderTest -InpFoldersList="\"$inpFoldersList"\" -threadCount=12 -retryCount=3"
如果我传递一个带有双引号的单个字符串,它可以工作,但是用户可能会输入多个带有空格的文件夹名称。请问有没有办法处理这个字符串并将其传递给环境变量?
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
如果输入的字符串因为文件夹名称中的空格没有引号而失败,可以尝试在每个对象周围添加引号。
InpFolderList已经添加了结束引号:
InpFoldersList="\"$inpFoldersList"\"
在每个对象周围添加引号。
class Example {
static void main(String[] args) {
String FolderList = "test1,test2,test3,Folder name1,Folder name2,Folder name3";
println(FolderList.replaceAll(",","\",\""));
}
}
输出结果(结束引号被省略):
test1","test2","test3","Folder name1","Folder name2","Folder name3
测试代码:https://www.jdoodle.com/execute-groovy-online/(复制/粘贴代码并执行)
使用上述示例,您还可以添加结束引号,并获得一个完整的字符串变量作为$InpFoldersList,这样在调试时就不会产生混淆。
方案2
如果有问题,请确保在操作之前备份文件,并注意版本差异。
另一种方法是将环境变量保存在文件中,并在之后从文件中读取,您可以加密/解密或使用其他类型的参数。
正文完