关于php:使用CURL / HTTP POST中的参数构建Jenkins作业

Build Jenkins job with parameters from CURL / HTTP POST

我正在发出AJAX请求来调用PHP(preferably) or similar文件,并希望该代码成为trigger jenkins job remotely。另外,我想将parameters传递给将被触发的作业。例如,连同AJAX请求一样,我的data将保存一些变量的值,例如job名称,runid等,如下所示:

1
2
3
4
5
6
7
$.ajax({
      url: 'runjob.php',
      type:"GET",
      data: { job : job, runid : id },
      success: function(data) {
....
}

根据https://wiki.jenkins-ci.org/display/JENKINS/Remote access API,我在下面编写了一个小的PHP代码:

runjob.php

1
2
3
4
5
6
7
 <?php

curl -X POST http://mobile-jenkins.testzynx.com:8080/job/trserver-git/build \\
  --data token=12981209380192380129802 \\
  --data-urlencode json='{"parameter": [{"name":"id","value":runid}, {"name":"profile","value":"tr-flex.properties"}]}'

?>

其中runid是我将在AJAX请求代码中使用的var,而trserver-git是jenkins作业的名称。

遵循实际URL中所示的语法:

网址上方的

语法

1
2
3
4
5
curl -X POST JENKINS_URL/job/JOB_NAME/build \\
  --data token=TOKEN \\
  --data-urlencode json='{"parameter": [{"name":"id","value":"123"}, {"name":"verbosity","value":"high"}]}'

?>

其中令牌是我从Jenkins的属性中获得的用户API令牌。

但是,此代码(runjob.php)似乎不起作用,并且I am not able to trigger jobs and hence no parameters

以后,一旦我能够使用传递的参数来触发作业,I want to read those parameters to a shell scipt that runs as a part of jenkins job.例如,

./runTest.sh -Drunid=$id -Dprofile=$profile类似于maven参数。

关于如何实现此远程参数化jenkins作业触发器和读取参数方案,有一个很好的例子吗? PHP preferred


这是我的解决方案,对我有用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$url ="http://build:[email protected]: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);