如果没有文件夹,我可以检查作业是否存在:
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
答案 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上测试。