2016-06-16 12 views
7

प्राप्त नहीं करता है मैं प्रोग्रामिंग के लिए जेनकिन्स नौकरियों को बनाने के लिए प्रोग्रामिंग के लिए नोड.जेएस का उपयोग करने की कोशिश कर रहा हूं।जेनकींस गिट प्लगइन पोस्ट पैरामीटर

मैं पैरामीटर को पोस्ट डेटा के रूप में भेज रहा हूं, जैसा कि नीचे दिखाया गया है। हालांकि, कोई फर्क नहीं पड़ता कि मैं ref को कितना मूल्य आवंटित करता हूं, जेनकींस डिफ़ॉल्ट पैरामीटर मान (नौकरी की कॉन्फ़िगरेशन में निर्दिष्ट) के साथ बिल्ड चलाता है। मैंने URL में क्वेरी स्ट्रिंग के रूप में पैरामीटर में गुजरने का प्रयास किया है, लेकिन यह भी काम नहीं करता है।

मैं जेनकींस v1.651.1 और नोड v6.2.0 का उपयोग कर रहा हूं। के रूप में मैं Node.js पता नहीं है,

function makeRequest (object, callback, responseCB, postData) { 
    var accumulator = ''; 

    var parsedUrl = u.parse('//' + object.url, true, true); 

    var options = { 
     hostname: parsedUrl.hostname, 
     port: object.port || 8080, 
     path: parsedUrl.path, 
     method: object.method || 'GET', 
     auth: getAuthByHost(parsedUrl.hostname) 
    }; 

    if (object.headers) { 
     options.headers = object.headers; 
    } 

    var response = null; 
    var req = http.request(options, function(res) { 
     response = res; 

     res.on('data', function (data) { 
      accumulator = accumulator + data.toString(); 
      res.resume(); 
     }); 

     res.on('close', function() { 
      // first assume accumulator is JSON object 
      var responseContent; 
      try { 
       responseContent = JSON.parse(accumulator); 
      } 
      // if not object, use accumulator as string 
      catch (err) { 
       responseContent = accumulator; 
      } 

      callback(responseContent, response.statusCode); 


      if (responseCB) { 
       responseCB(res); 
      } 

     }); 
    }); 

    req.on('close', function() { 

     // first assume accumulator is JSON object 
     var responseContent; 
     try { 
      responseContent = JSON.parse(accumulator); 
     } 
     catch (err) { 
      responseContent = accumulator; 
     } 

     callback(responseContent, response.statusCode); 

     if (responseCB) { 
      responseCB(response); 
     } 

    }); 

    if (postData) { 
     req.write(postData); 
    } 

    req.end(); 
} 
+0

क्या आप अपनी मेकरेक्वेट विधि साझा कर सकते हैं? –

+0

@Tizkiko ने makeRequest फ़ंक्शन –

उत्तर

4

इस कोशिश, यह मेरे लिए काम करता है:

var auth = 'Basic yourUserToken'; 
var jobOptions = { 
    url:'jenkinsHostName:8080/jenkins/job/jobName/' +'build', 
    method: 'POST', 
    port: 8080 
}; 

var parameter = {"parameter": [{"name":"ref", "value":"origin/master"}]}; 
var postData; 
if (!_.isEmpty(parameter)) { 

    var jsonParametersString = JSON.stringify(parameter); 
    jobOptions.headers = { 
     'Authorization':auth, 
     'Content-Type': 'application/x-www-form-urlencoded', 
    }; 

    jobOptions.url += '?token=jobRemoteTriggerToken'; 
    postData = "json="+jsonParametersString; 

    console.log("postData = " + postData); 
} 
var callback; 
var responseCB; 
makeRequest(jobOptions, callback, responseCB, postData) ; 

