【发布时间】:2020-01-11 03:33:16
【问题描述】:
我无法将带有空格的变量从 Jenkinsfile 传递给通过 groovy 运行的 ansible 命令。
我尝试使用引号(双引号和单引号)退格和其他各种组合都无济于事。 不幸的是,我无法重命名以包含 - 或 _。 在 linux 中将其作为单行运行,使用双引号导出到 shell 的变量。 当从 Jenkins 传递时,第一个空格会破坏代码,字符串中的第二个单词被视为单独的字符串。
Jenkins 文件中有问题的变量...
env.COMPUTER_NAME = "HELLO WORLD"
在ansible中
String computer_args ="ansible-playbook deploy.yml -e COMPUTER_NAME=${env.COMPUTER_NAME}"
这会导致错误...
Kernel \r on an \m
ERROR! the playbook: WORLD could not be found
Connection to XX closed.
script returned exit code 1
但是,在 linux shell 中运行,它可以工作
export COMPUTER_NAME="HELLO WORLD"
ansible-playbook deploy.yml -e COMPUTER_NAME=${env.COMPUTER_NAME}
TASK [computer_name_gather_facts : fail if Computer name was not found] ***************************************************************************************************************************************************************************
ok: [localhost] => {
"changed": false,
"msg": "All assertions passed"
}
【问题讨论】:
-
试试
String computer_args ="ansible-playbook deploy.yml -e \"COMPUTER_NAME=${env.COMPUTER_NAME}\"" -
谢谢 - 我已经尝试过了,同样的错误仍然存在 - 由于某种原因,ansible 似乎无法像空格一样使用变量
-
@user2920657,能否请您添加您的 groovy 脚本以及使用它可以重现该问题。
-
嗨 @ShubhamVaishnav - 目前 groovy 文件调用的所有内容都是
String computer_args ="ansible-playbook deploy.yml -e COMPUTER_NAME=${env.COMPUTER_NAME}" -
这实际上是一个 shell 命令问题,与 ansible、jenkins 或 groovy 无关。您的插值命令将是
ansible-playbook deploy.yml -e COMPUTER_NAME=HELLO WORLD,它将尝试执行名为WORLD的剧本,因为这是最后一个参数。你需要修正你的命令中的错字,然后你就可以开始了。
标签: variables jenkins groovy ansible spaces