jenkins-cli-node
Version:
Jenkins command line tool
142 lines • 6.06 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const Jenkins = require("jenkins");
const axios_1 = require("axios");
const cache_1 = require("../cache");
const utils_1 = require("../utils");
const plugin_1 = require("./plugin");
var ParameterType;
(function (ParameterType) {
ParameterType["git"] = "git";
ParameterType["checkbox"] = "checkbox";
ParameterType["radio"] = "radio";
})(ParameterType = exports.ParameterType || (exports.ParameterType = {}));
class JenkinsCli {
constructor(options) {
this.jenkins = Jenkins(Object.assign(Object.assign({}, options.config), { promisify: true }));
this.jobCache = new cache_1.JobCache(options.dir);
// this.jenkins.on('log', console.log);
this.cacheJobs = this.jobCache.getJob();
this.axios = axios_1.default.create({
baseURL: options.config.baseUrl,
timeout: 5000000
});
this.axios.interceptors.response.use(response => {
const { status, data, statusText } = response;
if (status === 200) {
return Promise.resolve(data);
}
else {
return Promise.reject(new Error(statusText || 'Error'));
}
}, error => {
return Promise.reject(error);
});
this.setCrumb();
}
// get the crumb
setCrumb() {
return __awaiter(this, void 0, void 0, function* () {
const result = yield this.axios.get("/crumbIssuer/api/json");
this.crumb = {
name: result.crumbRequestField,
value: result.crumb
};
});
}
// get the crumb
fetch(url, data) {
return __awaiter(this, void 0, void 0, function* () {
return this.axios.post(url, data, {
headers: {
[this.crumb.name]: this.crumb.value
}
});
});
}
// get the job list
getJobs() {
return __awaiter(this, void 0, void 0, function* () {
const info = yield this.jenkins.info();
return info.jobs.map(job => job.name);
});
}
// get all parameters for the job
getParameters(selectJob) {
return __awaiter(this, void 0, void 0, function* () {
try {
// get job configuration information
const config = yield this.jenkins.job.get(selectJob);
let parameters = [];
const parameterDefinitions = config.actions[0].parameterDefinitions;
parameterDefinitions.forEach(po => {
switch (po._class) {
case "net.uaznia.lukanus.hudson.plugins.gitparameter.GitParameterDefinition":
parameters.push({
type: ParameterType.git,
key: po.name,
description: po.description,
value: po.name
});
break;
case "hudson.model.ChoiceParameterDefinition":
parameters = parameters.concat(plugin_1.getParametersByRadio(po));
break;
case "com.cwctravel.hudson.plugins.extended__choice__parameter.ExtendedChoiceParameterDefinition":
parameters = parameters.concat(plugin_1.getParametersByCheckbox(po));
break;
default:
break;
}
});
// If it is git, get the branch from the remote
for (const p of parameters) {
if (p.type === ParameterType.git) {
const result = yield this.fetch(`/job/${selectJob}/descriptorByName/net.uaznia.lukanus.hudson.plugins.gitparameter.GitParameterDefinition/fillValueItems?param=${p.value}`, {});
p.value = result.values.map(k => k.value);
}
}
return parameters;
}
catch (err) {
utils_1.printError(err);
return [];
}
});
}
// todo: Unable to get the latest job queue when a single job takes a lot of time
build(selectJob, parameters) {
return __awaiter(this, void 0, void 0, function* () {
yield this.jenkins.job.build({ name: selectJob, parameters });
this.jobCache.refreshJob({
name: selectJob,
parameters
});
return yield this.jenkins.job.get(selectJob);
// const log = await this.jenkins.build.logStream(selectJob, info.lastBuild.number)
// return new Promise((resolve, reject) => {
// log.on('data', function(text) {
// process.stdout.write(text)
// })
// log.on('error', function(err) {
// printError(err)
// reject(err)
// })
// log.on('end', function() {
// resolve(true)
// })
// })
});
}
}
exports.JenkinsCli = JenkinsCli;
//# sourceMappingURL=index.js.map