如何在接收带空格和双引号的字符串时正确解析在Linux上运行的Jenkins中的构建参数?

问题描述 投票:0回答:2

我配置一个参数化的Jenkins Job构建,它采用以下称为“测试用例”的参数:

-t "Can Get Fake Name" -t "Can call Password"

这是一个必须通过命令行传递给机器人框架可执行文件的字符串。

Jenkins运行在Linux(Centos 7)上,这是我为实现目标而编写的构建脚本:

robot "${testcases}" myrobottest.robot

我找到了${testcases}建议here,这部分解决了我的问题。

Jenkins上的结果命令如下:

+ robot '-t "Can Get Fake Name" -t "Can call Password"' myrobottest.robot
[ ERROR ] Suite 'myrobottest' contains no tests named ' "Can Get Fake Name" -t "Can call Password"'.

这里的问题是我不知道如何删除(或不生成)的尾随单引号。

在使用${testcases}表示法之前,我还尝试使用像$testcases这样的环境变量,但它产生了许多无用的单引号。

有什么建议吗?

我希望生成的命令行是

robot -t "Can Get Fake Name" -t "Can call Password" myrobottest.robot

但实际输出是:

robot '-t "Can Get Fake Name" -t "Can call Password"' myrobottest.robot

编辑

我又做了一次尝试。如果我更改脚本行如下:

eval echo robot \${testcases} docker-robot-framework.robot

我得到以下控制台输出。

+ eval echo robot '${testcases}' myrobottest.robot
++ echo robot -t '"Can' Get Fake 'Name"' myrobottest.robot
robot -t "Can Get Fake Name" myrobottest.robot

我认为我接近解决方案,因为我只需要执行这样的eval表达式(顺便说一句,这是正确的)。

linux variables jenkins environment single-quotes
2个回答
0
投票

我解决了以下方式:

/bin/sh -c "robot $testcases myrobottest.robot"

实际上,执行的结果命令行现在是正确的,并且正在工作:

/bin/sh -c 'robot -t "Can Get Fake Name" -t "Can call Password" myrobottest.robot'

0
投票

尝试删除"周围的${testcases}

IFS=$'\n'

robot ${testcases} myrobottest.robot
© www.soinside.com 2019 - 2024. All rights reserved.