From 48f97edbd1289a7b41dfb8923f3e0df9bd84ab3d Mon Sep 17 00:00:00 2001 From: "feijie.xfj" Date: Sun, 29 Jul 2018 16:12:13 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=EF=BC=8C=E6=9B=B4=E6=96=B0Job=E4=B8=AD=E6=96=87=E7=BC=96?= =?UTF-8?q?=E7=A0=81=E9=97=AE=E9=A2=98=20|=20fix=20chinese=20code=20uninte?= =?UTF-8?q?lligible=20error=20when=20create=20or=20update=20job?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/main.js | 4 ++-- package.json | 2 +- src/main.js | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/main.js b/lib/main.js index a8455b0..bd66aea 100644 --- a/lib/main.js +++ b/lib/main.js @@ -679,7 +679,7 @@ exports.init = function (host, defaultOptions, defaultParams) { urlPattern: [JOB_CONFIG, jobName], request: { body: jobConfig, - headers: { 'Content-Type': 'application/xml' } + headers: { 'Content-Type': 'application/xml;charset=UTF-8' } }, noparse: true }, customParams, function (error, data) { @@ -730,7 +730,7 @@ exports.init = function (host, defaultOptions, defaultParams) { urlPattern: [JOB_CREATE], request: { body: jobConfig, - headers: { 'Content-Type': 'application/xml' } + headers: { 'Content-Type': 'application/xml;charset=UTF-8' } }, noparse: true }, customParams, function (error, data) { diff --git a/package.json b/package.json index d667406..ada0e46 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "jenkins-api", - "version": "0.3.1", + "version": "0.3.1-bugfix", "description": "Jenkins API written in Node.js", "author": "Shawn Jansepar ", "contributors": [ diff --git a/src/main.js b/src/main.js index 085dcf6..0bd937e 100644 --- a/src/main.js +++ b/src/main.js @@ -612,7 +612,7 @@ exports.init = function (host, defaultOptions, defaultParams) { urlPattern: [JOB_CONFIG, jobName], request: { body: jobConfig, - headers: { 'Content-Type': 'application/xml' } + headers: { 'Content-Type': 'application/xml;charset=UTF-8'} }, noparse: true }, customParams, function (error, data) { @@ -662,7 +662,7 @@ exports.init = function (host, defaultOptions, defaultParams) { urlPattern: [JOB_CREATE], request: { body: jobConfig, - headers: { 'Content-Type': 'application/xml' } + headers: { 'Content-Type': 'application/xml;charset=UTF-8' } }, noparse: true }, customParams, function (error, data) { From c10222de0dc38cd0ab260d9b24ca6a0e8a566ded Mon Sep 17 00:00:00 2001 From: wb-zby411136 Date: Wed, 15 Jan 2020 14:21:17 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E6=96=B0=E7=89=88=E6=9C=AC=E5=AE=89?= =?UTF-8?q?=E5=85=A8=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/main.js | 1046 ++++++++++++++++++++++++++++++++++++--------------- src/main.js | 762 +++++++++++++++++++++++++------------ 2 files changed, 1261 insertions(+), 547 deletions(-) diff --git a/lib/main.js b/lib/main.js index bd66aea..d5311a9 100644 --- a/lib/main.js +++ b/lib/main.js @@ -285,6 +285,70 @@ exports.init = function (host, defaultOptions, defaultParams) { return url; } + /** + * 获取crumb + */ + function getCrumbData() { + var uri = url.parse(host); + var authPattern = uri.auth.split(":"); + var usr = authPattern[0]; + var psd = authPattern[1]; + + var romotePath = "/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,%22:%22,//crumb)"; + var path = uri.protocol + "//" + uri.host + romotePath; + + var requestOptions = Object.assign({ + method: "GET", + url: path, + headers: { + 'Authorization': 'basic ' + new Buffer(usr + ':' + psd).toString('base64'), + 'Accept-Encoding': 'identity' + } + }, {}); + + return new Promise(function (resolve, reject) { + request(requestOptions, function (error, response, body) { + if (error) { + callback(err); + } + + var res = {}; + response.rawHeaders.forEach(function (value) { + if (value && value.startsWith("JSESSIONID")) { + res.JSESSIONID = value.split(";")[0]; + } + }); + + if (response.body && response.body.startsWith("Jenkins-Crumb")) { + res.crumb = response.body.split(":")[1]; + } + // console.log(res); + resolve(res); + }); + }); + } + + /** + * jenkins校验,生成header数据,crumbFlag为true时获取crumb数据和session + * @param {*} customParams + * @param {*} func + */ + function handleCrumbFlagAndRequest(customParams, func) { + var headers = { 'Content-Type': 'application/xml;charset=UTF-8' }; + + if (customParams.crumbFlag) { + getCrumbData().then(function (crumbData) { + // console.log(crumbData); + headers.Cookie = crumbData.JSESSIONID; + customParams['Jenkins-Crumb'] = crumbData.crumb; + delete customParams.crumbFlag; + func(customParams, headers); + }); + } else { + func(customParams, headers); + } + } + /** * Run the actual HTTP request. * @@ -363,6 +427,10 @@ exports.init = function (host, defaultOptions, defaultParams) { * * Return queue location of newly-created job as per * https://issues.jenkins-ci.org/browse/JENKINS-12827?focusedCommentId=201381#comment-201381 + * + * @param {string} jobName + * @param {object|undefined} customParams is optional + * @param {function} callback */ build: function build(jobName, customParams, callback) { var _doArgs3 = doArgs(arguments, ['string', ['object', {}], 'function']); @@ -374,27 +442,37 @@ exports.init = function (host, defaultOptions, defaultParams) { callback = _doArgs4[2]; - doRequest({ - method: 'POST', - urlPattern: [BUILD_START, jobName], - successStatusCodes: [HTTP_CODE_201, HTTP_CODE_302], - noparse: true - }, customParams, function (error, data) { - if (error) { - callback(error, data); - return; - } + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [BUILD_START, jobName], + successStatusCodes: [HTTP_CODE_201, HTTP_CODE_302], + noparse: true, + request: { + headers: headers + } + }, params, function (error, data) { + if (error) { + callback(error, data); + return; + } - var queueIdRe = /\/queue\/item\/(\d+)/; - var id = +queueIdRe.exec(data.location)[1]; + var queueIdRe = /\/queue\/item\/(\d+)/; + var id = +queueIdRe.exec(data.location)[1]; - data.queueId = id; + data.queueId = id; - callback(null, data); + callback(null, data); + }); }); }, - /** */ + /** + * + * @param {string} jobName + * @param {object|undefined} customParams is optional + * @param {function} callback + */ build_with_params: function build_with_params(jobName, customParams, callback) { var _doArgs5 = doArgs(arguments, ['string', ['object', {}], 'function']); @@ -405,27 +483,38 @@ exports.init = function (host, defaultOptions, defaultParams) { callback = _doArgs6[2]; - doRequest({ - method: 'POST', - urlPattern: [BUILD_START_WITHPARAMS, jobName], - successStatusCodes: [HTTP_CODE_201, HTTP_CODE_302], - noparse: true - }, customParams, function (error, data) { - if (error) { - callback(error, data); - return; - } + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [BUILD_START_WITHPARAMS, jobName], + successStatusCodes: [HTTP_CODE_201, HTTP_CODE_302], + noparse: true, + request: { + headers: headers + } + }, params, function (error, data) { + if (error) { + callback(error, data); + return; + } - var queueIdRe = /\/queue\/item\/(\d+)/; - var id = +queueIdRe.exec(data.location)[1]; + var queueIdRe = /\/queue\/item\/(\d+)/; + var id = +queueIdRe.exec(data.location)[1]; - data.queueId = id; + data.queueId = id; - callback(null, data); + callback(null, data); + }); }); }, - /** */ + /** + * + * @param {string} jobName + * @param {string} buildNumber + * @param {object|undefined} customParams is optional + * @param {function} callback + */ stop_build: function stop_build(jobName, buildNumber, customParams, callback) { var _doArgs7 = doArgs(arguments, ['string', 'string|number', ['object', {}], 'function']); @@ -437,23 +526,35 @@ exports.init = function (host, defaultOptions, defaultParams) { callback = _doArgs8[3]; - doRequest({ - method: 'POST', - urlPattern: [BUILD_STOP, jobName, buildNumber], - noparse: true - }, customParams, function (error, data) { - if (error) { - callback(error, data); - return; - } + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [BUILD_STOP, jobName, buildNumber], + noparse: true, + request: { + headers: headers + } + }, params, function (error, data) { + if (error) { + callback(error, data); + return; + } - data.body = 'Build ' + buildNumber + ' stopped.'; + data.body = 'Build ' + buildNumber + ' stopped.'; - callback(null, data); + callback(null, data); + }); }); }, - /** Get the output for a job's build */ + /** + * Get the output for a job's build + * + * @param {string} jobName + * @param {string} buildNumber + * @param {object|undefined} customParams is optional + * @param {function} callback + */ console_output: function console_output(jobName, buildNumber, customParams, callback) { var _doArgs9 = doArgs(arguments, ['string', 'string|number', ['object', {}], 'function']); @@ -465,13 +566,24 @@ exports.init = function (host, defaultOptions, defaultParams) { callback = _doArgs10[3]; - doRequest({ - urlPattern: [JOB_OUTPUT, jobName, buildNumber], - noparse: true - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [JOB_OUTPUT, jobName, buildNumber], + noparse: true, + request: { + headers: headers + } + }, params, callback); + }); }, - /** Get information for the last build of a job */ + /** + * Get information for the last build of a job + * + * @param {string} jobName + * @param {object|undefined} customParams is optional + * @param {function} callback + */ last_build_info: function last_build_info(jobName, customParams, callback) { var _doArgs11 = doArgs(arguments, ['string', ['object', {}], 'function']); @@ -482,12 +594,23 @@ exports.init = function (host, defaultOptions, defaultParams) { callback = _doArgs12[2]; - doRequest({ - urlPattern: [LAST_BUILD, jobName] - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [LAST_BUILD, jobName], + request: { + headers: headers + } + }, params, callback); + }); }, - /** Get information for the last completed build of a job */ + /** + * Get information for the last completed build of a job + * + * @param {string} jobName + * @param {object|undefined} customParams is optional + * @param {function} callback + */ last_completed_build_info: function last_completed_build_info(jobName, customParams, callback) { var _doArgs13 = doArgs(arguments, ['string', ['object', {}], 'function']); @@ -498,12 +621,24 @@ exports.init = function (host, defaultOptions, defaultParams) { callback = _doArgs14[2]; - doRequest({ - urlPattern: [LAST_COMPLETED_BUILD, jobName] - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [LAST_COMPLETED_BUILD, jobName], + request: { + headers: headers + } + }, params, callback); + }); }, - /** Get information for the build number of a job */ + /** + * Get information for the build number of a job + * + * @param {string} jobName + * @param {string} buildNumber + * @param {object|undefined} customParams is optional + * @param {function} callback + */ build_info: function build_info(jobName, buildNumber, customParams, callback) { var _doArgs15 = doArgs(arguments, ['string', 'string|number', ['object', {}], 'function']); @@ -515,12 +650,24 @@ exports.init = function (host, defaultOptions, defaultParams) { callback = _doArgs16[3]; - doRequest({ - urlPattern: [BUILD_INFO, jobName, buildNumber] - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [BUILD_INFO, jobName, buildNumber], + request: { + headers: headers + } + }, params, callback); + }); }, - /** Get information for the all builds */ + /** + * Get information for the all builds + * + * @param {string} jobName + * @param {string} param + * @param {object|undefined} customParams is optional + * @param {function} callback + */ all_builds: function all_builds(jobName, param, customParams, callback) { // TODO better name and handle the "param" ??? @@ -532,13 +679,25 @@ exports.init = function (host, defaultOptions, defaultParams) { param = _doArgs18[1]; customParams = _doArgs18[2]; callback = _doArgs18[3]; - doRequest({ - urlPattern: [ALL_BUILDS, jobName, param], - bodyProp: 'allBuilds' - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [ALL_BUILDS, jobName, param], + bodyProp: 'allBuilds', + request: { + headers: headers + } + }, params, callback); + }); }, - /** Get the test results for the build number of a job */ + /** + * Get the test results for the build number of a job + * + * @param {string} jobName + * @param {string} buildNumber + * @param {object|undefined} customParams is optional + * @param {function} callback + */ test_result: function test_result(jobName, buildNumber, customParams, callback) { var _doArgs19 = doArgs(arguments, ['string', 'string|number', ['object', {}], 'function']); @@ -550,14 +709,25 @@ exports.init = function (host, defaultOptions, defaultParams) { callback = _doArgs20[3]; - doRequest({ - urlPattern: [TEST_REPORT, jobName, buildNumber] - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [TEST_REPORT, jobName, buildNumber], + request: { + headers: headers + } + }, params, callback); + }); }, - /** Get the last build report for a job. + /** + * Get the last build report for a job. * @obsolete Use last_build_info instead. - * Probly will make this to return the test result. */ + * Probly will make this to return the test result. + * + * @param {string} jobName + * @param {object|undefined} customParams is optional + * @param {function} callback + */ last_build_report: function last_build_report(jobName, customParams, callback) { this.last_build_info(jobName, customParams, callback); // doRequest({ @@ -565,7 +735,14 @@ exports.init = function (host, defaultOptions, defaultParams) { // }, customParams, callback); }, - /** Deletes build data for certain job */ + /** + * Deletes build data for certain job + * + * @param {string} jobName + * @param {string} buildNumber + * @param {object|undefined} customParams is optional + * @param {function} callback + */ delete_build: function delete_build(jobName, buildNumber, customParams, callback) { var _doArgs21 = doArgs(arguments, ['string', 'string|number', ['object', {}], 'function']); @@ -577,17 +754,22 @@ exports.init = function (host, defaultOptions, defaultParams) { callback = _doArgs22[3]; - doRequest({ - method: 'POST', - urlPattern: [BUILD_DELETE, jobName, buildNumber], - noparse: true - }, customParams, function (error, data) { - if (error) { - callback(error, data); - } else { - data.body = 'Build ' + buildNumber + ' deleted.'; - callback(null, data); - } + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [BUILD_DELETE, jobName, buildNumber], + noparse: true, + request: { + headers: headers + } + }, params, function (error, data) { + if (error) { + callback(error, data); + } else { + data.body = 'Build ' + buildNumber + ' deleted.'; + callback(null, data); + } + }); }); }, @@ -595,7 +777,12 @@ exports.init = function (host, defaultOptions, defaultParams) { |* Jobs *| \*************************************/ - /** Return a list of object literals containing the name and color of all jobs on the Jenkins server */ + /** + * Return a list of object literals containing the name and color of all jobs on the Jenkins server + * + * @param {object|undefined} customParams is optional + * @param {function} callback + */ all_jobs: function all_jobs(customParams, callback) { var _doArgs23 = doArgs(arguments, [['object', {}], 'function']); @@ -605,13 +792,24 @@ exports.init = function (host, defaultOptions, defaultParams) { callback = _doArgs24[1]; - doRequest({ - urlPattern: [JOB_LIST], - bodyProp: 'jobs' - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [JOB_LIST], + bodyProp: 'jobs', + request: { + headers: headers + } + }, params, callback); + }); }, - /** Get jobs config in xml */ + /** + * Get jobs config in xml + * + * @param {string} jobName + * @param {object|undefined} customParams is optional + * @param {function} callback + */ get_config_xml: function get_config_xml(jobName, customParams, callback) { var _doArgs25 = doArgs(arguments, ['string', ['object', {}], 'function']); @@ -622,20 +820,32 @@ exports.init = function (host, defaultOptions, defaultParams) { callback = _doArgs26[2]; - doRequest({ - urlPattern: [JOB_CONFIG, jobName], - noparse: true - }, customParams, function (error, data) { - // Get only the XML response body - if (error) { - callback(error, data); - } else { - callback(null, data.body); - } + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [JOB_CONFIG, jobName], + noparse: true, + request: { + headers: headers + } + }, params, function (error, data) { + // Get only the XML response body + if (error) { + callback(error, data); + } else { + callback(null, data.body); + } + }); }); }, - /** Update a job config xml by passing it through your modifyFunction. */ + /** + * Update a job config xml by passing it through your modifyFunction. + * + * @param {string} jobName + * @param {function} modifyFunction + * @param {object|undefined} customParams is optional + * @param {function} callback + */ update_config: function update_config(jobName, modifyFunction, customParams, callback) { var _doArgs27 = doArgs(arguments, ['string', 'function', ['object', {}], 'function']); @@ -662,7 +872,14 @@ exports.init = function (host, defaultOptions, defaultParams) { }); }, - /** Update a existing job based on a jobConfig xml string */ + /** + * Update a existing job based on a jobConfig xml string + * + * @param {string} jobName + * @param {string} jobConfig + * @param {object|undefined} customParams is optional + * @param {function} callback + */ update_job: function update_job(jobName, jobConfig, customParams, callback) { var _doArgs29 = doArgs(arguments, ['string', 'string', ['object', {}], 'function']); @@ -674,26 +891,34 @@ exports.init = function (host, defaultOptions, defaultParams) { callback = _doArgs30[3]; - doRequest({ - method: 'POST', - urlPattern: [JOB_CONFIG, jobName], - request: { - body: jobConfig, - headers: { 'Content-Type': 'application/xml;charset=UTF-8' } - }, - noparse: true - }, customParams, function (error, data) { - if (error) { - callback(error, data); - return; - } - // TODO rather return job_info ??? - // const data = {name: jobName, location: response.headers['Location'] || response.headers['location']}; - callback(null, { name: jobName }); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [JOB_CONFIG, jobName], + request: { + body: jobConfig, + headers: headers + }, + noparse: true + }, params, function (error, data) { + if (error) { + callback(error, data); + return; + } + // TODO rather return job_info ??? + // const data = {name: jobName, location: response.headers['Location'] || response.headers['location']}; + callback(null, { name: jobName }); + }); }); }, - /** Get all information for a job */ + /** + * Get all information for a job + * + * @param {string} jobName + * @param {object|undefined} customParams is optional + * @param {function} callback + */ job_info: function job_info(jobName, customParams, callback) { var _doArgs31 = doArgs(arguments, ['string', ['object', {}], 'function']); @@ -704,12 +929,24 @@ exports.init = function (host, defaultOptions, defaultParams) { callback = _doArgs32[2]; - doRequest({ - urlPattern: [JOB_INFO, jobName] - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [JOB_INFO, jobName], + request: { + headers: headers + } + }, params, callback); + }); }, - /** Create a new job based on a jobConfig string */ + /** + * Create a new job based on a jobConfig string + * + * @param {string} jobName + * @param {string} jobConfig + * @param {object|undefined} customParams is optional + * @param {function} callback + */ create_job: function create_job(jobName, jobConfig, customParams, callback) { // Set the created job name! @@ -725,24 +962,35 @@ exports.init = function (host, defaultOptions, defaultParams) { var self = this; - doRequest({ - method: 'POST', - urlPattern: [JOB_CREATE], - request: { - body: jobConfig, - headers: { 'Content-Type': 'application/xml;charset=UTF-8' } - }, - noparse: true - }, customParams, function (error, data) { - if (error) { - callback(error, data); - return; - } - self.job_info(jobName, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [JOB_CREATE], + request: { + body: jobConfig, + headers: headers + }, + noparse: true + }, params, function (error, data) { + if (error) { + callback(error, data); + return; + } + self.job_info(jobName, customParams, callback); + }); }); }, - /** Copies a job and allows you to pass in a function to modify the configuration of the job you would like to copy */ + /** + * Copies a job and allows you to pass in a function to modify the configuration + * of the job you would like to copy + * + * @param {string} jobName + * @param {string} newJobName + * @param {function} modifyFunction + * @param {object|undefined} customParams is optional + * @param {function} callback + */ copy_job: function copy_job(jobName, newJobName, modifyFunction, customParams, callback) { var _doArgs35 = doArgs(arguments, ['string', 'string', 'function', ['object', {}], 'function']); @@ -770,7 +1018,13 @@ exports.init = function (host, defaultOptions, defaultParams) { }); }, - /** Deletes a job */ + /** + * Deletes a job + * + * @param {string} jobName + * @param {object|undefined} customParams is optional + * @param {function} callback + */ delete_job: function delete_job(jobName, customParams, callback) { var _doArgs37 = doArgs(arguments, ['string', ['object', {}], 'function']); @@ -781,20 +1035,31 @@ exports.init = function (host, defaultOptions, defaultParams) { callback = _doArgs38[2]; - doRequest({ - method: 'POST', - urlPattern: [JOB_DELETE, jobName], - noparse: true - }, customParams, function (error, data) { - if (error) { - callback(error, data); - return; - } - callback(null, { name: jobName }); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [JOB_DELETE, jobName], + noparse: true, + request: { + headers: headers + } + }, params, function (error, data) { + if (error) { + callback(error, data); + return; + } + callback(null, { name: jobName }); + }); }); }, - /** Disables a job */ + /** + * Disables a job + * + * @param {string} jobName + * @param {object|undefined} customParams is optional + * @param {function} callback + */ disable_job: function disable_job(jobName, customParams, callback) { var _doArgs39 = doArgs(arguments, ['string', ['object', {}], 'function']); @@ -807,20 +1072,31 @@ exports.init = function (host, defaultOptions, defaultParams) { var self = this; - doRequest({ - method: 'POST', - urlPattern: [JOB_DISABLE, jobName], - noparse: true - }, customParams, function (error, data) { - if (error) { - callback(error, data); - return; - } - self.job_info(jobName, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [JOB_DISABLE, jobName], + noparse: true, + request: { + headers: headers + } + }, params, function (error, data) { + if (error) { + callback(error, data); + return; + } + self.job_info(jobName, customParams, callback); + }); }); }, - /** Enables a job */ + /** + * Enables a job + * + * @param {string} jobName + * @param {object|undefined} customParams is optional + * @param {function} callback + */ enable_job: function enable_job(jobName, customParams, callback) { var _doArgs41 = doArgs(arguments, ['string', ['object', {}], 'function']); @@ -833,20 +1109,31 @@ exports.init = function (host, defaultOptions, defaultParams) { var self = this; - doRequest({ - method: 'POST', - urlPattern: [JOB_ENABLE, jobName], - noparse: true - }, customParams, function (error, data) { - if (error) { - callback(error, data); - return; - } - self.job_info(jobName, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [JOB_ENABLE, jobName], + noparse: true, + request: { + headers: headers + } + }, params, function (error, data) { + if (error) { + callback(error, data); + return; + } + self.job_info(jobName, customParams, callback); + }); }); }, - /** Get the last build report for a job */ + /** + * Get the last build report for a job + * + * @param {string} jobName + * @param {object|undefined} customParams is optional + * @param {function} callback + */ last_success: function last_success(jobName, customParams, callback) { var _doArgs43 = doArgs(arguments, ['string', ['object', {}], 'function']); @@ -857,13 +1144,24 @@ exports.init = function (host, defaultOptions, defaultParams) { callback = _doArgs44[2]; - doRequest({ - method: 'POST', - urlPattern: [LAST_SUCCESS, jobName] - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [LAST_SUCCESS, jobName], + request: { + headers: headers + } + }, params, callback); + }); }, - /** Get the last result for a job */ + /** + * Get the last result for a job + * + * @param {string} jobName + * @param {object|undefined} customParams is optional + * @param {function} callback + */ last_result: function last_result(jobName, customParams, callback) { var _doArgs45 = doArgs(arguments, ['string', ['object', {}], 'function']); @@ -882,9 +1180,14 @@ exports.init = function (host, defaultOptions, defaultParams) { var lastResultUrl = data.lastBuild.url; - doRequest({ - urlPattern: [lastResultUrl + API, jobName] - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [lastResultUrl + API, jobName], + request: { + headers: headers + } + }, params, callback); + }); }); }, @@ -892,7 +1195,12 @@ exports.init = function (host, defaultOptions, defaultParams) { |* Queues *| \*************************************/ - /** Get all queued items */ + /** + * Get all queued items + * + * @param {object|undefined} customParams is optional + * @param {function} callback + */ queue: function queue(customParams, callback) { var _doArgs47 = doArgs(arguments, [['object', {}], 'function']); @@ -902,12 +1210,23 @@ exports.init = function (host, defaultOptions, defaultParams) { callback = _doArgs48[1]; - doRequest({ - urlPattern: [QUEUE] - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [QUEUE], + request: { + headers: headers + } + }, params, callback); + }); }, - /** Get one queued item */ + /** + * Get one queued item + * + * @param {string} queueNumber + * @param {object|undefined} customParams is optional + * @param {function} callback + */ queue_item: function queue_item(queueNumber, customParams, callback) { var _doArgs49 = doArgs(arguments, ['string|number', ['object', {}], 'function']); @@ -918,12 +1237,23 @@ exports.init = function (host, defaultOptions, defaultParams) { callback = _doArgs50[2]; - doRequest({ - urlPattern: [QUEUE_ITEM, queueNumber] - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [QUEUE_ITEM, queueNumber], + request: { + headers: headers + } + }, params, callback); + }); }, - /** Cancel a queued item */ + /** + * Cancel a queued item + * + * @param {string} itemId + * @param {object|undefined} customParams is optional + * @param {function} callback + */ cancel_item: function cancel_item(itemId, customParams, callback) { var _doArgs51 = doArgs(arguments, ['string|number', ['object', {}], 'function']); @@ -936,17 +1266,27 @@ exports.init = function (host, defaultOptions, defaultParams) { customParams.id = itemId; - doRequest({ - method: 'POST', - urlPattern: [QUEUE_CANCEL_ITEM] - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [QUEUE_CANCEL_ITEM], + request: { + headers: headers + } + }, params, callback); + }); }, /** ***********************************\ |* Computers *| \*************************************/ - /** Get info about all jenkins workers including currently executing jobs */ + /** + * Get info about all jenkins workers including currently executing jobs + * + * @param {object|undefined} customParams is optional + * @param {function} callback + */ computers: function computers(customParams, callback) { var _doArgs53 = doArgs(arguments, [['object', {}], 'function']); @@ -956,16 +1296,26 @@ exports.init = function (host, defaultOptions, defaultParams) { callback = _doArgs54[1]; - doRequest({ - urlPattern: [COMPUTERS] - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [COMPUTERS], + request: { + headers: headers + } + }, params, callback); + }); }, /** ***********************************\ |* Views *| \*************************************/ - /** Return a list of all the views on the Jenkins server */ + /** + * Return a list of all the views on the Jenkins server + * + * @param {object|undefined} customParams is optional + * @param {function} callback + */ all_views: function all_views(customParams, callback) { var _doArgs55 = doArgs(arguments, [['object', {}], 'function']); @@ -975,13 +1325,24 @@ exports.init = function (host, defaultOptions, defaultParams) { callback = _doArgs56[1]; - doRequest({ - urlPattern: [VIEW_LIST], - bodyProp: 'views' - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [VIEW_LIST], + bodyProp: 'views', + request: { + headers: headers + } + }, params, callback); + }); }, - /** */ + /** + * + * @param {string} viewName + * @param {string|undefined} mode + * @param {object|undefined} customParams is optional + * @param {function} callback + */ create_view: function create_view(viewName, mode, customParams, callback) { var _doArgs57 = doArgs(arguments, ['string', ['string', 'hudson.model.ListView'], ['object', {}], 'function']); @@ -999,39 +1360,58 @@ exports.init = function (host, defaultOptions, defaultParams) { var self = this; - doRequest({ - method: 'POST', - urlPattern: [VIEW_CREATE], - request: { - form: formData - }, - noparse: true - }, customParams, function (error, data) { - if (error) { - callback(error, data); - return; - } - self.view_info(viewName, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [VIEW_CREATE], + request: { + form: formData, + headers: headers + }, + noparse: true + }, params, function (error, data) { + if (error) { + callback(error, data); + return; + } + self.view_info(viewName, customParams, callback); + }); }); }, - /** */ - view_info: function view_info(viewId, customParams, callback) { + /** + * @param {string} viewName + * @param {object|undefined} customParams is optional + * @param {function} callback + */ + view_info: function view_info(viewName, customParams, callback) { var _doArgs59 = doArgs(arguments, ['string', ['object', {}], 'function']); var _doArgs60 = _slicedToArray(_doArgs59, 3); - viewId = _doArgs60[0]; + viewName = _doArgs60[0]; customParams = _doArgs60[1]; callback = _doArgs60[2]; - doRequest({ - urlPattern: [VIEW_INFO, viewId] - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [VIEW_INFO, viewName], + request: { + headers: headers + } + }, params, callback); + }); }, - /** Update a view based on a viewConfig object */ + /** + * Update a view based on a viewConfig object + * + * @param {string} viewName + * @param {object} viewConfig + * @param {object|undefined} customParams is optional + * @param {function} callback + */ update_view: function update_view(viewName, viewConfig, customParams, callback) { var _doArgs61 = doArgs(arguments, ['string', 'object', ['object', {}], 'function']); @@ -1047,24 +1427,30 @@ exports.init = function (host, defaultOptions, defaultParams) { var self = this; - doRequest({ - method: 'POST', - urlPattern: [VIEW_CONFIG, viewName], - request: { - form: viewConfig - // headers: {'content-type': 'application/x-www-form-urlencoded'}, - }, - noparse: true - }, customParams, function (error, data) { - if (error) { - callback(error, data); - return; - } - self.view_info(viewName, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [VIEW_CONFIG, viewName], + request: { + form: viewConfig, + headers: headers + }, + noparse: true + }, params, function (error, data) { + if (error) { + callback(error, data); + return; + } + self.view_info(viewName, customParams, callback); + }); }); }, - /** */ + /** + * @param {string} viewName + * @param {object|undefined} customParams is optional + * @param {function} callback + */ delete_view: function delete_view(viewName, customParams, callback) { var _doArgs63 = doArgs(arguments, ['string', ['object', {}], 'function']); @@ -1075,26 +1461,36 @@ exports.init = function (host, defaultOptions, defaultParams) { callback = _doArgs64[2]; - doRequest({ - method: 'POST', - urlPattern: [VIEW_DELETE, viewName], - noparse: true - }, customParams, function (error, data) { - if (error) { - callback(error, data); - return; - } - callback(null, { name: viewName }); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [VIEW_DELETE, viewName], + noparse: true, + request: { + headers: headers + } + }, params, function (error, data) { + if (error) { + callback(error, data); + return; + } + callback(null, { name: viewName }); + }); }); }, - /** */ - add_job_to_view: function add_job_to_view(viewId, jobName, customParams, callback) { + /** + * @param {string} viewName + * @param {string} jobName + * @param {object|undefined} customParams is optional + * @param {function} callback + */ + add_job_to_view: function add_job_to_view(viewName, jobName, customParams, callback) { var _doArgs65 = doArgs(arguments, ['string', 'string', ['object', {}], 'function']); var _doArgs66 = _slicedToArray(_doArgs65, 4); - viewId = _doArgs66[0]; + viewName = _doArgs66[0]; jobName = _doArgs66[1]; customParams = _doArgs66[2]; callback = _doArgs66[3]; @@ -1102,20 +1498,30 @@ exports.init = function (host, defaultOptions, defaultParams) { customParams.name = jobName; - doRequest({ - method: 'POST', - urlPattern: [VIEW_ADD_JOB, viewId], - noparse: true - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [VIEW_ADD_JOB, viewName], + noparse: true, + request: { + headers: headers + } + }, params, callback); + }); }, - /** */ - remove_job_from_view: function remove_job_from_view(viewId, jobName, customParams, callback) { + /** + * @param {string} viewName + * @param {string} jobName + * @param {object|undefined} customParams is optional + * @param {function} callback + */ + remove_job_from_view: function remove_job_from_view(viewName, jobName, customParams, callback) { var _doArgs67 = doArgs(arguments, ['string', 'string', ['object', {}], 'function']); var _doArgs68 = _slicedToArray(_doArgs67, 4); - viewId = _doArgs68[0]; + viewName = _doArgs68[0]; jobName = _doArgs68[1]; customParams = _doArgs68[2]; callback = _doArgs68[3]; @@ -1123,35 +1529,56 @@ exports.init = function (host, defaultOptions, defaultParams) { customParams.name = jobName; - doRequest({ - method: 'POST', - urlPattern: [VIEW_REMOVE_JOB, viewId], - noparse: true - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [VIEW_REMOVE_JOB, viewName], + noparse: true, + request: { + headers: headers + } + }, params, callback); + }); }, - /* Return a list of objet literals containing the name and color of all the jobs for a view on the Jenkins server */ - all_jobs_in_view: function all_jobs_in_view(viewId, customParams, callback) { + /** + * Return a list of objet literals containing the name and color of all the jobs for a view on the Jenkins server + * + * @param {string} viewName + * @param {object|undefined} customParams is optional + * @param {function} callback + */ + all_jobs_in_view: function all_jobs_in_view(viewName, customParams, callback) { var _doArgs69 = doArgs(arguments, ['string', ['object', {}], 'function']); var _doArgs70 = _slicedToArray(_doArgs69, 3); - viewId = _doArgs70[0]; + viewName = _doArgs70[0]; customParams = _doArgs70[1]; callback = _doArgs70[2]; - doRequest({ - urlPattern: [VIEW_INFO, viewId], - bodyProp: 'jobs' - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [VIEW_INFO, viewName], + bodyProp: 'jobs', + request: { + headers: headers + } + }, params, callback); + }); }, /** ***********************************\ |* Plugins *| \*************************************/ - /* Get all installed plugins */ + /** + * Get all installed plugins + * + * @param {object|undefined} customParams is optional + * @param {function} callback + */ all_installed_plugins: function all_installed_plugins(customParams, callback) { var _doArgs71 = doArgs(arguments, [['object', {}], 'function']); @@ -1163,43 +1590,63 @@ exports.init = function (host, defaultOptions, defaultParams) { customParams.depth = 1; - doRequest({ - urlPattern: [PLUGINS], - failureStatusCodes: [HTTP_CODE_302], - noparse: true, - bodyProp: 'plugins' - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [PLUGINS], + failureStatusCodes: [HTTP_CODE_302], + noparse: true, + bodyProp: 'plugins', + request: { + headers: headers + } + }, params, callback); + }); }, - /* Install a plugin */ - install_plugin: function install_plugin(plugin, customParams, callback) { + /** + * Install a plugin + * + * @param {string} pluginName + * @param {object|undefined} customParams is optional + * @param {function} callback + */ + install_plugin: function install_plugin(pluginName, customParams, callback) { var _doArgs73 = doArgs(arguments, ['string', ['object', {}], 'function']); var _doArgs74 = _slicedToArray(_doArgs73, 3); - plugin = _doArgs74[0]; + pluginName = _doArgs74[0]; customParams = _doArgs74[1]; callback = _doArgs74[2]; - var body = ''; + var body = ''; - doRequest({ - method: 'POST', - urlPattern: [INSTALL_PLUGIN], - request: { - body: body, - headers: { 'Content-Type': 'text/xml' } - }, - noparse: true, - bodyProp: 'plugins' - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + headers['Content-Type'] = 'text/xml'; + doRequest({ + method: 'POST', + urlPattern: [INSTALL_PLUGIN], + request: { + body: body, + headers: headers + }, + noparse: true, + bodyProp: 'plugins' + }, params, callback); + }); }, - /* Create a new folder - * Needs Folder plugin in Jenkins: https://wiki.jenkins-ci.org/display/JENKINS/CloudBees+Folders+Plugin - * curl -XPOST 'http://jenkins/createItem?name=FolderName&mode=com.cloudbees.hudson.plugins.folder.Folder&from=&json=%7B%22name%22%3A%22FolderName%22%2C%22mode%22%3A%22com.cloudbees.hudson.plugins.folder.Folder%22%2C%22from%22%3A%22%22%2C%22Submit%22%3A%22OK%22%7D&Submit=OK' --user user.name:YourAPIToken -H "Content-Type:application/x-www-form-urlencoded" - * https://gist.github.com/stuart-warren/7786892 + /** + * Create a new folder with given name + * + * Requires Folder plugin in Jenkins: + * @see https://wiki.jenkins-ci.org/display/JENKINS/CloudBees+Folders+Plugin + * @see https://gist.github.com/stuart-warren/7786892 + * + * @param {string} folderName + * @param {object|undefined} customParams is optional + * @param {function} callback */ create_folder: function create_folder(folderName, customParams, callback) { var _doArgs75 = doArgs(arguments, ['string', ['object', {}], 'function']); @@ -1217,10 +1664,15 @@ exports.init = function (host, defaultOptions, defaultParams) { customParams.mode = mode; customParams.Submit = 'OK'; - doRequest({ - method: 'POST', - urlPattern: [NEWFOLDER] - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [NEWFOLDER], + request: { + headers: headers + } + }, params, callback); + }); } }; }; \ No newline at end of file diff --git a/src/main.js b/src/main.js index 0bd937e..39c447d 100644 --- a/src/main.js +++ b/src/main.js @@ -228,6 +228,71 @@ exports.init = function (host, defaultOptions, defaultParams) { return url; } + + /** + * 获取crumb + */ + function getCrumbData() { + var uri = url.parse(host) + var authPattern = uri.auth.split(":"); + var usr = authPattern[0]; + var psd = authPattern[1]; + + var romotePath = "/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,%22:%22,//crumb)"; + var path = uri.protocol + "//" + uri.host + romotePath; + + var requestOptions = Object.assign({ + method: "GET", + url: path, + headers: { + 'Authorization': 'basic ' + new Buffer(usr + ':' + psd).toString('base64'), + 'Accept-Encoding': 'identity', + } + }, {}); + + return new Promise(function (resolve, reject) { + request(requestOptions, function (error, response, body) { + if (error) { + callback(err); + } + + var res = {} + response.rawHeaders.forEach((value) => { + if (value && value.startsWith("JSESSIONID")) { + res.JSESSIONID = value.split(";")[0]; + } + }) + + if (response.body && response.body.startsWith("Jenkins-Crumb")) { + res.crumb = response.body.split(":")[1]; + } + // console.log(res); + resolve(res); + }) + }) + } + + /** + * jenkins校验,生成header数据,crumbFlag为true时获取crumb数据和session + * @param {*} customParams + * @param {*} func + */ + function handleCrumbFlagAndRequest(customParams, func) { + var headers = { 'Content-Type': 'application/xml;charset=UTF-8' }; + + if (customParams.crumbFlag) { + getCrumbData().then(function (crumbData) { + // console.log(crumbData); + headers.Cookie = crumbData.JSESSIONID; + customParams['Jenkins-Crumb'] = crumbData.crumb; + delete customParams.crumbFlag; + func(customParams, headers); + }) + } else { + func(customParams, headers); + } + } + /** * Run the actual HTTP request. * @@ -315,24 +380,30 @@ exports.init = function (host, defaultOptions, defaultParams) { build: function (jobName, customParams, callback) { [jobName, customParams, callback] = doArgs(arguments, ['string', ['object', {}], 'function']); - doRequest({ - method: 'POST', - urlPattern: [BUILD_START, jobName], - successStatusCodes: [HTTP_CODE_201, HTTP_CODE_302], - noparse: true - }, customParams, function (error, data) { - if (error) { - callback(error, data); - return; - } - - const queueIdRe = /\/queue\/item\/(\d+)/; - const id = +queueIdRe.exec(data.location)[1]; - - data.queueId = id; + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [BUILD_START, jobName], + successStatusCodes: [HTTP_CODE_201, HTTP_CODE_302], + noparse: true, + request: { + headers + } + }, params, function (error, data) { + if (error) { + callback(error, data); + return; + } + + const queueIdRe = /\/queue\/item\/(\d+)/; + const id = +queueIdRe.exec(data.location)[1]; + + data.queueId = id; - callback(null, data); + callback(null, data); + }); }); + }, /** @@ -344,24 +415,30 @@ exports.init = function (host, defaultOptions, defaultParams) { build_with_params: function (jobName, customParams, callback) { [jobName, customParams, callback] = doArgs(arguments, ['string', ['object', {}], 'function']); - doRequest({ - method: 'POST', - urlPattern: [BUILD_START_WITHPARAMS, jobName], - successStatusCodes: [HTTP_CODE_201, HTTP_CODE_302], - noparse: true - }, customParams, function (error, data) { - if (error) { - callback(error, data); - return; - } - - const queueIdRe = /\/queue\/item\/(\d+)/; - const id = +queueIdRe.exec(data.location)[1]; - - data.queueId = id; + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [BUILD_START_WITHPARAMS, jobName], + successStatusCodes: [HTTP_CODE_201, HTTP_CODE_302], + noparse: true, + request: { + headers + } + }, params, function (error, data) { + if (error) { + callback(error, data); + return; + } + + const queueIdRe = /\/queue\/item\/(\d+)/; + const id = +queueIdRe.exec(data.location)[1]; + + data.queueId = id; - callback(null, data); + callback(null, data); + }); }); + }, /** @@ -374,20 +451,26 @@ exports.init = function (host, defaultOptions, defaultParams) { stop_build: function (jobName, buildNumber, customParams, callback) { [jobName, buildNumber, customParams, callback] = doArgs(arguments, ['string', 'string|number', ['object', {}], 'function']); - doRequest({ - method: 'POST', - urlPattern: [BUILD_STOP, jobName, buildNumber], - noparse: true - }, customParams, function (error, data) { - if (error) { - callback(error, data); - return; - } - - data.body = `Build ${buildNumber} stopped.`; + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [BUILD_STOP, jobName, buildNumber], + noparse: true, + request: { + headers + } + }, params, function (error, data) { + if (error) { + callback(error, data); + return; + } + + data.body = `Build ${buildNumber} stopped.`; - callback(null, data); + callback(null, data); + }); }); + }, /** @@ -401,10 +484,16 @@ exports.init = function (host, defaultOptions, defaultParams) { console_output: function (jobName, buildNumber, customParams, callback) { [jobName, buildNumber, customParams, callback] = doArgs(arguments, ['string', 'string|number', ['object', {}], 'function']); - doRequest({ - urlPattern: [JOB_OUTPUT, jobName, buildNumber], - noparse: true - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [JOB_OUTPUT, jobName, buildNumber], + noparse: true, + request: { + headers + } + }, params, callback); + }); + }, /** @@ -417,9 +506,15 @@ exports.init = function (host, defaultOptions, defaultParams) { last_build_info: function (jobName, customParams, callback) { [jobName, customParams, callback] = doArgs(arguments, ['string', ['object', {}], 'function']); - doRequest({ - urlPattern: [LAST_BUILD, jobName] - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [LAST_BUILD, jobName], + request: { + headers + } + }, params, callback); + }); + }, /** @@ -432,9 +527,15 @@ exports.init = function (host, defaultOptions, defaultParams) { last_completed_build_info: function (jobName, customParams, callback) { [jobName, customParams, callback] = doArgs(arguments, ['string', ['object', {}], 'function']); - doRequest({ - urlPattern: [LAST_COMPLETED_BUILD, jobName] - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [LAST_COMPLETED_BUILD, jobName], + request: { + headers + } + }, params, callback); + }); + }, /** @@ -448,9 +549,15 @@ exports.init = function (host, defaultOptions, defaultParams) { build_info: function (jobName, buildNumber, customParams, callback) { [jobName, buildNumber, customParams, callback] = doArgs(arguments, ['string', 'string|number', ['object', {}], 'function']); - doRequest({ - urlPattern: [BUILD_INFO, jobName, buildNumber] - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [BUILD_INFO, jobName, buildNumber], + request: { + headers + } + }, params, callback); + }); + }, /** @@ -465,10 +572,16 @@ exports.init = function (host, defaultOptions, defaultParams) { [jobName, param, customParams, callback] = doArgs(arguments, ['string', ['string', 'id,timestamp,result,duration'], ['object', {}], 'function']); // TODO better name and handle the "param" ??? - doRequest({ - urlPattern: [ALL_BUILDS, jobName, param], - bodyProp: 'allBuilds' - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [ALL_BUILDS, jobName, param], + bodyProp: 'allBuilds', + request: { + headers + } + }, params, callback); + }); + }, /** @@ -482,9 +595,15 @@ exports.init = function (host, defaultOptions, defaultParams) { test_result: function (jobName, buildNumber, customParams, callback) { [jobName, buildNumber, customParams, callback] = doArgs(arguments, ['string', 'string|number', ['object', {}], 'function']); - doRequest({ - urlPattern: [TEST_REPORT, jobName, buildNumber] - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [TEST_REPORT, jobName, buildNumber], + request: { + headers + } + }, params, callback); + }); + }, /** @@ -514,18 +633,24 @@ exports.init = function (host, defaultOptions, defaultParams) { delete_build: function (jobName, buildNumber, customParams, callback) { [jobName, buildNumber, customParams, callback] = doArgs(arguments, ['string', 'string|number', ['object', {}], 'function']); - doRequest({ - method: 'POST', - urlPattern: [BUILD_DELETE, jobName, buildNumber], - noparse: true - }, customParams, function (error, data) { - if (error) { - callback(error, data); - } else { - data.body = `Build ${buildNumber} deleted.`; - callback(null, data); - } + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [BUILD_DELETE, jobName, buildNumber], + noparse: true, + request: { + headers + } + }, params, function (error, data) { + if (error) { + callback(error, data); + } else { + data.body = `Build ${buildNumber} deleted.`; + callback(null, data); + } + }); }); + }, /** ***********************************\ @@ -541,10 +666,16 @@ exports.init = function (host, defaultOptions, defaultParams) { all_jobs: function (customParams, callback) { [customParams, callback] = doArgs(arguments, [['object', {}], 'function']); - doRequest({ - urlPattern: [JOB_LIST], - bodyProp: 'jobs' - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [JOB_LIST], + bodyProp: 'jobs', + request: { + headers + } + }, params, callback); + }); + }, /** @@ -557,17 +688,23 @@ exports.init = function (host, defaultOptions, defaultParams) { get_config_xml: function (jobName, customParams, callback) { [jobName, customParams, callback] = doArgs(arguments, ['string', ['object', {}], 'function']); - doRequest({ - urlPattern: [JOB_CONFIG, jobName], - noparse: true - }, customParams, function (error, data) { - // Get only the XML response body - if (error) { - callback(error, data); - } else { - callback(null, data.body); - } + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [JOB_CONFIG, jobName], + noparse: true, + request: { + headers + } + }, params, function (error, data) { + // Get only the XML response body + if (error) { + callback(error, data); + } else { + callback(null, data.body); + } + }); }); + }, /** @@ -607,23 +744,26 @@ exports.init = function (host, defaultOptions, defaultParams) { update_job: function (jobName, jobConfig, customParams, callback) { [jobName, jobConfig, customParams, callback] = doArgs(arguments, ['string', 'string', ['object', {}], 'function']); - doRequest({ - method: 'POST', - urlPattern: [JOB_CONFIG, jobName], - request: { - body: jobConfig, - headers: { 'Content-Type': 'application/xml;charset=UTF-8'} - }, - noparse: true - }, customParams, function (error, data) { - if (error) { - callback(error, data); - return; - } - // TODO rather return job_info ??? - // const data = {name: jobName, location: response.headers['Location'] || response.headers['location']}; - callback(null, { name: jobName }); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [JOB_CONFIG, jobName], + request: { + body: jobConfig, + headers + }, + noparse: true + }, params, function (error, data) { + if (error) { + callback(error, data); + return; + } + // TODO rather return job_info ??? + // const data = {name: jobName, location: response.headers['Location'] || response.headers['location']}; + callback(null, { name: jobName }); + }); }); + }, /** @@ -636,9 +776,15 @@ exports.init = function (host, defaultOptions, defaultParams) { job_info: function (jobName, customParams, callback) { [jobName, customParams, callback] = doArgs(arguments, ['string', ['object', {}], 'function']); - doRequest({ - urlPattern: [JOB_INFO, jobName] - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [JOB_INFO, jobName], + request: { + headers + } + }, params, callback); + }); + }, /** @@ -657,21 +803,24 @@ exports.init = function (host, defaultOptions, defaultParams) { const self = this; - doRequest({ - method: 'POST', - urlPattern: [JOB_CREATE], - request: { - body: jobConfig, - headers: { 'Content-Type': 'application/xml;charset=UTF-8' } - }, - noparse: true - }, customParams, function (error, data) { - if (error) { - callback(error, data); - return; - } - self.job_info(jobName, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [JOB_CREATE], + request: { + body: jobConfig, + headers + }, + noparse: true + }, params, function (error, data) { + if (error) { + callback(error, data); + return; + } + self.job_info(jobName, customParams, callback); + }); }); + }, /** @@ -712,17 +861,23 @@ exports.init = function (host, defaultOptions, defaultParams) { delete_job: function (jobName, customParams, callback) { [jobName, customParams, callback] = doArgs(arguments, ['string', ['object', {}], 'function']); - doRequest({ - method: 'POST', - urlPattern: [JOB_DELETE, jobName], - noparse: true - }, customParams, function (error, data) { - if (error) { - callback(error, data); - return; - } - callback(null, { name: jobName }); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [JOB_DELETE, jobName], + noparse: true, + request: { + headers + } + }, params, function (error, data) { + if (error) { + callback(error, data); + return; + } + callback(null, { name: jobName }); + }); }); + }, /** @@ -737,17 +892,23 @@ exports.init = function (host, defaultOptions, defaultParams) { const self = this; - doRequest({ - method: 'POST', - urlPattern: [JOB_DISABLE, jobName], - noparse: true - }, customParams, function (error, data) { - if (error) { - callback(error, data); - return; - } - self.job_info(jobName, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [JOB_DISABLE, jobName], + noparse: true, + request: { + headers + } + }, params, function (error, data) { + if (error) { + callback(error, data); + return; + } + self.job_info(jobName, customParams, callback); + }); }); + }, /** @@ -762,17 +923,23 @@ exports.init = function (host, defaultOptions, defaultParams) { const self = this; - doRequest({ - method: 'POST', - urlPattern: [JOB_ENABLE, jobName], - noparse: true - }, customParams, function (error, data) { - if (error) { - callback(error, data); - return; - } - self.job_info(jobName, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [JOB_ENABLE, jobName], + noparse: true, + request: { + headers + } + }, params, function (error, data) { + if (error) { + callback(error, data); + return; + } + self.job_info(jobName, customParams, callback); + }); }); + }, /** @@ -785,10 +952,16 @@ exports.init = function (host, defaultOptions, defaultParams) { last_success: function (jobName, customParams, callback) { [jobName, customParams, callback] = doArgs(arguments, ['string', ['object', {}], 'function']); - doRequest({ - method: 'POST', - urlPattern: [LAST_SUCCESS, jobName] - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [LAST_SUCCESS, jobName], + request: { + headers + } + }, params, callback); + }); + }, /** @@ -809,9 +982,15 @@ exports.init = function (host, defaultOptions, defaultParams) { const lastResultUrl = data.lastBuild.url; - doRequest({ - urlPattern: [lastResultUrl + API, jobName] - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [lastResultUrl + API, jobName], + request: { + headers + } + }, params, callback); + }); + }); }, @@ -828,9 +1007,15 @@ exports.init = function (host, defaultOptions, defaultParams) { queue: function (customParams, callback) { [customParams, callback] = doArgs(arguments, [['object', {}], 'function']); - doRequest({ - urlPattern: [QUEUE] - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [QUEUE], + request: { + headers + } + }, params, callback); + }); + }, /** @@ -843,9 +1028,15 @@ exports.init = function (host, defaultOptions, defaultParams) { queue_item: function (queueNumber, customParams, callback) { [queueNumber, customParams, callback] = doArgs(arguments, ['string|number', ['object', {}], 'function']); - doRequest({ - urlPattern: [QUEUE_ITEM, queueNumber] - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [QUEUE_ITEM, queueNumber], + request: { + headers + } + }, params, callback); + }); + }, /** @@ -860,10 +1051,16 @@ exports.init = function (host, defaultOptions, defaultParams) { customParams.id = itemId; - doRequest({ - method: 'POST', - urlPattern: [QUEUE_CANCEL_ITEM] - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [QUEUE_CANCEL_ITEM], + request: { + headers + } + }, params, callback); + }); + }, /** ***********************************\ @@ -879,9 +1076,15 @@ exports.init = function (host, defaultOptions, defaultParams) { computers: function (customParams, callback) { [customParams, callback] = doArgs(arguments, [['object', {}], 'function']); - doRequest({ - urlPattern: [COMPUTERS] - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [COMPUTERS], + request: { + headers + } + }, params, callback); + }); + }, /** ***********************************\ @@ -897,10 +1100,16 @@ exports.init = function (host, defaultOptions, defaultParams) { all_views: function (customParams, callback) { [customParams, callback] = doArgs(arguments, [['object', {}], 'function']); - doRequest({ - urlPattern: [VIEW_LIST], - bodyProp: 'views' - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [VIEW_LIST], + bodyProp: 'views', + request: { + headers + } + }, params, callback); + }); + }, /** @@ -919,20 +1128,24 @@ exports.init = function (host, defaultOptions, defaultParams) { const self = this; - doRequest({ - method: 'POST', - urlPattern: [VIEW_CREATE], - request: { - form: formData - }, - noparse: true - }, customParams, function (error, data) { - if (error) { - callback(error, data); - return; - } - self.view_info(viewName, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [VIEW_CREATE], + request: { + form: formData, + headers + }, + noparse: true + }, params, function (error, data) { + if (error) { + callback(error, data); + return; + } + self.view_info(viewName, customParams, callback); + }); }); + }, /** @@ -943,9 +1156,15 @@ exports.init = function (host, defaultOptions, defaultParams) { view_info: function (viewName, customParams, callback) { [viewName, customParams, callback] = doArgs(arguments, ['string', ['object', {}], 'function']); - doRequest({ - urlPattern: [VIEW_INFO, viewName] - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [VIEW_INFO, viewName], + request: { + headers + } + }, params, callback); + }); + }, /** @@ -963,21 +1182,24 @@ exports.init = function (host, defaultOptions, defaultParams) { const self = this; - doRequest({ - method: 'POST', - urlPattern: [VIEW_CONFIG, viewName], - request: { - form: viewConfig - // headers: {'content-type': 'application/x-www-form-urlencoded'}, - }, - noparse: true - }, customParams, function (error, data) { - if (error) { - callback(error, data); - return; - } - self.view_info(viewName, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [VIEW_CONFIG, viewName], + request: { + form: viewConfig, + headers + }, + noparse: true + }, params, function (error, data) { + if (error) { + callback(error, data); + return; + } + self.view_info(viewName, customParams, callback); + }); }); + }, /** @@ -988,17 +1210,23 @@ exports.init = function (host, defaultOptions, defaultParams) { delete_view: function (viewName, customParams, callback) { [viewName, customParams, callback] = doArgs(arguments, ['string', ['object', {}], 'function']); - doRequest({ - method: 'POST', - urlPattern: [VIEW_DELETE, viewName], - noparse: true - }, customParams, function (error, data) { - if (error) { - callback(error, data); - return; - } - callback(null, { name: viewName }); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [VIEW_DELETE, viewName], + noparse: true, + request: { + headers + } + }, params, function (error, data) { + if (error) { + callback(error, data); + return; + } + callback(null, { name: viewName }); + }); }); + }, /** @@ -1012,11 +1240,17 @@ exports.init = function (host, defaultOptions, defaultParams) { customParams.name = jobName; - doRequest({ - method: 'POST', - urlPattern: [VIEW_ADD_JOB, viewName], - noparse: true - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [VIEW_ADD_JOB, viewName], + noparse: true, + request: { + headers + } + }, params, callback); + }); + }, /** @@ -1030,11 +1264,17 @@ exports.init = function (host, defaultOptions, defaultParams) { customParams.name = jobName; - doRequest({ - method: 'POST', - urlPattern: [VIEW_REMOVE_JOB, viewName], - noparse: true - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [VIEW_REMOVE_JOB, viewName], + noparse: true, + request: { + headers + } + }, params, callback); + }); + }, /** @@ -1047,10 +1287,16 @@ exports.init = function (host, defaultOptions, defaultParams) { all_jobs_in_view: function (viewName, customParams, callback) { [viewName, customParams, callback] = doArgs(arguments, ['string', ['object', {}], 'function']); - doRequest({ - urlPattern: [VIEW_INFO, viewName], - bodyProp: 'jobs' - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [VIEW_INFO, viewName], + bodyProp: 'jobs', + request: { + headers + } + }, params, callback); + }); + }, /** ***********************************\ @@ -1068,12 +1314,18 @@ exports.init = function (host, defaultOptions, defaultParams) { customParams.depth = 1; - doRequest({ - urlPattern: [PLUGINS], - failureStatusCodes: [HTTP_CODE_302], - noparse: true, - bodyProp: 'plugins' - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + urlPattern: [PLUGINS], + failureStatusCodes: [HTTP_CODE_302], + noparse: true, + bodyProp: 'plugins', + request: { + headers + } + }, params, callback); + }); + }, /** @@ -1088,16 +1340,20 @@ exports.init = function (host, defaultOptions, defaultParams) { const body = ``; - doRequest({ - method: 'POST', - urlPattern: [INSTALL_PLUGIN], - request: { - body: body, - headers: { 'Content-Type': 'text/xml' } - }, - noparse: true, - bodyProp: 'plugins' - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + headers['Content-Type'] = 'text/xml'; + doRequest({ + method: 'POST', + urlPattern: [INSTALL_PLUGIN], + request: { + body: body, + headers + }, + noparse: true, + bodyProp: 'plugins' + }, params, callback); + }); + }, /** @@ -1120,10 +1376,16 @@ exports.init = function (host, defaultOptions, defaultParams) { customParams.mode = mode; customParams.Submit = 'OK'; - doRequest({ - method: 'POST', - urlPattern: [NEWFOLDER] - }, customParams, callback); + handleCrumbFlagAndRequest(customParams, function (params, headers) { + doRequest({ + method: 'POST', + urlPattern: [NEWFOLDER], + request: { + headers + } + }, params, callback); + }); + } }; }; From b20f5de59d576a42b00d6feadcc95a38d6887984 Mon Sep 17 00:00:00 2001 From: "feijie.xfj" Date: Wed, 15 Jan 2020 15:54:30 +0800 Subject: [PATCH 3/5] =?UTF-8?q?Fix=20=E8=BF=90=E8=A1=8C=E6=97=B6=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/main.js | 1 + src/main.js | 1 + 2 files changed, 2 insertions(+) diff --git a/lib/main.js b/lib/main.js index d5311a9..3ccffbb 100644 --- a/lib/main.js +++ b/lib/main.js @@ -7,6 +7,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol var util = require('util'); var qs = require('querystring'); var request = require('request'); +var url = require('url'); var API = '/api/json'; var LIST = API; diff --git a/src/main.js b/src/main.js index 39c447d..fb0141a 100644 --- a/src/main.js +++ b/src/main.js @@ -3,6 +3,7 @@ const util = require('util'); const qs = require('querystring'); const request = require('request'); +const url = require('url') const API = '/api/json'; const LIST = API; From da3d757d5df6384f55751b030f7c1ec7833b8b82 Mon Sep 17 00:00:00 2001 From: wb-zby411136 Date: Wed, 15 Jan 2020 16:19:26 +0800 Subject: [PATCH 4/5] =?UTF-8?q?flag=E4=B8=A5=E6=A0=BC=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/main.js | 10 +++++++--- src/main.js | 11 ++++++++--- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/lib/main.js b/lib/main.js index d5311a9..655217a 100644 --- a/lib/main.js +++ b/lib/main.js @@ -7,6 +7,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol var util = require('util'); var qs = require('querystring'); var request = require('request'); +var url = require('url'); var API = '/api/json'; var LIST = API; @@ -308,8 +309,9 @@ exports.init = function (host, defaultOptions, defaultParams) { return new Promise(function (resolve, reject) { request(requestOptions, function (error, response, body) { - if (error) { - callback(err); + if (response.statusCode != 200) { + reject(response.statusMessage); + return; } var res = {}; @@ -336,13 +338,15 @@ exports.init = function (host, defaultOptions, defaultParams) { function handleCrumbFlagAndRequest(customParams, func) { var headers = { 'Content-Type': 'application/xml;charset=UTF-8' }; - if (customParams.crumbFlag) { + if (customParams.crumbFlag === true) { getCrumbData().then(function (crumbData) { // console.log(crumbData); headers.Cookie = crumbData.JSESSIONID; customParams['Jenkins-Crumb'] = crumbData.crumb; delete customParams.crumbFlag; func(customParams, headers); + }).catch(function () { + console.log("get crumbData failed."); }); } else { func(customParams, headers); diff --git a/src/main.js b/src/main.js index 39c447d..7d40dc2 100644 --- a/src/main.js +++ b/src/main.js @@ -3,6 +3,7 @@ const util = require('util'); const qs = require('querystring'); const request = require('request'); +const url = require('url'); const API = '/api/json'; const LIST = API; @@ -252,8 +253,9 @@ exports.init = function (host, defaultOptions, defaultParams) { return new Promise(function (resolve, reject) { request(requestOptions, function (error, response, body) { - if (error) { - callback(err); + if (response.statusCode != 200) { + reject(response.statusMessage); + return } var res = {} @@ -280,7 +282,7 @@ exports.init = function (host, defaultOptions, defaultParams) { function handleCrumbFlagAndRequest(customParams, func) { var headers = { 'Content-Type': 'application/xml;charset=UTF-8' }; - if (customParams.crumbFlag) { + if (customParams.crumbFlag === true) { getCrumbData().then(function (crumbData) { // console.log(crumbData); headers.Cookie = crumbData.JSESSIONID; @@ -288,6 +290,9 @@ exports.init = function (host, defaultOptions, defaultParams) { delete customParams.crumbFlag; func(customParams, headers); }) + .catch(function () { + console.log("get crumbData failed.") + }) } else { func(customParams, headers); } From d0ae0cbf75a636cf10d744f637a07e059b775a4f Mon Sep 17 00:00:00 2001 From: wb-zby411136 Date: Wed, 15 Jan 2020 16:31:44 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 72 +++++++++++++++++++++++++++---------------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index deed56d..baa65e7 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ If you need additional request parameters you can add them as explained in 'opti #### build ```javascript -jenkins.build('job-in-jenkins', (optional){token: 'jenkins-token', ...}, function(err, data) { +jenkins.build('job-in-jenkins', (optional){token: 'jenkins-token', crumbFlag: true, ...}, function(err, data) { if (err){ return console.log(err); } console.log(data) }); @@ -59,7 +59,7 @@ jenkins.build('job-in-jenkins', (optional){token: 'jenkins-token', ...}, functio #### build_with_params ```javascript -jenkins.build_with_params('job-in-jenkins', (optional){depth: 1, :, token: 'jenkins-token',...}, function(err, data) { +jenkins.build_with_params('job-in-jenkins', (optional){depth: 1, crumbFlag: true, :, token: 'jenkins-token',...}, function(err, data) { if (err){ return console.log(err); } console.log(data) }); @@ -67,7 +67,7 @@ jenkins.build_with_params('job-in-jenkins', (optional){depth: 1, : #### stop build ```javascript -jenkins.stop_build('job-in-jenkins', 'build-number', (optional){token: 'jenkins-token', ...}, function(err, data) { +jenkins.stop_build('job-in-jenkins', 'build-number', (optional){token: 'jenkins-token', crumbFlag: true, ...}, function(err, data) { if (err){ return console.log(err); } console.log(data) }); @@ -75,7 +75,7 @@ jenkins.stop_build('job-in-jenkins', 'build-number', (optional){token: 'jenkins- #### console output ```javascript -jenkins.console_output('job-in-jenkins', 'buildname', (optional) {depth: 1, :, ...}, function(err, data) { +jenkins.console_output('job-in-jenkins', 'buildname', (optional) {depth: 1, crumbFlag: true, :, ...}, function(err, data) { if (err){ return console.log(err); } console.log(data) }); @@ -83,7 +83,7 @@ jenkins.console_output('job-in-jenkins', 'buildname', (optional) {depth: 1, :, ...}, function(err, data) { +jenkins.build_info('job-in-jenkins', 'build-number', (optional) {depth: 1, crumbFlag: true, :, ...}, function(err, data) { if (err){ return console.log(err); } console.log(data) }); @@ -91,7 +91,7 @@ jenkins.build_info('job-in-jenkins', 'build-number', (optional) {depth: 1, :, ...}, function(err, data) { +jenkins.last_build_info('job-in-jenkins', (optional) {depth: 1, crumbFlag: true, :, ...}, function(err, data) { if (err){ return console.log(err); } console.log(data) }); @@ -99,7 +99,7 @@ jenkins.last_build_info('job-in-jenkins', (optional) {depth: 1, :, #### last completed build info ```javascript -jenkins.last_completed_build_info('job-in-jenkins', (optional) {depth: 1, :, ...}, function(err, data) { +jenkins.last_completed_build_info('job-in-jenkins', (optional) {depth: 1, crumbFlag: true, :, ...}, function(err, data) { if (err){ return console.log(err); } console.log(data) }); @@ -107,7 +107,7 @@ jenkins.last_completed_build_info('job-in-jenkins', (optional) {depth: 1, :, ...}, function(err, data) { +jenkins.all_builds('job-in-jenkins', (optional) {depth: 1, crumbFlag: true, :, ...}, function(err, data) { if (err){ return console.log(err); } console.log(data) }); @@ -115,7 +115,7 @@ jenkins.all_builds('job-in-jenkins', (optional) {depth: 1, :, ...} #### test result/report ```javascript -jenkins.test_result('job-in-jenkins', 'build-number', (optional) {depth: 1, :, ...}, function(err, data) { +jenkins.test_result('job-in-jenkins', 'build-number', (optional) {depth: 1, crumbFlag: true, :, ...}, function(err, data) { if (err){ return console.log(err); } console.log(data) }); @@ -131,7 +131,7 @@ jenkins.test_result('job-in-jenkins', 'build-number', (optional) {depth: 1, :, ...}, function(err, data) { +jenkins.delete_build('job-in-jenkins', 'build-number', (optional) {depth: 1, crumbFlag: true, :, ...}, function(err, data) { if (err){ return console.log(err); } console.log(data) }); @@ -142,7 +142,7 @@ jenkins.delete_build('job-in-jenkins', 'build-number', (optional) {depth: 1, :, ...}, function(err, data) { +jenkins.get_config_xml('job-in-jenkins', (optional) {depth: 1, crumbFlag: true, :, ...}, function(err, data) { if (err){ return console.log(err); } console.log(data) }); @@ -164,7 +164,7 @@ jenkins.update_config('job-to-update' // the new config xml for the new job return config.replace('development','feature-branch'); } - ,(optional){token: 'jenkins-token', ...} + ,(optional){token: 'jenkins-token', crumbFlag: true, ...} ,function(err, data) { // if no error, job was copied if (err){ return console.log(err); } @@ -174,7 +174,7 @@ jenkins.update_config('job-to-update' #### update job ```javascript -jenkins.update_job('job-to-update', xmlConfigString, (optional){token: 'jenkins-token', ...}, function(err, data) { +jenkins.update_job('job-to-update', xmlConfigString, (optional){token: 'jenkins-token', crumbFlag: true, ...}, function(err, data) { // if no error, job was copied if (err){ return console.log(err); } console.log(data) @@ -183,7 +183,7 @@ jenkins.update_job('job-to-update', xmlConfigString, (optional){token: 'jenkins- #### job info ```javascript -jenkins.job_info('job-in-jenkins', (optional) {depth: 1, :, ...}, function(err, data) { +jenkins.job_info('job-in-jenkins', (optional) {depth: 1, crumbFlag: true, :, ...}, function(err, data) { if (err){ return console.log(err); } console.log(data) }); @@ -191,7 +191,7 @@ jenkins.job_info('job-in-jenkins', (optional) {depth: 1, :, ...}, #### create job ```javascript -jenkins.create_job('job-in-jenkins', xmlConfigString, (optional) {depth: 1, :, ...}, function(err, data) { +jenkins.create_job('job-in-jenkins', xmlConfigString, (optional) {depth: 1, crumbFlag: true, :, ...}, function(err, data) { if (err){ return console.log(err); } console.log(data) }); @@ -206,7 +206,7 @@ jenkins.copy_job('job-to-copy' // the new config xml for the new job return config.replace('development','feature-branch'); } - ,(optional){token: 'jenkins-token', ...} + ,(optional){token: 'jenkins-token', crumbFlag: true, ...} ,function(err, data) { // if no error, job was copied if (err){ return console.log(err); } @@ -216,7 +216,7 @@ jenkins.copy_job('job-to-copy' #### delete job ```javascript -jenkins.delete_job('job-in-jenkins', (optional) {depth: 1, :, ...}, function(err, data) { +jenkins.delete_job('job-in-jenkins', (optional) {depth: 1, crumbFlag: true, :, ...}, function(err, data) { if (err){ return console.log(err); } console.log(data) }); @@ -224,7 +224,7 @@ jenkins.delete_job('job-in-jenkins', (optional) {depth: 1, :, ...} #### enable job ```javascript -jenkins.enable_job('job-in-jenkins', (optional) {depth: 1, :, ...}, function(err, data) { +jenkins.enable_job('job-in-jenkins', (optional) {depth: 1, crumbFlag: true, :, ...}, function(err, data) { if (err){ return console.log(err); } console.log(data) }); @@ -232,7 +232,7 @@ jenkins.enable_job('job-in-jenkins', (optional) {depth: 1, :, ...} #### disable job ```javascript -jenkins.disable_job('job-in-jenkins', (optional) {depth: 1, :, ...}, function(err, data) { +jenkins.disable_job('job-in-jenkins', (optional) {depth: 1, crumbFlag: true, :, ...}, function(err, data) { if (err){ return console.log(err); } console.log(data) }); @@ -240,7 +240,7 @@ jenkins.disable_job('job-in-jenkins', (optional) {depth: 1, :, ... #### last success ```javascript -jenkins.last_success('job-in-jenkins', (optional) {depth: 1, :, ...}, function(err, data) { +jenkins.last_success('job-in-jenkins', (optional) {depth: 1, crumbFlag: true, :, ...}, function(err, data) { if (err){ return console.log(err); } console.log(data) }); @@ -248,7 +248,7 @@ jenkins.last_success('job-in-jenkins', (optional) {depth: 1, :, .. #### last result ```javascript -jenkins.last_result('job-in-jenkins', (optional) {depth: 1, :, ...}, function(err, data) { +jenkins.last_result('job-in-jenkins', (optional) {depth: 1, crumbFlag: true, :, ...}, function(err, data) { if (err){ return console.log(err); } console.log(data) }); @@ -259,7 +259,7 @@ jenkins.last_result('job-in-jenkins', (optional) {depth: 1, :, ... #### get all queued items ```javascript -jenkins.queue((optional){token: 'jenkins-token', ...}, function(err, data) { +jenkins.queue((optional){token: 'jenkins-token', crumbFlag: true, ...}, function(err, data) { if (err){ return console.log(err); } console.log(data) }); @@ -267,7 +267,7 @@ jenkins.queue((optional){token: 'jenkins-token', ...}, function(err, data) { #### get one queued item ```javascript -jenkins.queue_item('queue-item-number', (optional) {depth: 1, :, ...}, function(err, data) { +jenkins.queue_item('queue-item-number', (optional) {depth: 1, crumbFlag: true, :, ...}, function(err, data) { if (err){ return console.log(err); } console.log(data) }); @@ -275,7 +275,7 @@ jenkins.queue_item('queue-item-number', (optional) {depth: 1, :, . #### cancel queued item ```javascript -jenkins.cancel_item('queue-item-number', (optional) {depth: 1, :, ...}, function(err, data) { +jenkins.cancel_item('queue-item-number', (optional) {depth: 1, crumbFlag: true, :, ...}, function(err, data) { if (err){ return console.log(err); } console.log(data) }); @@ -283,7 +283,7 @@ jenkins.cancel_item('queue-item-number', (optional) {depth: 1, :, #### get all jenkins computers (aka workers) ```javascript -jenkins.computers((optional){token: 'jenkins-token', ...}, function(err, data) { +jenkins.computers((optional){token: 'jenkins-token', crumbFlag: true, ...}, function(err, data) { if (err){ return console.log(err); } console.log(data) }); @@ -294,7 +294,7 @@ jenkins.computers((optional){token: 'jenkins-token', ...}, function(err, data) { #### get all views ```javascript -jenkins.all_views((optional) {depth: 1, :, ...}, function(err, data) { +jenkins.all_views((optional) {depth: 1, crumbFlag: true, :, ...}, function(err, data) { if (err){ return console.log(err); } console.log(data) }); @@ -302,7 +302,7 @@ jenkins.all_views((optional) {depth: 1, :, ...}, function(err, dat #### create view ```javascript -jenkins.create_view('new-view-name', (optional)viewMode = 'hudson.model.ListView', (optional){token: 'jenkins-token', ...}, function(err, data) { +jenkins.create_view('new-view-name', (optional)viewMode = 'hudson.model.ListView', (optional){token: 'jenkins-token', crumbFlag: true, ...}, function(err, data) { if (err){ return console.log(err); } console.log(data) }); @@ -310,7 +310,7 @@ jenkins.create_view('new-view-name', (optional)viewMode = 'hudson.model.ListView #### view info ```javascript -jenkins.create_view('view-name', (optional){token: 'jenkins-token', ...}, function(err, data) { +jenkins.create_view('view-name', (optional){token: 'jenkins-token', crumbFlag: true, ...}, function(err, data) { if (err){ return console.log(err); } console.log(data) }); @@ -328,7 +328,7 @@ var viewConfig = { "columns": [{"stapler-class": "hudson.views.StatusColumn", "$class": "hudson.views.StatusColumn"}, {"stapler-class": "hudson.views.WeatherColumn", "$class": "hudson.views.WeatherColumn"}, {"stapler-class": "hudson.views.JobColumn", "$class": "hudson.views.JobColumn"}, {"stapler-class": "hudson.views.LastSuccessColumn", "$class": "hudson.views.LastSuccessColumn"}, {"stapler-class": "hudson.views.LastFailureColumn", "$class": "hudson.views.LastFailureColumn"}, {"stapler-class": "hudson.views.LastDurationColumn", "$class": "hudson.views.LastDurationColumn"}, {"stapler-class": "hudson.views.BuildButtonColumn", "$class": "hudson.views.BuildButtonColumn"}] }; -jenkins.update_view('view-in-jenkins', viewConfig, (optional){token: 'jenkins-token', ...}, function(err, data) { +jenkins.update_view('view-in-jenkins', viewConfig, (optional){token: 'jenkins-token', crumbFlag: true, ...}, function(err, data) { if (err){ return console.log(err); } console.log(data) }); @@ -336,7 +336,7 @@ jenkins.update_view('view-in-jenkins', viewConfig, (optional){token: 'jenkins-to #### delete view ```javascript -jenkins.delete_view('view-in-jenkins', (optional){token: 'jenkins-token', ...}, function(err, data) { +jenkins.delete_view('view-in-jenkins', (optional){token: 'jenkins-token', crumbFlag: true, ...}, function(err, data) { if (err){ return console.log(err); } console.log(data) }); @@ -344,7 +344,7 @@ jenkins.delete_view('view-in-jenkins', (optional){token: 'jenkins-token', ...}, #### add job to view ```javascript -jenkins.add_job_to_view('view-in-jenkins', 'job-in-jenkins', (optional) {depth: 1, :, ...}, function(err, data) { +jenkins.add_job_to_view('view-in-jenkins', 'job-in-jenkins', (optional) {depth: 1, crumbFlag: true, :, ...}, function(err, data) { if (err){ return console.log(err); } console.log(data) }); @@ -352,7 +352,7 @@ jenkins.add_job_to_view('view-in-jenkins', 'job-in-jenkins', (optional) {depth: #### remove job from view ```javascript -jenkins.remove_job_from_view('view-in-jenkins', 'job-in-jenkins', (optional) {depth: 1, :, ...}, function(err, data) { +jenkins.remove_job_from_view('view-in-jenkins', 'job-in-jenkins', (optional) {depth: 1, crumbFlag: true, :, ...}, function(err, data) { if (err){ return console.log(err); } console.log(data) }); @@ -360,7 +360,7 @@ jenkins.remove_job_from_view('view-in-jenkins', 'job-in-jenkins', (optional) {de #### get all jobs in view ```javascript -jenkins.all_jobs_in_view('view-in-jenkins', (optional) {depth: 1, :, ...}, function(err, data) { +jenkins.all_jobs_in_view('view-in-jenkins', (optional) {depth: 1, crumbFlag: true, :, ...}, function(err, data) { if (err){ return console.log(err); } console.log(data) }); @@ -371,7 +371,7 @@ jenkins.all_jobs_in_view('view-in-jenkins', (optional) {depth: 1, :