使用 Javascript 访问 Jenkins API
Accessing Jenkins API using Javascript
如题,
我尝试使用 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 从前端访问?
通过在 Jenkins 的 CORS 配置上设置以下内容设法解决了这个问题
Access-Control-Allow-Headers - Authorization
至此,以上所有代码终于可以正常运行了。
如题,
我尝试使用 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 从前端访问?
通过在 Jenkins 的 CORS 配置上设置以下内容设法解决了这个问题
Access-Control-Allow-Headers - Authorization
至此,以上所有代码终于可以正常运行了。