Skip to content

Commit bd7363e

Browse files
author
Johan Hjerling
committed
Added stop build functionality
1 parent 7f97c32 commit bd7363e

3 files changed

Lines changed: 47 additions & 7 deletions

File tree

README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,15 @@ Trigger a build for a job.
8282

8383
* `job_name` _String_
8484

85+
#### `.stopBuild`
86+
87+
Request to stop a build for a job.
88+
89+
##### Parameters
90+
91+
* `job_name` _String_
92+
* `build_number` _Number_
93+
8594
#### `.queue`
8695

8796
Get current build queue.

lib/client.js

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ Jenkins.prototype.lastBuildInfo = function (job, cb) {
3434
var errorMessages = {
3535
404: 'Could not find a last build for job: ' + job
3636
};
37-
3837
return throwErrorBasedOnResponseCode(res, errorMessages, cb);
3938
}
4039

@@ -51,7 +50,6 @@ Jenkins.prototype.buildInfo = function (job, buildNumber, cb) {
5150
var errorMessages = {
5251
404: 'Could not find build #' + buildNumber + ' for job: ' + job
5352
};
54-
5553
return throwErrorBasedOnResponseCode(res, errorMessages, cb);
5654
}
5755
cb(null, body, res);
@@ -67,7 +65,6 @@ Jenkins.prototype.jobInfo = function (job, cb) {
6765
var errorMessages = {
6866
404: 'Could not find job: ' + job
6967
};
70-
7168
return throwErrorBasedOnResponseCode(res, errorMessages, cb);
7269
}
7370

@@ -84,7 +81,6 @@ Jenkins.prototype.buildOutput = function (job, buildNumber, cb) {
8481
var errorMessages = {
8582
404: 'Could not find build #' + buildNumber + ' for job: ' + job
8683
};
87-
8884
return throwErrorBasedOnResponseCode(res, errorMessages, cb);
8985
}
9086

@@ -105,14 +101,31 @@ Jenkins.prototype.build = function (job, cb) {
105101
var errorMessages = {
106102
404: 'Could not find job: ' + job
107103
};
108-
109104
return throwErrorBasedOnResponseCode(res, errorMessages, cb);
110105
}
111106

112107
var message = {
113108
message: 'Build triggered for job: ' + job
114109
};
110+
cb(null, message, res);
111+
});
112+
};
113+
114+
Jenkins.prototype.stopBuild = function (job, buildNumber, cb) {
115+
var url = baseUrl + '/job/' + job + '/' + buildNumber + '/stop';
116+
request.post(url, function (err, res) {
117+
if (err) return cb(err);
115118

119+
if (res.statusCode !== 200 && res.statusCode !== 302) {
120+
var errorMessages = {
121+
404: 'Could not find build #' + buildNumber + ' for job: ' + job
122+
};
123+
return throwErrorBasedOnResponseCode(res, errorMessages, cb);
124+
}
125+
126+
var message = {
127+
message: 'Requested to stop build #' + buildNumber + ' for job: ' + job
128+
};
116129
cb(null, message, res);
117130
});
118131
};
@@ -126,7 +139,6 @@ Jenkins.prototype.jobList = function (cb) {
126139
var errorMessages = {
127140
404: 'Could not find the job list for Jenkins server: ' + baseUrl
128141
};
129-
130142
return throwErrorBasedOnResponseCode(res, errorMessages, cb);
131143
}
132144

@@ -143,7 +155,6 @@ Jenkins.prototype.queue = function (cb) {
143155
var errorMessages = {
144156
404: 'Could not find the build queue for Jenkins server: ' + baseUrl
145157
};
146-
147158
return throwErrorBasedOnResponseCode(res, errorMessages, cb);
148159
}
149160

test/index.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,26 @@ describe('Jenkins', function () {
154154
});
155155
});
156156

157+
describe('stopBuild', function () {
158+
it('return json object for stopBuild', function (done) {
159+
nock('http://jenkins.org').post('/job/job/1/stop').reply(200, '{}');
160+
jenkins.stopBuild('job', 1, function (err, stopResponse) {
161+
assert.ifError(err);
162+
assert.equal(typeof stopResponse, 'object');
163+
done();
164+
});
165+
});
166+
167+
it('throws an error if jenkins returns a 404', function (done) {
168+
nock('http://jenkins.org').post('/job/job/2/stop').reply(404, '{}');
169+
jenkins.stopBuild('job', 2, function (err) {
170+
assert(err);
171+
assert.equal(err.message, 'Could not find build #2 for job: job');
172+
done();
173+
});
174+
});
175+
});
176+
157177
describe('queue', function () {
158178
it('return json object for queue', function (done) {
159179
nock('http://jenkins.org').get('/queue/api/json').reply(200, '{}');

0 commit comments

Comments
 (0)