PHP cURL POST 带参数的 Jenkins 作业

PHP cURL POST Jenkins job with parameters

通过以下 PHP 脚本触发 Jenkins job

<?php

$testrun_id = "1744";
$cmd = "curl -X POST http://build:f9280f75396f83a0@mobile-jenkins.domain.com:8080/job/android-test/build --data-urlencode  json='{\"parameter\": [{\"name\":\"POST_RESULTS\", \"value\":\"true\"}, {\"name\":\"RUN_ID\", \"value\":\"{$testrun_id}\"}, {\"name\":\"CHECK_NAME\", \"value\":\"SampleAutomatedPlan\"}]}'";
exec($cmd,$result);

?>

此脚本 运行 在 Mac 上成功执行,并且确实触发了 jenkins 作业。如何使此脚本在 Windows 上运行?当我在 Windows 上 运行 以上 PHP 脚本时出现以下错误?

curl is already installed on windows machine。另外,在 PHP 中是否有更好的 cURL 方法?看看这个:http://php.net/manual/en/book.curl.php,有人可以根据我在上面的 PHP 脚本 (对于 Windows)?在我的脚本中基于 curl 命令的示例将是理想的。

你应该从这里查看示例 http://php.net/manual/en/curl.examples.php

下面是您案例的代码,

$url = "http://build:f9280f75396f83a0@mobile-jenkins.domain.com:8080/job/android-test/buildWithParameters";     
$data = "POST_RESULTS=true&RUN_ID=".$testrun_id."&CHECK_NAME=SampleAutomatedPlan";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 

// $output contains the output string
$output = curl_exec($ch);

// close curl resource to free up system resources
curl_close($ch);    

您需要为 JSON

设置内容类型
curl -H "Content-Type: application/json" -X POST http://build:f9280f75396f83a0@mobile-jenkins.domain.com:8080/job/android-test/build --data-urlencode  json='{\"parameter\": [{\"name\":\"POST_RESULTS\", \"value\":\"true\"}, {\"name\":\"RUN_ID\", \"value\":\"{$testrun_id}\"}, {\"name\":\"CHECK_NAME\", \"value\":\"SampleAutomatedPlan\"}]}'";

只需确保您没有任何混合匹配值。