一尘不染

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

jenkins

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

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

阅读 284

收藏
2020-07-25

共1个答案

一尘不染

要访问Jenkins REST
API,您可以\api\json在许多URL中添加后缀,这将导致Jenkins返回您可以使用的JSON段(如果存在,否则为404)。在这种情况下,诸如json2csharp之类的工具非常宝贵。

消费方式

1.脚本编写

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

根据作业是否已存在,这将返回200或404。

2.编程语言(如C#)

转到您的文件夹URL并添加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上进行了测试。

2020-07-25