从 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)中配置的作业

从 AngularJS 指令访问属性

Django/AngularJS:如何从我的 AngularJS 脚本访问我的 Python 上下文项

Jenkins与代码上线解决方案

AngularJs,路由,创建多个路由的问题

如何从模板脚本访问 AngularJS 变量