Skip to content

Commit

Permalink
Support for logs
Browse files Browse the repository at this point in the history
  • Loading branch information
wtrocki committed Dec 3, 2016
1 parent aadf748 commit 871db65
Show file tree
Hide file tree
Showing 8 changed files with 138 additions and 21 deletions.
Empty file modified bin/digkins.js
100644 → 100755
Empty file.
11 changes: 7 additions & 4 deletions lib/api/createJob.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
var fs = require("fs");
var path = require('path');
var _ = require('underscore');
var authHelper = require("../util/auth")

/**
* Create jenkins job
* */
*/
module.exports = (auth, jobArgs, callback) => {
var options = require("../util/auth").createJenkinsOptions(auth.url, auth.user, auth.password);
var options = authHelper.createJenkinsOptions(auth.url, auth.user, auth.password);
var jenkins = require('jenkins')(options);
var fileLocation = path.join(__dirname, ' ..', '..', 'templates', 'standard.xml');
var fileContent = fs.readFileSync(fileLocation,'utf8');
var fileLocation = path.join(__dirname, '..', '..', 'templates', 'standard.xml');
var fileContent = fs.readFileSync(fileLocation, 'utf8');
if (fileContent) {
var jobTemplate = _.template(fileContent);
jobXML = jobTemplate(jobArgs);
Expand All @@ -20,6 +21,8 @@ module.exports = (auth, jobArgs, callback) => {
jenkins.job.create(options, function (err, data) {
callback(err, data);
});
} else {
callback("Standard template is missing!");
}

}
Expand Down
39 changes: 39 additions & 0 deletions lib/api/streamLogs.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
var fs = require("fs");
var path = require('path');
var _ = require('underscore');
var authHelper = require("../util/auth");

/**
* Stream jenkins logs
*/
module.exports = (auth, jobName, queueNumber,writter, callback) => {
var options = authHelper.createJenkinsOptions(auth.url, auth.user, auth.password);
var jenkins = require('jenkins')(options);
jenkins.queue.item(queueNumber, function (err, data) {
if (err) {
callback(err);
return;
}
if (!data.executable || !data.executable.number) {
return writter.log("Build did not started yet! Try again later");
}
var buildNo = data.executable.number;

const logStream = jenkins.build.logStream(jobName, buildNo);
writter.log(`## Starting streaming build ${buildNo} log`);
logStream.on('data', function (text) {
writter.log(text);
});
logStream.on('error', function (err) {
writter.error(err);
});

logStream.on('end', function () {
writter.log('Build finished'.gray);
callback(err, data);
});
});
}



18 changes: 18 additions & 0 deletions lib/api/triggerBuild.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
var fs = require("fs");
var path = require('path');
var _ = require('underscore');
var authHelper = require("../util/auth");

/**
* Trigger jenkins build
*/
module.exports = (auth, jobName, callback) => {
var options = authHelper.createJenkinsOptions(auth.url, auth.user, auth.password);
var jenkins = require('jenkins')(options);
jenkins.job.build(jobName, function (err, queueNumber) {
callback(err, queueNumber);
});
}



28 changes: 28 additions & 0 deletions lib/commands/jobs/build.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
// Login into jenkins command
var conf = require("../../util/config");
var logger = require("../../util/logger");
var prompt = require('readline-sync');

var triggerBuild = require("../../api/triggerBuild");

exports.command = 'build <job>'
exports.describe = 'Trigger build for Jenkins job'
exports.builder = (yargs) => {
return yargs.count('verbose').alias('v', 'verbose');
}

exports.handler = (argv) => {
if (!argv.job) {
argv.job = prompt.question('Jenkins job name: ');
}
triggerBuild(conf.get("auth"), argv.job, function (err, queueNumber) {
if (err) {
logger.error(`Problem when triggering new build for ${argv.job} job`);
if (argv.v) {
logger.error(err);
}
return;
}
logger.info(`Build for job ${argv.job} started! Use "log ${argv.job} ${queueNumber}" command to fetch logs`);
});
};
30 changes: 14 additions & 16 deletions lib/commands/jobs/create.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ exports.command = 'create <name> [repository] [branch]'
exports.aliases = ["new"];
exports.describe = 'Create jenkins job for git repository with Jenkinsfile'
exports.builder = (yargs) => {
return yargs.count('verbose').alias('v', 'verbose').default('branch',"master");
return yargs.count('verbose').alias('v', 'verbose');
}

exports.handler = (argv) => {
Expand All @@ -19,24 +19,22 @@ exports.handler = (argv) => {
if (!argv.branch) {
argv.password = prompt.question('Git branch to checkout: ');
}
createJobApi(conf.get("auth"),{
name:argv.name,
repository:argv.repository,
branch:argv.branch
}, function(err,data){
if(err){
logger.error(`Problem when creating ${argv.name} job`);
if(argv.verbose){
logger.error(err);
}
return;
createJobApi(conf.get("auth"), {
name: argv.name,
repository: argv.repository,
branch: argv.branch
}, function (err, data) {
if (err) {
logger.error(`Problem when creating ${argv.name} job`);
if (argv.verbose) {
logger.error(err);
}
return;
}
if(data){
logger.error(`Job ${argv.name} created!`);
if(argv.verbose){
logger.info(`Job ${argv.name} created!`);
if (argv.verbose) {
logger.debug(data);
}
}
});
};

28 changes: 28 additions & 0 deletions lib/commands/logs.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
// Login into jenkins command
var conf = require("../util/config");
var logger = require("../util/logger");
var prompt = require('readline-sync');

var streamLogs = require("../api/streamLogs");

exports.command = 'log <job> <queueid>'
exports.describe = 'Stream jenkins logs for triggered build'
exports.builder = (yargs) => {
return yargs.count('verbose').alias('v', 'verbose');
}

exports.handler = (argv) => {
if (!argv.job) {
argv.job = prompt.question('Jenkins job name: ');
}
streamLogs(conf.get("auth"), argv.job, argv.queueid, console, function (err, data) {
if (err) {
logger.error(`Cannot fetch build log for ${argv.job}`);
if (argv.verbose) {
logger.error(err);
}
return;
}
});
};

5 changes: 4 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@
"name": "digkins",
"version": "1.0.0",
"description": "AeroGear Digger node.js client",
"main": "bin/digkins.js",
"main": "./bin/digkins.js",
"bin": {
"fhc": "./bin/digkins.js"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
Expand Down

0 comments on commit 871db65

Please sign in to comment.