代码之家  ›  专栏  ›  技术社区  ›  hugo

Gitlab CI文件中Jenkins API的curl命令正在删除参数

  •  0
  • hugo  · 技术社区  · 6 年前

    我试图在我的Gitlab CI文件中对Jenkins的API端点执行curl命令以启动作业,但无论我尝试什么,第二个参数总是会被丢弃。这是我的Gitlab CI文件:

    selenium_test:
      stage: run_test
      tags:
        - autotest1
      only:
        - trigger
      script:
        - jenkins_response=$(curl -s -I -X POST http://user:token@localhost:8080/job/qTest/buildWithParameters?environment=CI%20Dev&test_id=96)
    

    有了上面的代码, test_id=96 被删除。如果我像这样颠倒参数的顺序 test_id=96&environment=CI%20Dev 然后 environment=CI%20Dev 被删除。

    我也试过像这样编码整个字符串 environment%3DCI%20Dev%26test_id%3D96 但这也不管用。

    两个Jenkins参数test_id和environment在Jenkins中配置为字符串。

    对我做错了什么有什么看法吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Const    6 年前

    对我做错了什么有什么看法吗?

    您没有转义shell特殊字符(&)。考虑以下两个片段:

    • curl http://urlecho.appspot.com/echo?status=200&body=ALLOK 它将删除第二个参数并返回 None

    • curl "http://urlecho.appspot.com/echo?status=200&body=ALLOK" 它将解释第二个论点并返回正确的 ALLOK 反应。

    您有两个选项:将完整的URL括在双引号中,或者像在示例中使用空格字符那样进行转义。考虑以下建议 cURL documentation :

    当从命令行提示符调用时,您可能必须将完整的URL放在双引号内,以避免shell干扰它。这也适用于其他特殊字符,例如“&”、“?”和‘*’。