使用 Javascript 启动 Jenkins 作业
Starting a Jenkins Job using Javascript
有没有人有在 Java 脚本中使用 auth 和参数化启动 jenkins 作业的示例?
它就像一个 curl post,但我不确定该怎么做,而且我找不到任何传递用户名和令牌以及参数的示例。
您可以使用 jenkins
npm library 使用特定用户对 npm 执行操作:
import Jenkins = require('jenkins');
const jenkins
Jenkins({ baseUrl: `https://${ username }:${ password }@${ urlToJenkinsInstance }`, crumbIssuer: true })
.then((_jenkins) => {
jenkins = _jenkins;
return new Promise((resolve, reject) => {
// start building a job
jenkins.job.build({
name: jobName,
// put all the parameters here:
parameters: {
PARAM1: 'hello',
PARAM2: 'world'
}
}, function (err, data) {
if (err) { return reject(err); }
resolve(data);
});
});
})
.then((queueId) => {
console.log('job queueId: ', queueId);
})
.catch(printErrorAndExit);
如果需要继续监控流程,作业加入队列后,需要等待作业启动,这会在队列项中添加一个jobId
使用jenkins.queue.item(queueId, callback)
.
然后,您可以监视实际作业并检查它何时完成。
在下面的代码中,我定义了两个函数 convertQueueIdToBuildId
和 waitForJobToFinish
。
convertQueueIdToBuildId
这将等待队列项目获得永久 ID 以启动并检查作业状态。我定义了每 5 秒检查一次的时间间隔。
waitForJobToFinish
这将获得永久 jobId
并每 5 秒检查一次作业的状态。如果它是 SUCCESS
,我们可以 resolve promise,如果我们得到 ABORTED
或 FAILURE
,我们就会错误地表明某些事情进展不顺利。我们可以玩弄什么使承诺失败或根据使用情况解决。
// continuing the previous promise chain:
.then((queueId) => convertQueueIdToBuildId(jenkins, jobName, queueId, 5000))
.then((buildId) => waitForJobToFinish(jenkins, jobName, buildId, 5000))
.catch(printErrorAndExit);
function convertQueueIdToBuildId(jenkins, jobName, queueId, interval, spinner) {
return convertQueueIdToBuildIdInner(queueId)
.then((data) => {
if (isNumber(data)) {
return data;
}
return waitFor(interval)
.then(() => convertQueueIdToBuildId(jenkins, jobName, queueId, interval, spinner));
});
function convertQueueIdToBuildIdInner(queueId) {
return new Promise((resolve, reject) => {
jenkins.queue.item(queueId, (err, data) => {
if (err) {
return reject(err);
}
resolve(data && data.executable && data.executable.number);
});
});
}
}
function waitForJobToFinish(jenkins, jobName, buildId, interval) {
return waitForJobToFinishInner(jobName)
.then((data) => {
if ('SUCCESS' === data.result) {
return data;
}
if (['ABORTED', 'FAILURE'].indexOf(data.result) > -1) {
const errorMessage = `JENKINS[${ jobName }:${ buildId }] job ${ data.result }`;
throw new Error(errorMessage);
}
return waitFor(interval)
.then(() => waitForJobToFinish(jenkins, jobName, buildId, interval));
});
function waitForJobToFinishInner(jobName) {
return new Promise((resolve, reject) => {
jenkins.build.get(jobName, buildId, function (err, data) {
if (err) {
return reject(err);
}
resolve(data);
});
});
}
}
function waitFor(interval) {
return new Promise((resolve) => setTimeout(() => resolve(), interval));
}
有没有人有在 Java 脚本中使用 auth 和参数化启动 jenkins 作业的示例?
它就像一个 curl post,但我不确定该怎么做,而且我找不到任何传递用户名和令牌以及参数的示例。
您可以使用 jenkins
npm library 使用特定用户对 npm 执行操作:
import Jenkins = require('jenkins');
const jenkins
Jenkins({ baseUrl: `https://${ username }:${ password }@${ urlToJenkinsInstance }`, crumbIssuer: true })
.then((_jenkins) => {
jenkins = _jenkins;
return new Promise((resolve, reject) => {
// start building a job
jenkins.job.build({
name: jobName,
// put all the parameters here:
parameters: {
PARAM1: 'hello',
PARAM2: 'world'
}
}, function (err, data) {
if (err) { return reject(err); }
resolve(data);
});
});
})
.then((queueId) => {
console.log('job queueId: ', queueId);
})
.catch(printErrorAndExit);
如果需要继续监控流程,作业加入队列后,需要等待作业启动,这会在队列项中添加一个jobId
使用jenkins.queue.item(queueId, callback)
.
然后,您可以监视实际作业并检查它何时完成。
在下面的代码中,我定义了两个函数 convertQueueIdToBuildId
和 waitForJobToFinish
。
convertQueueIdToBuildId
这将等待队列项目获得永久 ID 以启动并检查作业状态。我定义了每 5 秒检查一次的时间间隔。
waitForJobToFinish
这将获得永久 jobId
并每 5 秒检查一次作业的状态。如果它是 SUCCESS
,我们可以 resolve promise,如果我们得到 ABORTED
或 FAILURE
,我们就会错误地表明某些事情进展不顺利。我们可以玩弄什么使承诺失败或根据使用情况解决。
// continuing the previous promise chain:
.then((queueId) => convertQueueIdToBuildId(jenkins, jobName, queueId, 5000))
.then((buildId) => waitForJobToFinish(jenkins, jobName, buildId, 5000))
.catch(printErrorAndExit);
function convertQueueIdToBuildId(jenkins, jobName, queueId, interval, spinner) {
return convertQueueIdToBuildIdInner(queueId)
.then((data) => {
if (isNumber(data)) {
return data;
}
return waitFor(interval)
.then(() => convertQueueIdToBuildId(jenkins, jobName, queueId, interval, spinner));
});
function convertQueueIdToBuildIdInner(queueId) {
return new Promise((resolve, reject) => {
jenkins.queue.item(queueId, (err, data) => {
if (err) {
return reject(err);
}
resolve(data && data.executable && data.executable.number);
});
});
}
}
function waitForJobToFinish(jenkins, jobName, buildId, interval) {
return waitForJobToFinishInner(jobName)
.then((data) => {
if ('SUCCESS' === data.result) {
return data;
}
if (['ABORTED', 'FAILURE'].indexOf(data.result) > -1) {
const errorMessage = `JENKINS[${ jobName }:${ buildId }] job ${ data.result }`;
throw new Error(errorMessage);
}
return waitFor(interval)
.then(() => waitForJobToFinish(jenkins, jobName, buildId, interval));
});
function waitForJobToFinishInner(jobName) {
return new Promise((resolve, reject) => {
jenkins.build.get(jobName, buildId, function (err, data) {
if (err) {
return reject(err);
}
resolve(data);
});
});
}
}
function waitFor(interval) {
return new Promise((resolve) => setTimeout(() => resolve(), interval));
}