Jenkins中如何传递带有空格的字符串参数到环境变量

38次阅读
没有评论

问题描述

在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

如果有问题,请确保在操作之前备份文件,并注意版本差异。
另一种方法是将环境变量保存在文件中,并在之后从文件中读取,您可以加密/解密或使用其他类型的参数。

正文完