【问题标题】:passing parameter to jenkins job through curl POST not working?通过 curl POST 将参数传递给 jenkins 作业不起作用?
【发布时间】:2017-03-22 09:00:23
【问题描述】:

我尝试启动

curl -X POST -u "user:pass" -H Jenkins-Crumb:thecrumbnumber http://myjenkinsserver/jenkins/job/testjob/buildWithParameters?=PARAMETER=somenumber

通过触发参数化构建来工作,但问题是没有值传递给构建(即使在作业中设置了令牌,我也可以在没有它的情况下触发作业)。在 jenkins 中,该作业有一个配置的字符串“PARAMETER”,有或没有一些默认值,但从不传递 curl 启动的参数。我可能缺少什么?

【问题讨论】:

    标签: curl post jenkins parameterized


    【解决方案1】:

    我正在使用:

    curl -X POST -u "user" "http://myjenkins/path/to/my/job/buildWithParameters?GERRIT_REFNAME=feature/retry&goal=package"
    

    在这里,它就像一个魅力。

    注意您粘贴的 URL 中“PARAMETER”前面的“=”。

    【讨论】:

    • 谢谢你,不必要的“=”确实是问题所在。现在很好用
    • 有没有办法把参数放在正文而不是url?
    【解决方案2】:

    使用 curl 表单参数 (-F param1=value1) 解决了这个问题:

    # parameters need to be passed via: -F param1=value1 -F param2=value2 ...
    curl -X POST http://myJenkins/job/testjob/buildWithParameters?token=<myToken> -F param1=value1
    

    我遇到了同样的问题,以上都没有帮助。当我通过 url 参数 传递参数时,作业被触发,但 url 参数未传播

    # job is triggered but parameters are not propagated
    curl -X POST http://myJenkins/job/testjob/buildWithParameters?token=<myToken>&param1=value1
    

    【讨论】:

    • 谢谢! “作业已触发,但参数未传播。”这让我发疯了!我可以让“构建”端点接受带有 --data-urlencode 的参数。但随后位置标题将成为主要作业页面,我无法获取用于轮询的作业 ID。
    【解决方案3】:

    我使用下面的命令来传递多个参数。

    curl -X POST "https://myjenkins.com/job/jobname/buildWithParameters?token=developer&name=abc&userid=CFDH123&mail=abc@gmail.com"
    

    注意:参数名称区分大小写。

    【讨论】:

    • 有没有办法把参数放在正文而不是url?
    【解决方案4】:

    请尝试以下方法:

    curl -X POST http://<jenkins URL>/jenkins/job/TESTS/job/<Your job's Name>/buildWithParameters \
      --user <Jenkins account>:<account's TokenID>  \
      --data token=<job's token (if required)> \
      --data parameter=some_value
      ...
      --data MessageTextParameter=My%20Text
    

    【讨论】:

    • 我执行 curl -X POST "JENKINS_URL/job/PROJECT_NAME/job/BRANCH_NAME/buildWithParameters" --user "JENKINS_USR:JENKINS_PSSW" --data backend=true --data frontend=true 但返回 This build is not parameterized! :(
    • 你的jenkins作业是否真的配置了参数?
    【解决方案5】:

    看起来 Jenkins Confluence 页面中有一个拼写错误,同时调用 Jenkins url 传递参数作为 JSON 有效负载..https://wiki.jenkins.io/display/JENKINS/Remote+access+API 尝试使用 url 后缀作为 build 而不是 buildWithParameters 并且它正在工作..

    curl -X POST -u "user:token/password" "http://myjenkins/path/to/my/job/build --data-urlencode json='{"parameter": [{"name":"GERRIT_REFNAME", "value":"feature/重试"},{"name":"goal", "value":"package"}]}'

    【讨论】:

      【解决方案6】:

      当我尝试时

      curl -X POST http://icm.git:faedc992afcd1ea4db3da6809435117a@10.221.31.36:8080/job/1_TODO_Get_Submit_Request_With_Dependency_Test/buildWithParameters?PARAMETER=1494390553639
      

      curl -X POST -u "icm.git:lge123" -H Jenkins-Crumb:faedc992afcd1ea4db3da6809435117a http://10.221.31.36:8080/job/1_TODO_Get_Submit_Request_With_Dependency_Test/buildWithParameters?PARAMETER=1494390553639
      

      两者都触发了 Jenkins Job > 1_TODO_Get_Submit_Request_With_Dependency_Test 但 Jenkins 日志中的参数显示参数 REQUESTID = -1 的默认值。

      Jenkins 或 CURL url 有什么问题?

      + echo '4.2.25(1)-release'
      4.2.25(1)-release
      + echo
      
      + echo 26
      26
      + echo '#26'
      #26
      + echo 1_TODO_Get_Submit_Request_With_Dependency_Test
      1_TODO_Get_Submit_Request_With_Dependency_Test
      + echo 1_TODO_Get_Submit_Request_With_Dependency_Test
      1_TODO_Get_Submit_Request_With_Dependency_Test
      + echo REQUESTID = -1
      REQUESTID = -1
      

      【讨论】:

        【解决方案7】:

        我也在尝试发布以下 curl 命令,但它没有发布。

        curl -X POST -v https://JENKINS_SERVER/job/JOBNAME/buildWithParameters --user foo:8382 --data-urlencode json='{"parameter": [{"name": "registration_action","value": "DNS_only"},{"name": "entries","value": "add, hostname01.local.example.com, 192.168.1.1/24\nremove, hostname01.local.example.com, 192.168.1.1/24/\n" }]}'
        

        它创建作业但不传递变量。不确定,我做错了什么。

        【讨论】:

          【解决方案8】:

          我发现这非常令人困惑和不一致,尤其是在想要在正文中传递参数时。以下是我发现使用参数构建的最佳方法(传递一些参数并使用指定的默认值)。

          curl -X POST -u "user:pass" \
          http://myjenkinsserver/jenkins/job/testjob/buildWithParameters \
          -F PARAMETER=somenumber 
          

          我还尝试了以下方法并提及它们,因为它们出现在各种文档中,但似乎无法正常工作/如所述。

          以下提交构建(build vs buildWithParameters URL)并传递参数但不使用任何其他默认参数。

          curl -X POST -u "user:pass" \
          http://myjenkinsserver/jenkins/job/testjob/build \
          --data-urlencode json='{"parameter": [{"name":"PARAMETER", "value":"somenumber"}]}'
          

          下面看起来应该可以,但是我发现参数没有正确传递。

          curl -X POST -u "user:pass" \
          http://myjenkinsserver/jenkins/job/testjob/build \
          --data-urlencode json='{"parameter": [{"name":"PARAMETER", "value":"somenumber"}]}'
          

          【讨论】:

            【解决方案9】:

            以下两种格式都适合我。

            curl -X POST http://hostname:8080/job/first_pipeline/build --user siebelcrm:xxxxxx --data-urlencode json='{"parameter": [{"name":"Greetings", " value":"New123"}]} ' -H "Jenkins-Crumb:xxxxx"

            curl -X POST http://hostname:8080/job/first_pipeline/buildWithParameters?Greetings=New1 --user Admin:xxxxx --data-urlencode json=' ' -H "Jenkins-Crumb:xxxxx"

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2019-08-28
              • 2016-11-04
              • 2023-01-30
              • 2018-05-03
              • 2021-01-21
              • 1970-01-01
              • 2014-09-12
              • 1970-01-01
              相关资源
              最近更新 更多