Как правильно разобрать параметры сборки в Jenkins, работающем в Linux, при получении строки с пробелами и двойными кавычками? - PullRequest
0 голосов
/ 28 марта 2019

Я сконфигурировал параметризованную сборку Jenkins Job, которая принимает следующий аргумент, называемый "testcases":

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

Это строка, которая должна передаваться роботу через командную строкуисполняемый фреймворк.

Jenkins работает в Linux (Centos 7), и это сценарий сборки, который я написал для достижения своей цели:

robot "${testcases}" myrobottest.robot

Я нашел предложение ${testcases} здесь , что частично решает мою проблему.

Команда результата на Дженкинсе выглядит следующим образом:

+ 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

EDIT

Я сделал еще одну попытку.Если я изменю строку сценария, как показано ниже:

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 выражение (кстати, правильное).

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

Я решил сделать так:

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

На самом деле, получающаяся в результате командная строка теперь корректна и работает:

/bin/sh -c 'robot -t "Can Get Fake Name" -t "Can call Password" myrobottest.robot'
0 голосов
/ 28 марта 2019

Попробуйте удалить " вокруг ${testcases}

IFS=$'\n'

robot ${testcases} myrobottest.robot
...