यह अपने कोड पर आधारित है। मैंने क्वेरीस्ट्रिंग को हटा दिया - ऐसा लगता है कि पैरामीटर ऑब्जेक्ट पर प्रदर्शन करते समय यह एक खाली स्ट्रिंग लौटा दी। मैं बदलता/निर्माण करता हूं/निर्माण करने के लिए - यह दूसरी तरफ काम नहीं करता है।

इसके अतिरिक्त, सत्यापित करें कि जब आप शीर्षलेख में 'सामग्री-लंबाई' पास करते हैं, तो यह आपके जेसन पैरामीटर ऑब्जेक्ट को छोटा नहीं करता है (मैंने इसे हटा दिया है)।

यह भी ध्यान दें कि मैंने उपयोगकर्ता एपीआई टोकन का उपयोग किया है, जिसे आप http://yourJenkinsUrl/me/configure पर प्राप्त कर सकते हैं और "दिखाए गए एपीआई टोकन" बटन पर क्लिक कर सकते हैं। enter image description here

+0

को शामिल करने के लिए प्रश्न को अद्यतन किया है उपरोक्त काम गिट पैरामीटर के लिए? जब मैं उपर्युक्त चलाता हूं (हार्डकोडेड पैरामीटर और जॉब रिमोट ट्रिगर टोकन के साथ), जेनकींस अभी भी पंजीकरण नहीं कर रहा है कि मैं गिट पैरामीटर में गुजर रहा हूं। एक अंतर यह है कि मैं उपयोगकर्ता एपीआई टोकन –

+0

के बजाय जेनकिंस के साथ जिथब प्रमाणीकरण का उपयोग कर रहा हूं अद्यतन: जब मैं उपरोक्त कोड को एक स्ट्रिंग पैरामीटर के साथ चलाता हूं, जेनकिंस पंजीकृत करता है कि मैं पैरामीटर में पास करने का प्रयास कर रहा हूं, लेकिन वह मान पंजीकृत नहीं करता है मैं पास करता हूं। वेब क्लाइंट पर, पैरामीटर बॉक्स कुंजी (पैरामीटर नाम) कहता है, इसके बगल में एक खाली बॉक्स (खाली मान फ़ील्ड) के साथ। –

+0

@ जेनेट सी। क्या आपको अभी भी यह समस्या है? क्या आपने सामग्री की लंबाई हटा दी? यह भी ध्यान रखें कि मैंने उपयोग/निर्माण किया है और नहीं/निर्माण WithParameters –

2

इस बारे में सुनिश्चित नहीं हैं - लेकिन शायद यह फिट बैठता है::

var jobOptions = { 
    url: requestedJobObject.url + 'build', 
    method: 'POST', 
    port: 8080 
}; 

// parameters = { "name": "ref", "value": "origin/master" } 
if (!_.isEmpty(parameters)) { 

    var jsonParametersString = JSON.stringify({"parameter": parameters}); 
    var parameterParam = encodeURIComponent(jsonParametersString); 
    parameters.json = parameterParam; 

    jobOptions.headers = { 
     'Content-Type': 'application/x-www-form-urlencoded', 
     'Content-Length': querystring.stringify(parameters).length 
    }; 

    jobOptions.url += 'WithParameters'; 

    postData = querystring.stringify(parameters); 
} 

// jobOptions contains auth field & separates url into hostname and path 
// makes an http request to jobOptions and calls req.write(postData) 
makeRequest(jobOptions, callback, responseCB, postData) 

makeRequest एक http अनुरोध करता है Jenkins remote access API इंगित करता है कि में पैरामीटर इकाई जेसन अनुरोध को सरणी पर इंगित करना चाहिए, भले ही परिभाषित करने के लिए केवल एक पैरामीटर हो।

क्या नीचे परिवर्तन समस्या को ठीक करता है (parameters के आसपास कोण ब्रैकेट को नोट करें)?

[...] 
var jsonParametersString = JSON.stringify({"parameter": [parameters]}); 
[...] 
संबंधित मुद्दे