Commit ea4e5528 authored by zhouzihao's avatar zhouzihao

dev-添加ci文件

parent e40c57ac
......@@ -576,6 +576,15 @@
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
},
"pom-parser": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/pom-parser/-/pom-parser-1.2.0.tgz",
"integrity": "sha512-v5QRdaXWS/Qg2KX3rYNSI8dxuEH1DVh8HcayKQwqfaGFVzI5EJxHqK2ThBBsRvmscEHkbyPrBzno1sq9l54uiA==",
"requires": {
"traverse": "^0.6.6",
"xml2js": "^0.4.9"
}
},
"process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
......@@ -664,6 +673,11 @@
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"sax": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
},
"send": {
"version": "0.17.1",
"resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
......@@ -792,6 +806,11 @@
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
"integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
},
"traverse": {
"version": "0.6.6",
"resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz",
"integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc="
},
"type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
......@@ -849,6 +868,20 @@
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"xml2js": {
"version": "0.4.23",
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz",
"integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==",
"requires": {
"sax": ">=0.6.0",
"xmlbuilder": "~11.0.0"
}
},
"xmlbuilder": {
"version": "11.0.1",
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
"integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="
},
"y18n": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
......
......@@ -4,6 +4,7 @@ const execa = require('execa');
const replace = require('replace-in-file');
const fs = require('fs');
var sleep = require('sleep');
var pomParser = require("pom-parser");
/**
* 构建Java项目
......@@ -32,6 +33,10 @@ const buildJava = async (projectObj, envObj, typeObj, configList, branch, versio
var target_git_url = envObj.target_git_url;
// 目标gitlab用户名
var target_git_name = envObj.target_git_name;
// 仓库分组地址
var registry_group = envObj.registry_group;
var registry_url = envObj.registry_url;
// 删除原项目
let { stdout1 } = await execa('rm', ['-rf', project_dir]);
......@@ -96,10 +101,77 @@ const buildJava = async (projectObj, envObj, typeObj, configList, branch, versio
})();
})
}
// 创建dockerfile
// 先看看build语句
// 默认跳过测试
var build_script = _.get(projectMetaData, "build_script", "mvn clean install package -Dmaven.test.skip=true");
// 识别要扫描的模块
var module_list = _.get(projectMetaData, "module_list", ["."]);
// 初始化变量
var variables_str = "";
var cache = "";
var docker_build_str = "";
var docker_tag_str = "";
var docker_push_str = "";
// todo 处理docker登录问题
var username = _.get(envObj, 'registry_username');
var password = _.get(envObj, 'registry_password');
// docker login ${IMAGE_HOST} -u yzy -p 123qweQWE@
if (!_.isEmpty(username) && !_.isEmpty(password)) {
docker_build_str += "docker login ${IMAGE_HOST} -u " + username + " -p " + password;
}
// 关键替换
for (let v of module_list) {
let opt = { filePath: project_dir + "/" + v + "/pom.xml" }
var pom_object = await pomParserPromise(opt);
// console.log(JSON.stringify(pom_object));
// 这里默认情况下使用通配符
var executeFIle = "*.jar";
var service_name = pom_object.project.name;
var dockerfile_name = "dockerfile_" + service_name;
variables_str += " " + "IMAGE_NAME-" + service_name + ': "${IMAGE_HOST}/' + registry_group + '/${CI_PROJECT_NAME}/' + _.lowerCase(service_name) + '"' + "\n";
variables_str += " " + 'IMAGE_VERSION-' + service_name + ': "${IMAGE_HOST}/' + registry_group + '/${CI_PROJECT_NAME}/' + _.lowerCase(service_name) + ':${CI_COMMIT_TAG}"' + "\n";
variables_str += " " + 'IMAGE_LATEST-' + service_name + ': "${IMAGE_HOST}/' + registry_group + '/${CI_PROJECT_NAME}/' + _.lowerCase(service_name) + ':latest"' + "\n";
//缓存地址
cache += " - " + v + "/target/\n";
docker_build_str += " " + "- docker build -t ${IMAGE_VERSION-" + service_name + "} -f " + dockerfile_name + " ." + "\n";
docker_tag_str += " " + '- docker tag ${IMAGE_VERSION-' + service_name + '} ${IMAGE_LATEST' + service_name + '}' + "\n";
docker_push_str += " " + '- docker push ${IMAGE_VERSION-' + service_name + '}' + "\n";
docker_push_str += " " + '- docker push ${IMAGE_LATEST-' + service_name + '}' + "\n";
// 这里要写dockerfile
}
// 创建gitlab-ci
fs.writeFileSync(`${project_dir}/.gitlab-ci.yml`, typeObj.gitlab_ci);
var gitlab_ci_map = {
"${registry_url}": registry_url,
"{variables_str}": variables_str,
"{cache}": cache,
"{docker_build_str}": _.trimEnd(docker_build_str, "\n"),
"{docker_tag_str}": _.trimEnd(docker_tag_str, "\n"),
"{docker_push_str}": _.trimEnd(docker_push_str, "\n"),
"{build_str_java}": build_script
};
await replaceFileByMap(gitlab_ci_map, `${project_dir}/.gitlab-ci.yml`);
// 提供gitlab-ci
// 这个是循环的!!!!
// 创建dockerfile
// fs.writeFileSync(`${project_dir}/dockerfile`, typeObj.docker_file);
// 替换dokerfile
// todo 创建docker-compose
// 替换docker-compose
// 提交上传代码
// 打上tag
}
/**
......@@ -133,6 +205,22 @@ const replaceFileByMap = async (map, patch) => {
}
/**
* promise 版的解析Pom文件
* @param {*} opt
*/
var pomParserPromise = (opts) => {
return new Promise((reslove, reject) => {
pomParser.parse(opts, function (err, pomResponse) {
if (err) {
console.log("ERROR: " + err);
reject(err);
}
reslove(pomResponse.pomObject);
});
});
}
module.exports = {
buildJava,
}
\ No newline at end of file
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