【问题标题】:Accessing Jenkins API using Javascript使用 Javascript 访问 Jenkins API
【发布时间】:2020-01-17 03:41:14
【问题描述】:

如题,

我尝试使用Jenkins library 访问 Jenkins API(Jenkins 最新版本,即 2.204.1)。我尝试使用 React 中的以下代码调用以检索构建日志

import Jenkins from 'jenkins'

// ngrok is used to expose Jenkins's URL to the internet, so that Github webhooks can connect properly to the Jenkins.
const jenkinsConfig = {
    baseUrl : 'http://username:password@URLToMyJenkins.ngrok.io', 
    crumbIssuer: true
};
const _jenkins = Jenkins(jenkinsConfig);

useEffect(() => {
    const getBuildLog = () => {
        runner.build.get({
                name: 'jobname',
                number: 1
            }, (err, data) => {
            if (err){
                console.log('Its on err!!! ::: ', err);
            } 

            console.log('Can i see what is the data ::: ', data);
        });
    }
}, []);

当我运行上述代码时,它会抛出 CORS 错误,但在 ngrok 控制台上,我可以看到 API 已成功调用(状态 200)

OPTIONS /job/GHTest2/1/api/json                                           200 OK

在网络控制台上

Access to fetch at 'http://URLToMyJenkins.ngrok.io/job/GHTest2/1/api/json' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

我安装了 Jenkins CORS-Filter-Plugin,并将以下配置放在上面

Access-Control-Allow-Origins - http://localhost:3000, http://URLToMyJenkins.ngrok.io
Access-Control-Allow-Methods - GET, PUT, OPTIONS
Access-Control-Allow-Headers - origin, Content-Type, X-Requested-With
Access-Control-Expose-Headers - origin, *
Access-Control-Max-Age - 999

甚至禁用了 Jenkins 中的安全性和 CSRF 保护,仍然没有工作并不断遇到 CORS 错误。

我在这里做错了什么吗,或者 Jenkins API 根本无法使用 Javascript 从前端访问?

【问题讨论】:

  • 检查您的浏览器收到的响应,它是否以正确的Access-Control-Allow-Origin 标头响应?
  • @ZmenHu 在检查器的网络选项卡上,响应选项卡为空。在 headers 选项卡上,显示请求成功(200)。
  • 那么标题选项卡是否包含一个名为 Access-Control-Allow-Origin 的标题?标头需要通过 CORS 机制。你可以在这里查看link

标签: javascript reactjs jenkins jenkins-api


【解决方案1】:

通过在 Jenkins 的 CORS 配置中设置以下内容来解决这个问题

Access-Control-Allow-Headers - Authorization

这样,上面的所有代码终于可以按预期工作了。

【讨论】:

    猜你喜欢
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多