kef-cloudbuild-runner
Version:
runner for cloudbuild
54 lines (46 loc) • 1.24 kB
JavaScript
;
const path = require('path');
const s_log = require('./log');
const oss = require('ali-oss');
const co = require('co');
const fs = require('fs-extra');
exports.run = function* (options, dest) {
s_log.info('正在上传构建结果');
const oss_client = oss(options.ossConf);
let oss_result,
trytime = 2;
while (1) {
trytime--;
oss_result = yield upload(oss_client, dest);
if (oss_result instanceof Error) {
s_log.error(`上传构建结果到 OSS 出错`);
s_log.error(oss_result);
if (trytime > 0) {
s_log.info(`3s 后重试`);
yield wait(3);
} else {
process.exit(16);
}
} else {
break;
}
};
return {
url: oss_result.url,
md5: dest.md5
};
};
function* upload(oss_client, dest) {
let oss_result = yield co(function* () {
const oss_prefix = `cloudbuild/runner/result/${dest.md5}_${Date.now()}_${parseInt(Math.random() * 100000)}.tar.gz`;
let result = yield oss_client.putStream(oss_prefix, fs.createReadStream(dest.file));
return result;
}).catch(e => e);
return oss_result;
};
function* wait(s) {
s = s || 1;
return new Promise((resolve) => {
setTimeout(resolve, s * 1000);
});
}