Commit 19d06489 authored by zhouzihao's avatar zhouzihao

dev-build函数完成配置替换方案

parent bb85e2b8
......@@ -14,6 +14,10 @@ module.exports = {
var result = await buildshell.build(p_id, env_id, branch, version);
res.end(result);
} catch (error) {
if (_.isObject) {
error = JSON.stringify(error);
}
console.error(error);
res.end(error);
}
})();
......
......@@ -36,7 +36,7 @@ const build = async (p_id, env_id, branch, version) => {
switch (_.lowerCase(typeObj.name)) {
case "java":
await javaBuilder.buildJava(projectObj, envObj, typeObj, configList);
await javaBuilder.buildJava(projectObj, envObj, typeObj, configList, branch, version);
break;
default:
throw new Error("never used type!");
......
// 处理Java 类型的项目构建
var _ = require('lodash');
const execa = require('execa');
const replace = require('replace-in-file');
......@@ -8,14 +9,102 @@ const replace = require('replace-in-file');
* @param {*} envObj 环境信息
* @param {*} typeObj 构建源数据
* @param {*} configList 配置信息
* @param {*} branch 分支
* @param {*} version 版本号
*/
const buildJava = async (projectObj, envObj, typeObj, configList) => {
const buildJava = async (projectObj, envObj, typeObj, configList, branch, version) => {
//start to buid
// 获取项目源数据
var projectMetaData = JSON.parse(projectObj.meta_data);
console.log(JSON.stringify(projectMetaData));
// 下载到的地址
var source_git_url = projectObj.source_git_url;
// 项目名
var project_name = envObj.env_id + "-" + projectObj.name;
// 项目文件夹
var project_dir = __dirname + '/../tmp/' + project_name;
// gitlab操作令牌
var token = envObj.target_git_token;
// 目标gitlab地址
var target_git_url = envObj.target_git_url;
// 目标gitlab用户名
var target_git_name = envObj.target_git_name;
// 删除原项目
let { stdout1 } = await execa('rm', ['-rf', project_dir]);
console.log(JSON.stringify("删除文件夹" + project_dir));
//下载git项目
if (_.isEmpty(branch)) {
branch = "master";
}
let { stdout2 } = await execa(`git`, ['clone', '-b', branch, source_git_url, project_name], { cwd: __dirname + '/../tmp/' })
console.log("下载项目")
// 删除.git 等文件
let { stdout3 } = await execa('rm', ['-rf', project_dir + '/.git']);
console.log("删除,git");
//gitlab 创建项目
let { stdout4 } = await execa('curl', [
'--header',
`"PRIVATE-TOKEN: ${token}"`,
'-X',
'DELETE',
`${target_git_url}/api/v4/projects/{${target_git_name}}%2f${project_name}`
]);
console.log(stdout4);
let { stdout5 } = await execa('curl', [
'--header',
`"PRIVATE-TOKEN: ${token}"`,
'-X',
'POST',
`${target_git_url}/api/v4/projects?name=${project_name}`
]);
console.log(stdout5);
//配置文件替换
if (!_.isEmpty(configList)) {
configList.forEach((config) => {
(async () => {
let configType = config.type;
switch (configType) {
case 1:
// 替换模式
var key_value = JSON.parse(config.content);
if (!_.isEmpty(key_value)) {
const quote = function (str) {
return (str + '').replace(/[.?*+^$[\]\\(){}|-]/g, "\\$&");
};
var from = [];
var to = [];
_.forEach(key_value, function (value, key) {
(async () => {
let quoteKey = quote(key);
console.log(quoteKey);
from.push(eval(`/${quoteKey}/g`));
to.push(value);
})();
});
let options = {
files: `${project_dir}/${config.path}`,
from: from,
to: to,
};
let loga = await replace(options);
console.log(loga);
}
break;
case 2:
// 覆盖模式
break;
default:
console.warn("Unknow Config type");
}
})();
})
}
}
module.exports = {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment