gpt4 book ai didi

node.js - Jenkins Git 插件不接收发布的参数

转载 作者:搜寻专家 更新时间:2023-10-31 22:23:46 25 4
gpt4 key购买 nike

我正在尝试使用 Node.js 以编程方式构建采用 Git 参数的 Jenkins 作业。

我将参数作为发布数据发送,如下所示。但是,无论我为 ref 分配什么值,Jenkins 都会使用默认参数值(在作业配置中指定)运行构建。我试过在 URL 中将参数作为查询字符串传递,但这也没有用。

我正在使用 Jenkins v1.651.1 和 Node v6.2.0。

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 请求:

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();
}

最佳答案

试试这个,它对我有用:

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) ;

它基于您的代码。我删除了查询字符串——它似乎在对参数对象执行时返回了一个空字符串。我将/buildWithParameters 更改为/build - 否则它不起作用。

此外,验证当您在 header 中传递“Content-Length”时,它不会截断您的 json 参数对象(我将其删除)。

另请注意,我使用了用户 API token ,您可以在 http://yourJenkinsUrl/me/configure 获得该 token 然后单击“显示的 API token ”按钮。 enter image description here

关于node.js - Jenkins Git 插件不接收发布的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37867124/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com