使用REST在jenkins中的文件夹中检查作业

时间:2017-11-16 09:58:09

标签: rest jenkins

如果没有文件夹,我可以检查作业是否存在:

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

我无法解决的问题是,当我使用文件夹插件时,如何检查文件夹中的作业。

e.g。 http://myJenkinsInstance:8080/job/MyFolder/job/TestJob101/

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

返回:

‘/’ is an unsafe character

2 个答案:

答案 0 :(得分:5)

要访问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,具体取决于作业是否已存在。

2。编程语言(如C#)

转到您的文件夹网址并附加api\json,如下所示:

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包将其反序列化:

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

如果json变量包含有效的json,那么您知道该文件夹存在。

在Jenkins LTS 2.60.3和2.90上进行了测试。

答案 1 :(得分:0)

文件夹位需要位于URL中,而不是查询字符串:

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

在Jenkins 2.32.3上测试。