2017-11-16 14 views
2

を使用してジェンキンスフォルダ内に存在する:チェックする仕事は、私が何もフォルダが存在しない場合、ジョブが存在することを確認することができREST

http://myJenkinsInstance:8080/checkJobName?value=TestJob101

私は何のために私どのようにチェックしますされて動作するようにすることはできませんよ私はフォルダプラグインを使用しているときにフォルダ内のジョブをお願いします。

http://myJenkinsInstance:8080/job/MyFolder/job/TestJob101/

http://myJenkinsInstance:8080/checkJobName?value=job/MyFolder/job/TestJob101/

リターン:

‘/’ is an unsafe character 

答えて

2

Jenkins REST APIにアクセスするには、多くのURLに\api\jsonという接尾辞を追加して、JenkinsがJSONセグメント(存在する場合はそれ以外の場合は404)を返すようにすることができます。 json2csharpのようなツールは、このシナリオでは非常に重要です。消費

方法

1.スクリプト

`curl -XGET 'http://myJenkinsInstance:8080/job/MyFolder/job/TestJob101/api/json' --user user.name:YourAPIToken` 

これは、ジョブが既に存在するかどうかに応じて、200または404のいずれかを返します。

(C#のような)

2.プログラミング言語はそうのようなapi\jsonをお使いのフォルダのURLにアクセスして、追加します。

http://myJenkinsInstance:8080/job/MyFolder/job/TestJob101/api/json 

をそのフォルダには、ブラウザ、いくつかのJSONに表示されますが存在する場合、それ以外の場合は404を取得します。jsonをすべてコピーしてjson2csharpに貼り付け、C#を生成します。

次のC#を取得する必要があります:

public class Action 
{ 
    public string _class { get; set; } 
} 

public class Job 
{ 
    public string _class { get; set; } 
    public string name { get; set; } 
    public string url { get; set; } 
    public string color { get; set; } 
} 

public class PrimaryView 
{ 
    public string _class { get; set; } 
    public string name { get; set; } 
    public string url { get; set; } 
} 

public class View 
{ 
    public string _class { get; set; } 
    public string name { get; set; } 
    public string url { get; set; } 
} 

public class RootObject 
{ 
    public string _class { get; set; } 
    public List<Action> actions { get; set; } 
    public string description { get; set; } 
    public string displayName { get; set; } 
    public object displayNameOrNull { get; set; } 
    public string fullDisplayName { get; set; } 
    public string fullName { get; set; } 
    public string name { get; set; } 
    public string url { get; set; } 
    public List<object> healthReport { get; set; } 
    public List<Job> jobs { get; set; } 
    public PrimaryView primaryView { get; set; } 
    public List<View> views { get; set; } 
} 
あなたが何かにRootObjectクラスの名前を変更する必要があり

より多くのあなたは、このコードができたらFolderCheck

のように、コードを読みやすくするために、あなたのコンテキスト内で完全な意味同じURLへのHTTP GET呼び出しを行うことができます。 (注:プログラムでのフォルダ名を代入すると、それはあなたが仕事をしたい任意のフォルダのために働くようになります)ので、Json.NET NuGetパッケージを使用して同じようにdeserialise:

var json = Adapter.Get(url, username, apiKey); 
JsonConvert.DeserializeObject<FolderCheck>(json); 

JSON変数が、その後、有効なJSONが含まれている場合そのフォルダが存在することを知っています。

Jenkins LTS 2.60.3および2.90でテスト済みです。

+0

ありがとうございました。私はC#を使用しています –

0

フォルダのビットがないクエリ文字列、URLにする必要があります:

ジェンキンス2.32.3でテスト

http://my-jenkins-instance:8080/job/MyFolder/checkJobName?value=TestJob101

関連する問題