Toggle navigation
Toggle navigation
This project
Loading...
Sign in
OPENTECH
/
yoho-node-ci
·
Commits
Go to a project
GitLab
Go to group
Project
Activity
Files
Commits
Pipelines
0
Builds
0
Graphs
Milestones
Issues
2
Merge Requests
0
Members
Labels
Wiki
Forks
Network
Create a new issue
Download as
Email Patches
Plain Diff
Browse Files
Authored by
姜枫
8 years ago
Commit
cef16a602c5978b2d2f09bf590ec64f3baf289ed
1 parent
6b574d72
add ci api
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
217 additions
and
1 deletions
apps/ci/build.js
apps/web/actions/api.js
apps/web/routers.js
apps/ci/build.js
View file @
cef16a6
...
...
@@ -39,7 +39,7 @@ class Build {
};
}
run
(
bid
)
{
run
(
bid
,
callback
)
{
this
.
bid
=
bid
;
let
self
=
this
;
this
.
_prebuild
();
...
...
@@ -55,6 +55,7 @@ class Build {
let
diff
=
(
new
Date
()).
getTime
()
-
self
.
startTime
;
let
costTime
=
moment
.
duration
(
diff
,
'ms'
).
humanize
();
self
.
_log
(
`\
n
\
n
==========
build
success
.
cost
:
$
{
costTime
}
=======================
`
)
callback
();
}).
catch
((
e
)
=>
{
console
.
error
(
e
);
self
.
_state
(
'fail'
);
...
...
apps/web/actions/api.js
0 → 100644
View file @
cef16a6
'use strict'
;
const
Router
=
require
(
'koa-router'
);
const
_
=
require
(
'lodash'
);
const
Operation
=
require
(
'../../logger/operation'
);
const
Build
=
require
(
'../../ci/build'
);
const
Deploy
=
require
(
'../../ci/deploy'
);
const
DeployPool
=
require
(
'../../ci/deploy_pool'
);
const
{
Building
,
Project
,
Server
,
DeployInfo
,
RestartInfo
,
DeleteRestartInfo
}
=
require
(
'../../models'
);
let
r
=
new
Router
();
r
.
get
(
'/params'
,
async
(
ctx
)
=>
{
ctx
.
body
=
{
env
:
{
production
:
'线上环境'
,
preview
:
'灰度环境'
},
cloud
:
{
aws
:
'亚马逊'
,
qcloud
:
'腾讯云'
}
};
});
r
.
get
(
'/projects'
,
async
(
ctx
)
=>
{
let
q
=
ctx
.
request
.
query
;
let
cloud
=
_
.
trim
(
q
.
cloud
);
let
query
=
{};
if
(
cloud
)
{
query
.
cloud
=
cloud
;
}
let
projects
=
await
Project
.
find
(
query
);
ctx
.
body
=
_
.
map
(
projects
,
p
=>
{
return
{
id
:
p
.
_id
,
name
:
p
.
name
,
subname
:
p
.
subname
};
});
});
r
.
get
(
'/publish'
,
async
(
ctx
)
=>
{
let
q
=
ctx
.
request
.
query
;
let
id
=
q
.
id
;
let
env
=
q
.
env
;
let
branch
=
q
.
branch
;
let
p
=
await
Project
.
findById
(
id
);
let
build
=
new
Build
(
p
);
let
{
buildTime
,
distFile
}
=
build
.
build
(
branch
);
let
buildingDoc
=
await
Building
.
insert
({
buildTime
:
buildTime
,
project
:
p
.
name
,
projectId
:
id
,
branch
:
branch
,
env
:
env
,
distFile
:
distFile
,
state
:
'waiting'
,
md5
:
''
,
createdAt
:
new
Date
(),
updatedAt
:
new
Date
()
});
let
building
=
buildingDoc
[
0
];
let
bid
=
building
.
_id
;
build
.
run
(
bid
,
async
()
=>
{
let
targets
=
p
.
deploy
[
env
].
target
;
if
(
typeof
targets
===
'string'
)
{
targets
=
[
targets
];
}
targets
.
forEach
(
async
(
host
)
=>
{
let
deploy
=
new
Deploy
(
p
,
building
,
host
);
DeployPool
.
deploy
(
deploy
);
});
await
Operation
.
action
(
'app'
,
'PROJECT_DEPLOY'
,
'项目分发部署'
,
{
_id
:
bid
,
project
:
p
.
name
,
branch
:
building
.
branch
,
env
:
building
.
env
});
});
await
Operation
.
action
(
'app'
,
'NEW_PROJECT_BUILDING'
,
'新增项目构建'
,
{
_id
:
id
,
project
:
p
.
name
,
branch
:
branch
,
env
:
env
});
ctx
.
body
=
{
code
:
200
,
bid
:
bid
};
});
r
.
get
(
'/builds'
,
async
(
ctx
)
=>
{
let
q
=
ctx
.
request
.
query
;
let
buildings
=
await
Building
.
cfind
({
env
:
q
.
env
,
projectId
:
q
.
id
,
state
:
'success'
}).
sort
({
buildTime
:
-
1
}).
limit
(
30
).
exec
();
ctx
.
body
=
_
.
map
(
buildings
,
b
=>
{
return
{
id
:
b
.
_id
,
createdAt
:
b
.
createdAt
,
buildNo
:
b
.
buildTime
};
});
});
r
.
get
(
'/rollback'
,
async
(
ctx
)
=>
{
let
q
=
ctx
.
request
.
query
;
let
buildingId
=
q
.
id
;
let
building
=
await
Building
.
findById
(
q
.
id
);
if
(
!
building
)
{
ctx
.
body
=
{
code
:
201
,
msg
:
'该版本不存在'
};
}
else
if
(
building
.
state
==
'success'
)
{
let
project
=
await
Project
.
findById
(
building
.
projectId
);
let
targets
=
project
.
deploy
[
building
.
env
].
target
;
if
(
typeof
targets
===
'string'
)
{
targets
=
[
targets
];
}
targets
.
forEach
(
async
(
host
)
=>
{
let
doc
=
await
DeployInfo
.
findOne
({
projectId
:
project
.
_id
,
host
:
host
,
env
:
building
.
env
});
if
(
!
doc
||
doc
.
state
!==
'running'
||
doc
.
building
!==
building
.
buildTime
)
{
let
deploy
=
new
Deploy
(
project
,
building
,
host
);
// if (project.type === 'php') {
// deploy = new DeployPhp(project, building, host);
// } else {
// deploy = new Deploy(project, building, host);
// }
DeployPool
.
deploy
(
deploy
);
}
});
await
Operation
.
action
(
ctx
.
session
.
user
,
'PROJECT_DEPLOY'
,
'项目分发部署'
,
{
_id
:
buildingId
,
project
:
project
.
name
,
branch
:
building
.
branch
,
env
:
building
.
env
});
ctx
.
body
=
{
code
:
200
,
targets
:
targets
};
}
else
{
ctx
.
body
=
{
code
:
201
,
msg
:
'该版本未构建成功,暂不能分发'
};
}
});
r
.
get
(
'/state'
,
async
(
ctx
)
=>
{
let
q
=
ctx
.
request
.
query
;
let
building
=
await
Building
.
findById
(
q
.
bid
);
let
doc
=
await
DeployInfo
.
find
({
projectId
:
building
.
projectId
,
env
:
building
.
env
,
building
:
building
.
buildTime
});
let
deploys
=
_
.
map
(
doc
,
d
=>
{
return
{
host
:
d
.
host
,
state
:
d
.
state
};
});
ctx
.
body
=
{
build
:
building
.
state
,
deploy
:
deploys
};
});
module
.
exports
=
r
;
\ No newline at end of file
...
...
apps/web/routers.js
View file @
cef16a6
...
...
@@ -16,6 +16,7 @@ const productCache = require( './actions/product_cache');
const
apiCache
=
require
(
'./actions/api_cache'
);
const
degrade
=
require
(
'./actions/degrade'
);
const
deploy
=
require
(
'./actions/deploy'
);
const
api
=
require
(
'./actions/api'
);
const
noAuth
=
new
Router
();
const
base
=
new
Router
();
...
...
@@ -24,6 +25,7 @@ module.exports = function (app) {
noAuth
.
use
(
''
,
login
.
routes
(),
login
.
allowedMethods
());
noAuth
.
use
(
''
,
common
.
routes
(),
common
.
allowedMethods
());
noAuth
.
use
(
'/api'
,
api
.
routes
(),
api
.
allowedMethods
());
app
.
use
(
noAuth
.
routes
(),
noAuth
.
allowedMethods
());
app
.
use
(
async
(
ctx
,
next
)
=>
{
...
...
@@ -48,6 +50,8 @@ module.exports = function (app) {
base
.
use
(
'/degrade'
,
degrade
.
routes
(),
degrade
.
allowedMethods
());
base
.
use
(
'/deploys'
,
deploy
.
routes
(),
deploy
.
allowedMethods
());
base
.
use
(
''
,
index
.
routes
(),
index
.
allowedMethods
());
app
.
use
(
base
.
routes
(),
base
.
allowedMethods
());
...
...
Please
register
or
login
to post a comment