从 AngularJS 访问 Jenkins API
Posted
技术标签:
【中文标题】从 AngularJS 访问 Jenkins API【英文标题】:Accessing Jenkins API from AngularJS 【发布时间】:2013-11-03 11:03:25 【问题描述】:我正在尝试从 Jenkins 使用 Angularjs 提供的 api rest 中检索有关一项作业构建的信息。
Jsonp 实际上在 Jenkins 上被禁用:
Jenkins Security Advisory 2013-02-16
所以这段代码不能工作:
var url = 'http://jenkins-server:8080/job/job-name/api/json?jsonp=callback';
$http.jsonp(url).success(function (data)
console.log(data);
);
投掷:
Uncaught SyntaxError: Unexpected token :
默认情况下不启用 Cors...老实说我找不到安装此插件的方法:
https://github.com/algal/cors https://github.com/jhinrichsen/cors-plugin而且这段代码也不能正常工作
var url = 'http://jenkins-server:8080/job/job-name/api/json'
$http(url: url, method: 'GET').success(function(data)console.log(data))
【问题讨论】:
您使用的是哪个浏览器? IE10 以下不支持 CORS。 @GrantByrne 通过 XDomainRequest 在 IE8 和 IE9 中获得部分支持 我正在使用 chrome。 IE 很烂 ;-) 【参考方案1】:您可以使用这个 CORS 过滤器插件:
https://wiki.jenkins-ci.org/display/JENKINS/Cors+Filter+Plugin
或者您可以使用用户内容机制在 Jenkins 服务器上托管您的 Angular 应用程序:
https://wiki.jenkins-ci.org/display/JENKINS/User+Content
【讨论】:
我们需要在这里为 access-control-allow-header 和 access-control-expose-headers 提供什么值?,如果我正在尝试从 angular 获取请求。谢谢【参考方案2】:现在似乎有一个用于将 JSON 请求列入白名单的插件...只需转到插件,然后搜索 JSON。
安全访问插件。
【讨论】:
【参考方案3】:@Mauro,从 Jenkins 1.537 开始,您可以实现“jenkins.security.SecureRequester”并允许 json 请求工作。
您只需要实现方法 permit(StaplerRequest req, Object bean) 并在那里进行验证,然后返回 true(基于您的验证结果)以允许请求。
完成后,您可以简单地使用您在问题中提到的第一个代码。
示例 SecureRequester 实现:-
import hudson.Extension;
import jenkins.security.SecureRequester;
import org.kohsuke.stapler.StaplerRequest;
@Extension
public class AllowRequest implements SecureRequester
public boolean permit(StaplerRequest req, Object bean)
// A method to validate the request and return the appropriate result
return YOUR_VALIDATION_METHOD(req,bean);
private boolean YOUR_VALIDATION_METHOD(StaplerRequest req, Object bean)
// validation goes here
您需要将其构建为插件并将其安装在您的 Jenkins 设置中才能工作。
【讨论】:
以上是关于从 AngularJS 访问 Jenkins API的主要内容,如果未能解决你的问题,请参考以下文章
如何从另一个jenkins(本地)调用1个jenkins(远程jenkins)中配置的作业