2017-09-15 8 views
2

私たちのアプリケーション用に統一されたCICDプロセスを作成しようとしていますが、これは本質的には使用されているcURL関数のラッパーである(これは文書化されていない)Jenkins-PHP APIリモートWebサイトにアクセスするためのものです。ここでPHPを使用したJenkinsリモートAPIへの接続

は私のテスト接続である:これは返す

$uname = ''; 
$pword = ''; 
$api_token = ''; // not yet used 

$jenkins = new \JenkinsKhan\Jenkins("http://$uname:[email protected]/jobs"); 
var_dump($jenkins->isAvailable()); 

ブール値(false)を

isAvailable()機能を、ジェンキンスAPIクラスの一部は次のとおりです。

public function isAvailable() 
{ 
    $curl = curl_init($this->baseUrl . '/api/json'); 
    curl_setopt($curl, \CURLOPT_RETURNTRANSFER, 1); 
    curl_exec($curl); 

    if (curl_errno($curl)) { 
     return false; 
    } else { 
     try { 
      $this->getQueue(); 
     } catch (RuntimeException $e) { 
      //en cours de lancement de jenkins, on devrait passer par là 
      return false; 
     } 
    } 

    return true; 
} 

編集:私は関数内で条件付きにecho curl_error($curl);を追加し、それを返します:私は実行しているWebサーバとジェンキンスインスタンスである:

は、ホスト%マダ

NOTEは解決できませんでした。同じネットワークとJenkinsインスタンスがping可能です。

this oneのような類似したスタックオーバーフローに関する未回答の質問がありましたが、Jenkinsインスタンスへの接続の問題に直接対処するものはありません。

URL文字列を変更して(ユーザー名を削除し、パスワードをAPIトークンに置き換えるなど)、認証エラーが最大で403件(アクセスが拒否されました)が最低限になるため、私はいくつかの前進をしていますが、私はJenkinsのインスタンスで実際の認証が行われないと信じています。

私はここで何かが分かりませんか? JenkinsリモートAPIへの実際の接続を作成するにはどうすればよいですか?

+0

'jenkins.svc.local/jobs/api/json'ではなく' jenkins.svc.local/jobs/api/json'とヒットするようです(コンストラクタのURLが間違っています) –

+0

リモートAPI用のドキュメントでは、URLに '/ api/json'を加えて@DarenChandisinghをヒットする必要があると言われます。どうしてURLが間違っていると思いますか? BTWは、さらなるエラー情報で質問を編集しました。 –

+0

jenkins.svc.local/** jobs **を使用しているので間違っていると思いますが、APIがルートの下に直接存在すると思います。とにかく私のJenkinsサーバー上で実行されます。 (あなたが追加した追加情報はそれ以前にも問題があると示唆していますが) –

答えて

1

JenkinsKahn APIクラスの使用にはいくつか問題があります。私は今年1年間でプロジェクトのメンテナンスが行われていないことを見ていないと自分自身を責めることができます。私の現在のバージョンのJenkinsは正しく応答しませんでしたしかし、それは私にいくつかのヒントを与えました。

でしたエラーを考える:

がホストに

を解決できませんでした私は、私がアクセスしようとしていたホスト文字列を見て開始し、は、文字列にユーザー名とパスワードを入れていると判断しましたホストを解決できないようにしていた(よい質問がありました。単独のホスト文字列をもたらした使用:

はまず

アクセスが拒否されました(403)

を 、これは私がホストに到達したことを意味しますが、私はアクセスできませんでした。その結果、私は、ホスト文字列にユーザー名とパスワードを含めず、cURLに認証をさせるという問題に対処するために、純粋なcURLを書きました。

第2に、WebブラウザのURLに「/ api/json」(件名のJenkinのドキュメントによる)を追加すると、JSON文字列が返されます。だから、私のcURL呼び出しのURLの最後に '/ api/json'を必ず含めています。

$url = "http://jenkins.svc.local/jobs/api/json"; 
$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_USERPWD, "$uname:$pword"); 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTHBASIC); 
$output = curl_exec($ch); 
curl_close($ch); 

print_r(json_decode($output, true)); 

これは、今、私が見てとの対話を期待していた情報の配列を返します。ここでは

は私がなってしまったものです。必要なときにデータを使用し、必要なときにコマンドを実行するだけです。

関連する問題