Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
N
node-devlop-rest-api
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
zhouzihao
node-devlop-rest-api
Commits
2bb71eae
Commit
2bb71eae
authored
Apr 03, 2020
by
zhouzihao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
dev-支持部署参数
parent
cbc7e122
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
71 additions
and
6 deletions
+71
-6
README.md
README.md
+39
-0
api/buidApi.js
api/buidApi.js
+7
-1
config/common.js
config/common.js
+1
-1
shell/build.js
shell/build.js
+2
-2
shell/java.js
shell/java.js
+22
-2
No files found.
README.md
View file @
2bb71eae
...
@@ -128,6 +128,45 @@ const serve_url = "http://127.0.0.1:3000" //后端想的服务地址
...
@@ -128,6 +128,45 @@ const serve_url = "http://127.0.0.1:3000" //后端想的服务地址
```
```
## [新特性] 部署测试环境
在build中有是否要部署的选项。如果勾选后可以选择要部署的模块列表。(这个数据来自项目)
在测试环境中只有被选中的模块才会更新。但是构建时docker的最新版本都会更新。
这里使用的原理是docker swarm中的update命令。
```
shell
docker service update
--image
{
image_name
}
{
service_name
}
```
这个service_name是服务更新的关键。可以在项目源数据里配置。如果不配置有默认情况。下面将讲详细介绍:
### 配置模式(推荐):
在项目第一次建立之初。要手动启动服务并且指定服务名。
在项目配置源数据时可以指定模块在环境中的服务名方便直接建立。
```
json
{
"module_list"
:[
{
"name"
:
"a"
,
"exec-file"
:
"a-*-b"
,
"deploy"
:{
"dev"
:
"[这里是服务名]"
}
}
]
}
```
注意模块必选使用这种方式进行配置。在deploy中是环境和环境名的键值对。也就说只有配置了对应环境的环境名才能正常的部署。
### 默认模式:
如果系统读不到这个值的话。则会生成一个默认的名字。
```
【环境名】-【模块名】
```
> 环境准备。在对应的dockerSwarm机器的master机器上要注册一个可以运行docker命令的runner。而且要和定义的环境名一致。
# 关于部署
# 关于部署
项目部署在测试环境。地址:http://10.100.9.45/
项目部署在测试环境。地址:http://10.100.9.45/
...
...
api/buidApi.js
View file @
2bb71eae
...
@@ -11,7 +11,13 @@ module.exports = {
...
@@ -11,7 +11,13 @@ module.exports = {
var
env_id
=
_
.
toInteger
(
body
.
env_id
);
var
env_id
=
_
.
toInteger
(
body
.
env_id
);
var
branch
=
body
.
branch
;
var
branch
=
body
.
branch
;
var
version
=
body
.
version
;
var
version
=
body
.
version
;
var
result
=
await
buildshell
.
build
(
p_id
,
env_id
,
branch
,
version
);
// 接受是否发布的数据 没有传的情况下默认没有发布
var
is_deploy
=
_
.
isEmpty
(
body
.
is_deploy
)
?
false
:
body
.
is_deploy
;
//todo 这里的值是字符串还对象
var
deploy_list
=
_
.
isEmpty
(
body
.
deploy_list
)
?
[]
:
body
.
deploy_list
;
var
result
=
await
buildshell
.
build
(
p_id
,
env_id
,
branch
,
version
,
is_deploy
,
deploy_list
);
res
.
end
(
"
{
\"
success
\"
:true}
"
);
res
.
end
(
"
{
\"
success
\"
:true}
"
);
}
catch
(
error
)
{
}
catch
(
error
)
{
console
.
log
(
error
);
console
.
log
(
error
);
...
...
config/common.js
View file @
2bb71eae
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
* 基础配置
* 基础配置
*/
*/
const
config
=
{
const
config
=
{
host
:
'
10.16.
11.106
'
,
host
:
'
10.16.
7.209
'
,
port
:
3000
port
:
3000
}
}
module
.
exports
=
config
;
module
.
exports
=
config
;
\ No newline at end of file
shell/build.js
View file @
2bb71eae
...
@@ -3,7 +3,7 @@ var _ = require('lodash');
...
@@ -3,7 +3,7 @@ var _ = require('lodash');
var
databaseHelper
=
require
(
"
../tools/databaseHelper
"
)
var
databaseHelper
=
require
(
"
../tools/databaseHelper
"
)
var
javaBuilder
=
require
(
'
./java
'
);
var
javaBuilder
=
require
(
'
./java
'
);
const
build
=
async
(
p_id
,
env_id
,
branch
,
version
)
=>
{
const
build
=
async
(
p_id
,
env_id
,
branch
,
version
,
is_deploy
,
deploy_list
)
=>
{
//获取项目基本信息
//获取项目基本信息
var
projectObj
=
await
databaseHelper
.
findOne
(
'
project
'
,
p_id
,
'
p_id
'
);
var
projectObj
=
await
databaseHelper
.
findOne
(
'
project
'
,
p_id
,
'
p_id
'
);
console
.
log
(
JSON
.
stringify
(
projectObj
));
console
.
log
(
JSON
.
stringify
(
projectObj
));
...
@@ -36,7 +36,7 @@ const build = async (p_id, env_id, branch, version) => {
...
@@ -36,7 +36,7 @@ const build = async (p_id, env_id, branch, version) => {
switch
(
_
.
lowerCase
(
typeObj
.
name
))
{
switch
(
_
.
lowerCase
(
typeObj
.
name
))
{
case
"
java
"
:
case
"
java
"
:
await
javaBuilder
.
buildJava
(
projectObj
,
envObj
,
typeObj
,
configList
,
branch
,
version
);
await
javaBuilder
.
buildJava
(
projectObj
,
envObj
,
typeObj
,
configList
,
branch
,
version
,
is_deploy
,
deploy_list
);
break
;
break
;
default
:
default
:
throw
new
Error
(
"
never used type!
"
);
throw
new
Error
(
"
never used type!
"
);
...
...
shell/java.js
View file @
2bb71eae
...
@@ -18,7 +18,7 @@ var config = require("../config/common");
...
@@ -18,7 +18,7 @@ var config = require("../config/common");
* @param {*} branch 分支
* @param {*} branch 分支
* @param {*} version 版本号
* @param {*} version 版本号
*/
*/
const
buildJava
=
async
(
projectObj
,
envObj
,
typeObj
,
configList
,
branch
,
version
)
=>
{
const
buildJava
=
async
(
projectObj
,
envObj
,
typeObj
,
configList
,
branch
,
version
,
is_deploy
,
deploy_list
)
=>
{
//start to buid
//start to buid
// 获取项目源数据
// 获取项目源数据
var
projectMetaData
=
JSON
.
parse
(
projectObj
.
meta_data
);
var
projectMetaData
=
JSON
.
parse
(
projectObj
.
meta_data
);
...
@@ -117,6 +117,7 @@ const buildJava = async (projectObj, envObj, typeObj, configList, branch, versio
...
@@ -117,6 +117,7 @@ const buildJava = async (projectObj, envObj, typeObj, configList, branch, versio
var
docker_build_str
=
""
;
var
docker_build_str
=
""
;
var
docker_tag_str
=
""
;
var
docker_tag_str
=
""
;
var
docker_push_str
=
""
;
var
docker_push_str
=
""
;
var
deploy_str
=
""
;
// todo 处理docker登录问题
// todo 处理docker登录问题
var
username
=
_
.
get
(
envObj
,
'
registry_username
'
);
var
username
=
_
.
get
(
envObj
,
'
registry_username
'
);
...
@@ -133,6 +134,10 @@ const buildJava = async (projectObj, envObj, typeObj, configList, branch, versio
...
@@ -133,6 +134,10 @@ const buildJava = async (projectObj, envObj, typeObj, configList, branch, versio
for
(
let
v
of
module_list
)
{
for
(
let
v
of
module_list
)
{
let
opt
=
""
;
let
opt
=
""
;
var
module_name
=
""
;
var
module_name
=
""
;
//构建项目的服务名
var
deploy_name
=
""
;
if
(
_
.
isString
(
v
))
{
if
(
_
.
isString
(
v
))
{
module_name
=
v
;
module_name
=
v
;
opt
=
{
filePath
:
project_dir
+
"
/
"
+
v
+
"
/pom.xml
"
}
opt
=
{
filePath
:
project_dir
+
"
/
"
+
v
+
"
/pom.xml
"
}
...
@@ -142,6 +147,12 @@ const buildJava = async (projectObj, envObj, typeObj, configList, branch, versio
...
@@ -142,6 +147,12 @@ const buildJava = async (projectObj, envObj, typeObj, configList, branch, versio
}
else
{
}
else
{
throw
new
Error
(
"
错误的类型
"
)
throw
new
Error
(
"
错误的类型
"
)
}
}
deploy_name
=
envObj
.
name
+
"
-
"
+
module_name
;
if
(
_
.
isObject
(
v
)
&&
_
.
has
(
v
,
`devlop.
${
envObj
.
name
}
`
))
{
deploy_name
=
_
.
get
(
v
,
`devlop.
${
envObj
,
name
}
`
);
}
var
pom_object
=
await
pomParserPromise
(
opt
);
var
pom_object
=
await
pomParserPromise
(
opt
);
// console.log(JSON.stringify(pom_object));
// console.log(JSON.stringify(pom_object));
// 这里默认情况下使用通配符 当配置时覆盖
// 这里默认情况下使用通配符 当配置时覆盖
...
@@ -162,6 +173,11 @@ const buildJava = async (projectObj, envObj, typeObj, configList, branch, versio
...
@@ -162,6 +173,11 @@ const buildJava = async (projectObj, envObj, typeObj, configList, branch, versio
docker_tag_str
+=
"
"
+
'
- docker tag ${IMAGE_VERSION_
'
+
service_name
+
'
} ${IMAGE_LATEST_
'
+
service_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_VERSION_
'
+
service_name
+
'
}
'
+
"
\n
"
;
docker_push_str
+=
"
"
+
'
- docker push ${IMAGE_LATEST_
'
+
service_name
+
'
}
'
+
"
\n
"
;
docker_push_str
+=
"
"
+
'
- docker push ${IMAGE_LATEST_
'
+
service_name
+
'
}
'
+
"
\n
"
;
//部署指令
if
(
is_deploy
)
{
deploy_str
+=
"
"
+
`- docker service update --image
${
envObj
.
registry_url
}
/
${
registry_group
}
/
${
project_name
}
/
${
image_name
}
:
${
version
}
${
deploy_name
}
`
+
"
\n
"
}
// 这里要写dockerfile
// 这里要写dockerfile
fs
.
writeFileSync
(
`
${
project_dir
}
/
${
dockerfile_name
}
`
,
typeObj
.
docker_file
);
fs
.
writeFileSync
(
`
${
project_dir
}
/
${
dockerfile_name
}
`
,
typeObj
.
docker_file
);
...
@@ -171,6 +187,8 @@ const buildJava = async (projectObj, envObj, typeObj, configList, branch, versio
...
@@ -171,6 +187,8 @@ const buildJava = async (projectObj, envObj, typeObj, configList, branch, versio
}
}
await
replaceFileByMap
(
dockerfile_map
,
`
${
project_dir
}
/
${
dockerfile_name
}
`
);
await
replaceFileByMap
(
dockerfile_map
,
`
${
project_dir
}
/
${
dockerfile_name
}
`
);
}
}
console
.
log
(
"
部署脚本
"
);
console
.
log
(
deploy_str
);
// 在这里保存数据正好
// 在这里保存数据正好
var
log_data
=
{
var
log_data
=
{
...
@@ -203,7 +221,9 @@ const buildJava = async (projectObj, envObj, typeObj, configList, branch, versio
...
@@ -203,7 +221,9 @@ const buildJava = async (projectObj, envObj, typeObj, configList, branch, versio
"
{docker_push_str}
"
:
_
.
trimEnd
(
docker_push_str
,
"
\n
"
),
"
{docker_push_str}
"
:
_
.
trimEnd
(
docker_push_str
,
"
\n
"
),
"
{build_str_java}
"
:
build_script
,
"
{build_str_java}
"
:
build_script
,
"
{success_str}
"
:
success_str
,
"
{success_str}
"
:
success_str
,
"
{fail_str}
"
:
fail_str
"
{fail_str}
"
:
fail_str
,
"
{deploy_str}
"
:
_
.
trimEnd
(
deploy_str
,
"
\n
"
),
"
{tag}
"
:
envObj
.
name
,
};
};
await
replaceFileByMap
(
gitlab_ci_map
,
`
${
project_dir
}
/.gitlab-ci.yml`
);
await
replaceFileByMap
(
gitlab_ci_map
,
`
${
project_dir
}
/.gitlab-ci.yml`
);
// 提供gitlab-ci
// 提供gitlab-ci
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment