如何使用ajax触发jenkins作业构建?

时间:2015-04-14 01:59:28

标签: ajax jenkins

我正在写一个网页,让其他人可以触发一些工作'使用jenkins中的参数进行构建。所以我使用ajax发送POST请求:

var urlString = "http://localhost:8080/job/myjob/buildWithParameters";

$.post(
    urlString,
    {myParam:"there is some data"},
    function(data)
    {
        alert(data);
    },
    "json"
);

但我收到了Http 403的回复:

  

XMLHttpRequest无法加载http://localhost:8080/job/myjob/buildWithParameters。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' http://localhost'因此不允许访问。响应的HTTP状态代码为403。

我知道跨网站问题,但我无法从Google搜索任何有用的信息,ajax可以做这个工作吗?

更新: 我找到了similar question

所以我将我的代码更新为:

$.ajax({                              
    type: "POST",
    url: urlString,
    dataType: 'jsonp',
    data: {},
    beforeSend: function(xhr){
        xhr.setRequestHeader("Authorization", "Basic " + btoa("admin:123456"));
    },
    success: function(data) {
    },             
    complete: function(xhr, statusText){
    }                                                                 
});

我可以确认用户名和密码是否正确,但我得到405 Method Not Allowed。有什么不对吗?

2 个答案:

答案 0 :(得分:1)

将您的网页放在$ JENKINS_HOME目录下的userContent文件夹中。然后在浏览器中打开$ JENKINS_URL / userContent / yourwebpage.html。现在页面中的javascript是从ajax调用的同一个来源加载的,所以应该允许它没有CORS技巧。

答案 1 :(得分:0)

Jenkins想要POST而不是GET HTTP请求,JSONP请求是GET:你不能这样做:D

您可以尝试以这种方式:

  1. 按照here所述的AJP绑定启动jenkins

  2. 将Apache2 httpd配置为reverse proxy for the Jenkins AJP

  3. 按照here所述强制执行A​​pache2响应标头以启用CORS

  4. 最后,您可以直接使用POST而不是JSONP。

    玩XSS:D