请用Javascript写一段调用Jenkins job的示例代码,需要考虑Jenkins CSRF Protection 和 CORS 配置
时间: 2023-09-17 09:05:33 浏览: 104
jenkins-job-dsl-sample:一个示例,用于描述如何使用job-dsl插件使jenkins成为代码工作
### 回答1:
下面是一段使用Javascript调用Jenkins job并考虑Jenkins CSRF保护和CORS配置的示例代码:
```javascript
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://jenkins-server/job/job_name/build", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.setRequestHeader("Jenkins-Crumb", crumb);
xhr.withCredentials = true;
xhr.onreadystatechange = function() {
if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 201) {
console.log("Build triggered successfully.");
}
};
xhr.send("param1=value1¶m2=value2");
```
在上面的代码中,`crumb` 变量是 Jenkins Crumb,需要通过其他方式获取(如请求 `http://jenkins-server/crumbIssuer/api/json` 获取)。而请求的参数(如 "param1=value1¶m2=value2")是根据具体的 Jenkins job 所需要的参数来定义的。
需要注意的是,Jenkins的CORS配置需要在Jenkins服务器上进行,才能正常调用。如果CORS配置未正确配置,在使用上述代码可能会收到类似“No 'Access-Control-Allow-Origin' header is present on the requested resource”的错误消息。
### 回答2:
要在Javascript中调用Jenkins job,需要考虑Jenkins的CSRF保护和CORS配置。首先,CSRF保护是Jenkins默认启用的,它会要求每个请求都包含一个有效的crumb token。而CORS配置是为了避免跨域请求的限制。
以下是一段使用Javascript调用Jenkins job的示例代码,同时处理了CSRF保护和CORS配置问题:
```javascript
// 1. 获取CSRF token
function getCSRFToken(callback) {
var xhr = new XMLHttpRequest();
xhr.open('GET', '/crumbIssuer/api/json', true); // crumbIssuer接口用于获取CSRF token
xhr.onload = function() {
if (xhr.status === 200) {
var response = JSON.parse(xhr.responseText);
var crumb = response.crumb;
var crumbToken = response.crumbRequestField;
callback(crumb, crumbToken);
}
};
xhr.send();
}
// 2. 发送请求执行Jenkins job
function executeJenkinsJob() {
getCSRFToken(function(crumb, crumbToken) {
var xhr = new XMLHttpRequest();
var url = '<Jenkins Job的URL>';
xhr.open('POST', url, true);
xhr.setRequestHeader(crumbToken, crumb); // 添加CSRF token到header
xhr.withCredentials = true; // 允许发送包含凭据的请求,以便进行身份验证
xhr.onload = function() {
if (xhr.status === 200) {
console.log('Jenkins job执行成功!')
} else {
console.error('Jenkins job执行失败!');
}
};
xhr.onerror = function() {
console.error('请求失败!');
};
xhr.send();
});
}
executeJenkinsJob();
```
在上述代码中,`getCSRFToken`函数用于获取Jenkins的CSRF token,并将token和crumbRequestField传递给回调函数。然后,在`executeJenkinsJob`函数中,我们通过创建一个XMLHttpRequest对象,设置请求的URL、headers,并发送请求来执行Jenkins job。设置`xhr.withCredentials`为true是为了让浏览器发送包含凭据的请求,以进行身份验证。
值得注意的是,如果需要跨域调用Jenkins job,还需要在Jenkins服务器上进行CORS配置,允许来自指定域的请求。具体配置可参考Jenkins的CORS插件文档或相关文档。
### 回答3:
下面是一个使用JavaScript调用Jenkins job的示例代码,同时考虑了Jenkins CSRF Protection和CORS配置:
```
// 导入必要的模块
const fetch = require('node-fetch');
const btoa = require('btoa');
// 定义Jenkins的URL和认证信息
const jenkinsUrl = 'http://jenkins.example.com';
const username = 'your_username';
const password = 'your_password';
// 定义要调用的Jenkins job的信息
const jobName = 'your_job_name';
const buildParameters = {
param1: 'value1',
param2: 'value2'
};
// 执行调用Jenkins job的函数
async function executeJenkinsJob() {
try {
// 获取CSRF Crumb
const csrfCrumb = await fetch(`${jenkinsUrl}/crumbIssuer/api/json`, {
method: 'GET',
headers: {
'Authorization': `Basic ${btoa(`${username}:${password}`)}`
}
}).then(res => res.json());
// 配置CORS请求头
const headers = {
'Authorization': `Basic ${btoa(`${username}:${password}`)}`,
'Jenkins-Crumb': csrfCrumb.crumb
};
// 构建请求URL
const buildUrl = `${jenkinsUrl}/job/${jobName}/buildWithParameters?${new URLSearchParams(buildParameters).toString()}`;
// 发起POST请求执行Jenkins job
const response = await fetch(buildUrl, {
method: 'POST',
headers: headers
});
// 检查请求响应状态码
if (response.ok) {
console.log('Jenkins job执行成功!');
} else {
console.error('Jenkins job执行失败!');
}
} catch (error) {
console.error('执行Jenkins job时发生错误:', error);
}
}
// 调用executeJenkinsJob函数
executeJenkinsJob();
```
在这个示例代码中,我们首先使用`node-fetch`模块发送HTTP请求,通过GET请求获取Jenkins的CSRF Crumb。然后,我们构建带有适当请求头的POST请求,以调用Jenkins job并传递构建参数。最后,我们根据响应状态码判断Jenkins job的执行结果。
请注意,示例代码中的`jenkinsUrl`、`username`和`password`变量需要根据实际情况进行修改。此外,这个示例代码在Node.js环境下运行,如果在浏览器中运行,可能需要进行一些额外的配置。
阅读全文