【问题标题】:How can I pass a Jenkins parameter escaped to Fabric?如何将转义的 Jenkins 参数传递给 Fabric?
【发布时间】:2015-08-13 15:57:32
【问题描述】:

我有一个包含文本参数的 Jenkins 构建作业。该参数是一个 URL,我需要将它传递给 Fabric。如果 URL 包含“=”,则 Fabric 会爆炸。

示例参数值LOGOURL:http://example.com/test.jpg?foo=bar

我的执行shell命令:

fab -f create-demo.py main:sitename="$SITENAME",domainname=$DOMAINNAME,logourl="$LOGOURL",bgurl="$BGURL",host=test.example.com

Jenkins 中的错误:

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/fabric/main.py", line 700, in main
    commands_to_run = parse_arguments(arguments)
  File "/usr/local/lib/python2.7/dist-packages/fabric/main.py", line 536, in parse_arguments
    k, v = result
ValueError: too many values to unpack
Build step 'Execute shell' marked build as failure

如何正确传递LOGOURL参数,让Fabric不死?

【问题讨论】:

    标签: shell jenkins fabric


    【解决方案1】:

    Equals signs can be escaped with backslashes 在织物中。所以尝试将 LOGOURL 设置为http://example.com/test.jpg?foo\=bar

    如果你不能改变LOGOURL的值,那么你可以尝试使用shell为你转义=

    fab -f create-demo.py main:sitename="$SITENAME",domainname=$DOMAINNAME,logourl=${LOGOURL/=/\\=},bgurl="$BGURL",host=test.example.com
    

    【讨论】:

    • 没有转义不起作用:/tmp/hudson1651138574766027790.sh: 2: /tmp/hudson1651138574766027790.sh: Bad substitution
    • 尝试在您的 URL 中使用 foo\\=barfoo\\\=barfoo\\\\=bar,而不是 foo\=bar。可能正在进行一些双重转义。
    • 我无法将 \\ 添加到 URL 中,因为这是用户在 Jenkins 输入字段中提供的。所以我需要一种方法让它在以后生效。
    猜你喜欢
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    相关资源
    最近更新 更多