2

ユーザーがドロップボックスからパラメーターを選択し、ジェンキンスでジョブをリモートで作成/構築できる、PHPを使用してWebページを作成する必要があります。

CURL を使用して jenkins に正常にログインしましたが、ジョブを作成する方法や Web ページから config.xml を構成する方法がわかりません。
助言がありますか?

コード

<---login.php--->

<form action="login_jenkins.php" method="post">
<fieldset>
    <input type="text" name="username">
    <input name="password">
    <button>
    Login
    </button>           
</fieldset>

<---login_jenkins.php--->

<?php
$url="http://jenkinurl/";
$username=$_POST['username'];
$password=$_POST['password'];
$cookies = '/tmp/cookies.txt';
$ch = curl_init(); 
curl_setopt ($ch, CURLOPT_TIMEOUT, 40); 
curl_setopt($ch, CURLOPT_HEADER, 1);  
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE);
curl_setopt($ch, CURLOPT_COOKIEJAR, '$cookie');
curl_setopt($ch, CURLOPT_COOKIEFILE, '$cookie');
curl_setopt($ch, CURLOPT_COOKIE, session_name() . '=' . session_id());
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US;           rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"); 
curl_setopt ($ch, CURLOPT_URL, $url);  
curl_setopt($ch, CURLOPT_HTTPHEADER,array("Authorization: Basic " . base64_encode($username . ":" . $password)));
$result = curl_exec ($ch); 
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
if ($http_code=='200'){
header('Location: fill_job_form.php');
}
if (!$result) { 
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
    curl_close($ch); // make sure we closeany current curl sessions 
    die($http_code.' Unable to connect to server. Please come back later.'); 
} 

?>

<---fill_job_form.php--->

<form action="createjob.php" method="post">
  <fieldset>
    tags for filling job form goes here
    <button>
      Login
    </button>           
 </fieldset>

<---createjob.php--->

<?php
$url="http://jenkin url/createItem?name=mynewtestjob"; 
$input1=$_POST['input1'];
//get all other inputs and created request data xml 
// hard coded for now....
$req_data="<?xml version='1.0' encoding='UTF-8'?><project><actions/><description></description><keepDependencies>false</keepDependencies><properties/><scm class='hudson.scm.NullSCM'/><canRoam>true</canRoam><disabled>false</disabled><blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding><blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding><triggers class='vector'/><concurrentBuild>false</concurrentBuild><builders/><publishers/><buildWrappers/></project>";
$ch = curl_init(); 
curl_setopt ($ch, CURLOPT_TIMEOUT, 40); 
curl_setopt($ch, CURLOPT_HEADER, 1);  
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt( $ch, CURLOPT_COOKIE, '/tmp/cookies.txt' );
curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml"));
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req_data);

$result = curl_exec ($ch); 
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
print_r($http_code);
print_r($result);
//prints :The requested URL /login was not found on this server.
?>

正常にログインできましたが、job.php の作成時に次のエラーが表示されます: 要求された URL /login がこのサーバーで見つかりませんでした。しかし、login_jenkin と createjob.php を一緒にマージし、すべてのユーザー フォーム データをハード コードすると、非常にうまく機能します。

任意のアイデア、なぜこれが起こっているのですか?

4

1 に答える 1

5

Jenkins は、ジョブをトリガーするための API 呼び出しをサポートしています。Remote Access API と呼ばれます。 https://wiki.jenkins-ci.org/display/JENKINS/Remote+access+APIを参照してください。

パラメータのないジョブの場合、HTTP GET を実行するだけで済みます

JENKINS_URL/ジョブ/ジョブ名/build?token=TOKEN

TOKEN はジョブ構成で設定されます。

ただし、パラメーターがあるため、JSON ペイロードで POST する必要があります。cURL を使用して PHP でこれを行う方法の例は、http://davidwalsh.name/curl-postの David Walsh によって非常によく説明されています。

したがって、Web ページからフォーム フィールドを取得し、送信時にヒットしたいジョブに適切な API を呼び出します。

于 2013-05-30T15:31:22.847 に答える