2017-11-07 11:40:44 +08:00
|
|
|
|
// RAINBOND, Application Management Platform
|
|
|
|
|
// Copyright (C) 2014-2017 Goodrain Co., Ltd.
|
2018-01-10 13:35:05 +08:00
|
|
|
|
|
2017-11-07 11:40:44 +08:00
|
|
|
|
// This program is free software: you can redistribute it and/or modify
|
|
|
|
|
// it under the terms of the GNU General Public License as published by
|
|
|
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
|
|
|
// (at your option) any later version. For any non-GPL usage of Rainbond,
|
|
|
|
|
// one or multiple Commercial Licenses authorized by Goodrain Co., Ltd.
|
|
|
|
|
// must be obtained first.
|
2018-01-10 13:35:05 +08:00
|
|
|
|
|
2017-11-07 11:40:44 +08:00
|
|
|
|
// This program is distributed in the hope that it will be useful,
|
|
|
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
// GNU General Public License for more details.
|
2018-01-10 13:35:05 +08:00
|
|
|
|
|
2017-11-07 11:40:44 +08:00
|
|
|
|
// You should have received a copy of the GNU General Public License
|
|
|
|
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
|
|
|
|
package exector
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"fmt"
|
|
|
|
|
"time"
|
|
|
|
|
|
2018-01-10 13:35:05 +08:00
|
|
|
|
"github.com/Sirupsen/logrus"
|
2018-02-07 11:28:31 +08:00
|
|
|
|
//"github.com/docker/docker/client"
|
2018-01-23 12:13:22 +08:00
|
|
|
|
"github.com/coreos/etcd/clientv3"
|
2018-03-01 11:30:54 +08:00
|
|
|
|
"github.com/docker/engine-api/client"
|
|
|
|
|
"github.com/goodrain/rainbond/pkg/db"
|
2017-11-07 11:40:44 +08:00
|
|
|
|
"github.com/goodrain/rainbond/pkg/db/config"
|
2018-03-01 11:30:54 +08:00
|
|
|
|
dbmodel "github.com/goodrain/rainbond/pkg/db/model"
|
2017-11-07 11:40:44 +08:00
|
|
|
|
"github.com/goodrain/rainbond/pkg/event"
|
|
|
|
|
"github.com/goodrain/rainbond/pkg/mq/api/grpc/pb"
|
|
|
|
|
"github.com/tidwall/gjson"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
//Manager 任务执行管理器
|
|
|
|
|
type Manager interface {
|
|
|
|
|
AddTask(*pb.TaskMessage) error
|
|
|
|
|
Start() error
|
|
|
|
|
Stop() error
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//NewManager new manager
|
|
|
|
|
func NewManager(conf config.Config) (Manager, error) {
|
|
|
|
|
dockerClient, err := client.NewEnvClient()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
2018-01-23 12:13:22 +08:00
|
|
|
|
etcdCli, err := clientv3.New(clientv3.Config{
|
|
|
|
|
Endpoints: conf.EtcdEndPoints,
|
|
|
|
|
DialTimeout: 5 * time.Second,
|
|
|
|
|
})
|
2018-01-25 22:10:34 +08:00
|
|
|
|
err = db.CreateManager(conf)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
2018-02-02 12:30:15 +08:00
|
|
|
|
//defer db.CloseManager()
|
2018-01-23 12:13:22 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
logrus.Errorf("create etcd client v3 in service check error, %v", err)
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
2017-11-07 11:40:44 +08:00
|
|
|
|
return &exectorManager{
|
|
|
|
|
DockerClient: dockerClient,
|
2018-03-01 11:30:54 +08:00
|
|
|
|
EtcdCli: etcdCli,
|
2017-11-07 11:40:44 +08:00
|
|
|
|
}, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type exectorManager struct {
|
|
|
|
|
DockerClient *client.Client
|
2018-03-01 11:30:54 +08:00
|
|
|
|
EtcdCli *clientv3.Client
|
2017-11-07 11:40:44 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//TaskType:
|
|
|
|
|
//app_image 云市镜像构建
|
|
|
|
|
//app_slug 云市代码包构建
|
|
|
|
|
//image_manual 自定义镜像
|
|
|
|
|
//code_check 代码检测
|
|
|
|
|
//app_build 源码构建
|
|
|
|
|
func (e *exectorManager) AddTask(task *pb.TaskMessage) error {
|
2017-11-24 11:21:51 +08:00
|
|
|
|
|
2017-11-07 11:40:44 +08:00
|
|
|
|
switch task.TaskType {
|
|
|
|
|
case "app_image":
|
|
|
|
|
e.appImage(task.TaskBody)
|
2018-01-25 22:10:34 +08:00
|
|
|
|
case "build_from_image":
|
|
|
|
|
e.buildFromImage(task.TaskBody)
|
|
|
|
|
case "build_from_source_code":
|
|
|
|
|
e.buildFromSourceCode(task.TaskBody)
|
|
|
|
|
case "build_from_ys":
|
|
|
|
|
e.buildFromYS(task.TaskBody)
|
2017-11-07 11:40:44 +08:00
|
|
|
|
case "app_slug":
|
|
|
|
|
e.appSlug(task.TaskBody)
|
|
|
|
|
case "image_manual":
|
|
|
|
|
e.imageManual(task.TaskBody)
|
|
|
|
|
case "code_check":
|
|
|
|
|
e.codeCheck(task.TaskBody)
|
2018-01-10 13:35:05 +08:00
|
|
|
|
case "service_check":
|
|
|
|
|
e.serviceCheck(task.TaskBody)
|
2017-11-07 11:40:44 +08:00
|
|
|
|
case "app_build":
|
|
|
|
|
e.appBuild(task.TaskBody)
|
|
|
|
|
case "plugin_image_build":
|
|
|
|
|
e.pluginImageBuild(task.TaskBody)
|
|
|
|
|
case "plugin_dockerfile_build":
|
|
|
|
|
e.pluginDockerfileBuild(task.TaskBody)
|
2018-03-05 14:28:59 +08:00
|
|
|
|
case "share-slug":
|
2018-02-05 19:23:59 +08:00
|
|
|
|
e.slugShare(task.TaskBody)
|
2018-03-05 14:28:59 +08:00
|
|
|
|
case "share-image":
|
2018-02-05 19:23:59 +08:00
|
|
|
|
e.imageShare(task.TaskBody)
|
2017-11-07 11:40:44 +08:00
|
|
|
|
default:
|
|
|
|
|
return fmt.Errorf("`%s` tasktype can't support", task.TaskType)
|
|
|
|
|
}
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const appImage = "plugins/app_image.pyc"
|
|
|
|
|
const appSlug = "plugins/app_slug.pyc"
|
|
|
|
|
const appBuild = "plugins/build_work.pyc"
|
|
|
|
|
const codeCheck = "plugins/code_check.pyc"
|
|
|
|
|
const imageManual = "plugins/image_manual.pyc"
|
|
|
|
|
const pluginImage = "plugins/plugin_image.pyc"
|
|
|
|
|
const pluginDockerfile = "plugins/plugin_dockerfile.pyc"
|
|
|
|
|
|
|
|
|
|
func (e *exectorManager) appImage(in []byte) {
|
|
|
|
|
eventID := gjson.GetBytes(in, "event_id").String()
|
2017-12-08 18:14:49 +08:00
|
|
|
|
//dest := gjson.GetBytes(in, "dest").String()
|
|
|
|
|
//finalStatus:="failure"
|
2017-11-07 11:40:44 +08:00
|
|
|
|
logger := event.GetManager().GetLogger(eventID)
|
|
|
|
|
logger.Info("应用镜像构建任务开始执行", map[string]string{"step": "builder-exector", "status": "starting"})
|
|
|
|
|
w := NewWorker(appImage, "", nil, in)
|
2017-11-23 23:09:21 +08:00
|
|
|
|
go func() {
|
2017-11-07 11:40:44 +08:00
|
|
|
|
logrus.Info("start exec app image worker")
|
|
|
|
|
defer event.GetManager().ReleaseLogger(logger)
|
|
|
|
|
for i := 0; i < 3; i++ {
|
|
|
|
|
_, err := w.run(time.Minute * 30)
|
|
|
|
|
if err != nil {
|
|
|
|
|
logrus.Errorf("exec app image python shell error:%s", err.Error())
|
2017-12-15 17:25:09 +08:00
|
|
|
|
if i < 2 {
|
2017-11-07 11:40:44 +08:00
|
|
|
|
logger.Info("应用镜像构建任务执行失败,开始重试", map[string]string{"step": "builder-exector", "status": "failure"})
|
|
|
|
|
} else {
|
|
|
|
|
logger.Info("应用镜像构建任务执行失败", map[string]string{"step": "callback", "status": "failure"})
|
|
|
|
|
}
|
|
|
|
|
} else {
|
2017-12-08 18:14:49 +08:00
|
|
|
|
//finalStatus="success"
|
|
|
|
|
//updateBuildResult(eventID,finalStatus,dest)
|
2017-11-07 11:40:44 +08:00
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-11-23 23:09:21 +08:00
|
|
|
|
}()
|
2017-12-08 18:14:49 +08:00
|
|
|
|
//updateBuildResult(eventID,finalStatus,dest)
|
2017-11-07 11:40:44 +08:00
|
|
|
|
}
|
2018-01-25 22:10:34 +08:00
|
|
|
|
func (e *exectorManager) buildFromImage(in []byte) {
|
|
|
|
|
i := NewImageBuildItem(in)
|
|
|
|
|
i.DockerClient = e.DockerClient
|
2018-03-01 11:30:54 +08:00
|
|
|
|
i.Logger.Info("从镜像构建应用任务开始执行", map[string]string{"step": "builder-exector", "status": "starting"})
|
2018-01-29 11:25:49 +08:00
|
|
|
|
status := "success"
|
2018-01-25 22:10:34 +08:00
|
|
|
|
go func() {
|
|
|
|
|
logrus.Debugf("start build from image worker")
|
|
|
|
|
defer event.GetManager().ReleaseLogger(i.Logger)
|
|
|
|
|
for n := 0; n < 3; n++ {
|
|
|
|
|
err := i.Run(time.Minute * 30)
|
|
|
|
|
if err != nil {
|
|
|
|
|
logrus.Errorf("build from image error: %s", err.Error())
|
|
|
|
|
if n < 2 {
|
2018-03-01 11:30:54 +08:00
|
|
|
|
i.Logger.Error("从镜像构建应用任务执行失败,开始重试", map[string]string{"step": "build-exector", "status": "failure"})
|
|
|
|
|
} else {
|
|
|
|
|
i.Logger.Error("从镜像构建应用任务执行失败", map[string]string{"step": "callback", "status": "failure"})
|
2018-01-29 11:25:49 +08:00
|
|
|
|
status = "failure"
|
2018-01-25 22:10:34 +08:00
|
|
|
|
}
|
2018-03-01 11:30:54 +08:00
|
|
|
|
} else {
|
2018-01-25 22:10:34 +08:00
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}()
|
2018-01-29 11:25:49 +08:00
|
|
|
|
if err := i.UpdateVersionInfo(status); err != nil {
|
|
|
|
|
logrus.Debugf("update version Info error: %s", err.Error())
|
|
|
|
|
}
|
2018-01-25 22:10:34 +08:00
|
|
|
|
}
|
|
|
|
|
|
2018-03-01 11:30:54 +08:00
|
|
|
|
func (e *exectorManager) buildFromSourceCode(in []byte) {
|
2018-01-30 15:10:12 +08:00
|
|
|
|
i := NewSouceCodeBuildItem(in)
|
|
|
|
|
i.DockerClient = e.DockerClient
|
2018-03-01 11:30:54 +08:00
|
|
|
|
i.Logger.Info("从源码构建应用任务开始执行", map[string]string{"step": "builder-exector", "status": "starting"})
|
2018-01-30 15:10:12 +08:00
|
|
|
|
status := "success"
|
|
|
|
|
go func() {
|
|
|
|
|
logrus.Debugf("start build from source code")
|
|
|
|
|
defer event.GetManager().ReleaseLogger(i.Logger)
|
2018-03-01 11:30:54 +08:00
|
|
|
|
for n := 0; n < 3; n++ {
|
2018-01-30 15:10:12 +08:00
|
|
|
|
err := i.Run(time.Minute * 30)
|
|
|
|
|
if err != nil {
|
|
|
|
|
logrus.Errorf("build from source code error: %s", err.Error())
|
|
|
|
|
if n < 2 {
|
2018-03-01 11:30:54 +08:00
|
|
|
|
i.Logger.Error("从源码构建应用任务执行失败,开始重试", map[string]string{"step": "build-exector", "status": "failure"})
|
|
|
|
|
} else {
|
|
|
|
|
i.Logger.Error("从源码构建应用任务执行失败", map[string]string{"step": "callback", "status": "failure"})
|
2018-01-30 15:10:12 +08:00
|
|
|
|
status = "failure"
|
|
|
|
|
}
|
2018-03-01 11:30:54 +08:00
|
|
|
|
} else {
|
2018-01-30 15:10:12 +08:00
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}()
|
|
|
|
|
vi := &dbmodel.VersionInfo{
|
|
|
|
|
FinalStatus: status,
|
|
|
|
|
}
|
|
|
|
|
if err := i.UpdateVersionInfo(vi); err != nil {
|
|
|
|
|
logrus.Debugf("update version Info error: %s", err.Error())
|
|
|
|
|
}
|
2018-01-25 22:10:34 +08:00
|
|
|
|
}
|
|
|
|
|
|
2018-03-04 22:48:50 +08:00
|
|
|
|
//buildFromYS 从云市来源构建应用
|
|
|
|
|
func (e *exectorManager) buildFromYS(in []byte) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2017-11-07 11:40:44 +08:00
|
|
|
|
func (e *exectorManager) appSlug(in []byte) {
|
2017-11-24 16:58:22 +08:00
|
|
|
|
eventID := gjson.GetBytes(in, "event_id").String()
|
2017-11-07 11:40:44 +08:00
|
|
|
|
logger := event.GetManager().GetLogger(eventID)
|
|
|
|
|
logger.Info("应用代码包构建任务开始执行", map[string]string{"step": "builder-exector", "status": "starting"})
|
|
|
|
|
w := NewWorker(appSlug, "", nil, in)
|
2017-11-23 23:09:21 +08:00
|
|
|
|
go func() {
|
2017-11-07 11:40:44 +08:00
|
|
|
|
logrus.Info("start exec app slug worker")
|
|
|
|
|
defer event.GetManager().ReleaseLogger(logger)
|
|
|
|
|
for i := 0; i < 3; i++ {
|
|
|
|
|
_, err := w.run(time.Minute * 30)
|
|
|
|
|
if err != nil {
|
|
|
|
|
logrus.Errorf("exec app slug python shell error:%s", err.Error())
|
2017-12-15 17:25:09 +08:00
|
|
|
|
if i < 2 {
|
2017-11-07 11:40:44 +08:00
|
|
|
|
logger.Info("应用代码包构建任务执行失败,开始重试", map[string]string{"step": "builder-exector", "status": "failure"})
|
|
|
|
|
} else {
|
|
|
|
|
logger.Info("应用代码包构建任务执行失败", map[string]string{"step": "callback", "status": "failure"})
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-11-23 23:09:21 +08:00
|
|
|
|
}()
|
2017-11-07 11:40:44 +08:00
|
|
|
|
}
|
|
|
|
|
func (e *exectorManager) imageManual(in []byte) {
|
|
|
|
|
eventID := gjson.GetBytes(in, "event_id").String()
|
|
|
|
|
logger := event.GetManager().GetLogger(eventID)
|
2017-12-08 18:14:49 +08:00
|
|
|
|
//dest := gjson.GetBytes(in, "dest").String()
|
|
|
|
|
//finalStatus:="failure"
|
2017-11-23 09:57:25 +08:00
|
|
|
|
|
2017-11-07 11:40:44 +08:00
|
|
|
|
logger.Info("应用镜像构建任务开始执行", map[string]string{"step": "builder-exector", "status": "starting"})
|
|
|
|
|
w := NewWorker(imageManual, "", nil, in)
|
2017-11-23 23:09:21 +08:00
|
|
|
|
go func() {
|
2017-11-07 11:40:44 +08:00
|
|
|
|
defer event.GetManager().ReleaseLogger(logger)
|
|
|
|
|
logrus.Info("start exec image manual worker")
|
|
|
|
|
for i := 0; i < 3; i++ {
|
2017-11-23 09:57:25 +08:00
|
|
|
|
_, err := w.run(time.Minute * 30)
|
2017-11-07 11:40:44 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
logrus.Errorf("exec image manual python shell error:%s", err.Error())
|
2017-12-15 17:25:09 +08:00
|
|
|
|
if i < 2 {
|
2017-11-07 11:40:44 +08:00
|
|
|
|
logger.Info("应用镜像构建任务执行失败,开始重试", map[string]string{"step": "builder-exector", "status": "failure"})
|
|
|
|
|
} else {
|
|
|
|
|
logger.Info("应用镜像构建任务执行失败", map[string]string{"step": "callback", "status": "failure"})
|
|
|
|
|
}
|
|
|
|
|
} else {
|
2017-12-08 18:14:49 +08:00
|
|
|
|
//finalStatus="success"
|
|
|
|
|
//updateBuildResult(eventID,finalStatus,dest)
|
2017-11-07 11:40:44 +08:00
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-11-23 23:09:21 +08:00
|
|
|
|
}()
|
2017-12-08 18:14:49 +08:00
|
|
|
|
//updateBuildResult(eventID,finalStatus,dest)
|
2017-11-07 11:40:44 +08:00
|
|
|
|
}
|
|
|
|
|
func (e *exectorManager) codeCheck(in []byte) {
|
|
|
|
|
eventID := gjson.GetBytes(in, "event_id").String()
|
|
|
|
|
logger := event.GetManager().GetLogger(eventID)
|
|
|
|
|
logger.Info("应用代码检测任务开始执行", map[string]string{"step": "builder-exector", "status": "starting"})
|
|
|
|
|
w := NewWorker(codeCheck, "", nil, in)
|
|
|
|
|
go func() {
|
|
|
|
|
logrus.Info("start exec code check worker")
|
|
|
|
|
defer event.GetManager().ReleaseLogger(logger)
|
|
|
|
|
for i := 0; i < 3; i++ {
|
|
|
|
|
_, err := w.run(time.Minute * 30)
|
|
|
|
|
if err != nil {
|
|
|
|
|
logrus.Errorf("exec code check python shell error:%s", err.Error())
|
2017-12-15 17:25:09 +08:00
|
|
|
|
if i < 2 {
|
2017-11-07 11:40:44 +08:00
|
|
|
|
logger.Info("应用镜像构建任务执行失败,开始重试", map[string]string{"step": "builder-exector", "status": "failure"})
|
|
|
|
|
} else {
|
|
|
|
|
logger.Info("应用镜像构建任务执行失败", map[string]string{"step": "callback", "status": "failure"})
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}()
|
|
|
|
|
}
|
|
|
|
|
func (e *exectorManager) appBuild(in []byte) {
|
|
|
|
|
eventID := gjson.GetBytes(in, "event_id").String()
|
2017-12-15 16:49:24 +08:00
|
|
|
|
//finalStatus:="failure"
|
|
|
|
|
//dest := gjson.GetBytes(in, "dest").String()
|
2017-11-07 11:40:44 +08:00
|
|
|
|
logger := event.GetManager().GetLogger(eventID)
|
|
|
|
|
logger.Info("应用编译构建任务开始执行", map[string]string{"step": "builder-exector", "status": "starting"})
|
|
|
|
|
|
|
|
|
|
w := NewWorker(appBuild, "", nil, in)
|
2017-11-23 23:09:21 +08:00
|
|
|
|
go func() {
|
2017-11-07 11:40:44 +08:00
|
|
|
|
logrus.Info("start exec build app worker")
|
|
|
|
|
defer event.GetManager().ReleaseLogger(logger)
|
|
|
|
|
for i := 0; i < 3; i++ {
|
|
|
|
|
_, err := w.run(time.Minute * 30)
|
|
|
|
|
if err != nil {
|
|
|
|
|
logrus.Errorf("exec app build python shell error:%s", err.Error())
|
2017-12-15 17:25:09 +08:00
|
|
|
|
if i < 2 {
|
2017-11-07 11:40:44 +08:00
|
|
|
|
logger.Info("应用编译构建任务执行失败,开始重试", map[string]string{"step": "builder-exector", "status": "failure"})
|
|
|
|
|
} else {
|
|
|
|
|
logger.Info("应用编译构建任务执行失败", map[string]string{"step": "callback", "status": "failure"})
|
|
|
|
|
}
|
|
|
|
|
} else {
|
2017-12-15 16:49:24 +08:00
|
|
|
|
//finalStatus="success"
|
|
|
|
|
//updateBuildResult(eventID,finalStatus,dest)
|
2017-11-07 11:40:44 +08:00
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-11-23 23:09:21 +08:00
|
|
|
|
}()
|
2017-12-15 16:49:24 +08:00
|
|
|
|
//updateBuildResult(eventID,finalStatus,dest)
|
2017-11-07 11:40:44 +08:00
|
|
|
|
}
|
2018-01-10 13:35:05 +08:00
|
|
|
|
|
2018-03-01 11:30:54 +08:00
|
|
|
|
func (e *exectorManager) slugShare(in []byte) {
|
2018-03-04 22:48:50 +08:00
|
|
|
|
i, err := NewSlugShareItem(in, e.EtcdCli)
|
|
|
|
|
if err != nil {
|
|
|
|
|
logrus.Error("create share image task error.", err.Error())
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
i.Logger.Info("开始分享应用", map[string]string{"step": "builder-exector", "status": "starting"})
|
2018-02-07 16:10:26 +08:00
|
|
|
|
status := "success"
|
2018-03-01 11:30:54 +08:00
|
|
|
|
go func() {
|
2018-02-06 17:41:47 +08:00
|
|
|
|
defer event.GetManager().ReleaseLogger(i.Logger)
|
2018-03-01 11:30:54 +08:00
|
|
|
|
for n := 0; n < 3; n++ {
|
2018-03-04 22:48:50 +08:00
|
|
|
|
err := i.ShareService()
|
2018-02-06 17:41:47 +08:00
|
|
|
|
if err != nil {
|
2018-03-04 22:48:50 +08:00
|
|
|
|
logrus.Errorf("image share error: %s", err.Error())
|
2018-02-06 17:41:47 +08:00
|
|
|
|
if n < 2 {
|
2018-03-04 22:48:50 +08:00
|
|
|
|
i.Logger.Error("应用分享失败,开始重试", map[string]string{"step": "builder-exector", "status": "failure"})
|
2018-03-01 11:30:54 +08:00
|
|
|
|
} else {
|
2018-03-04 22:48:50 +08:00
|
|
|
|
i.Logger.Error("分享应用任务执行失败", map[string]string{"step": "builder-exector", "status": "failure"})
|
2018-03-01 11:30:54 +08:00
|
|
|
|
status = "failure"
|
2018-02-06 17:41:47 +08:00
|
|
|
|
}
|
2018-03-01 11:30:54 +08:00
|
|
|
|
} else {
|
2018-03-04 22:48:50 +08:00
|
|
|
|
status = "success"
|
2018-02-06 17:41:47 +08:00
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
}
|
2018-03-04 22:48:50 +08:00
|
|
|
|
if err := i.UpdateShareStatus(status); err != nil {
|
|
|
|
|
logrus.Debugf("Add image share result error: %s", err.Error())
|
|
|
|
|
}
|
2018-02-06 17:41:47 +08:00
|
|
|
|
}()
|
2018-02-05 19:23:59 +08:00
|
|
|
|
}
|
|
|
|
|
|
2018-03-01 11:30:54 +08:00
|
|
|
|
func (e *exectorManager) imageShare(in []byte) {
|
2018-03-04 22:48:50 +08:00
|
|
|
|
i, err := NewImageShareItem(in, e.DockerClient, e.EtcdCli)
|
|
|
|
|
if err != nil {
|
|
|
|
|
logrus.Error("create share image task error.", err.Error())
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
i.Logger.Info("开始分享应用", map[string]string{"step": "builder-exector", "status": "starting"})
|
2018-02-07 16:10:26 +08:00
|
|
|
|
status := "success"
|
2018-03-01 11:30:54 +08:00
|
|
|
|
go func() {
|
2018-02-07 11:11:35 +08:00
|
|
|
|
defer event.GetManager().ReleaseLogger(i.Logger)
|
2018-03-01 11:30:54 +08:00
|
|
|
|
for n := 0; n < 3; n++ {
|
2018-03-04 22:48:50 +08:00
|
|
|
|
err := i.ShareService()
|
2018-02-07 11:11:35 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
logrus.Errorf("image share error: %s", err.Error())
|
|
|
|
|
if n < 2 {
|
2018-03-04 22:48:50 +08:00
|
|
|
|
i.Logger.Error("应用分享失败,开始重试", map[string]string{"step": "builder-exector", "status": "failure"})
|
2018-03-01 11:30:54 +08:00
|
|
|
|
} else {
|
2018-03-04 22:48:50 +08:00
|
|
|
|
i.Logger.Error("分享应用任务执行失败", map[string]string{"step": "builder-exector", "status": "failure"})
|
2018-03-01 11:30:54 +08:00
|
|
|
|
status = "failure"
|
2018-02-07 11:11:35 +08:00
|
|
|
|
}
|
2018-03-01 11:30:54 +08:00
|
|
|
|
} else {
|
2018-03-04 22:48:50 +08:00
|
|
|
|
status = "success"
|
2018-02-07 11:11:35 +08:00
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
}
|
2018-03-04 22:48:50 +08:00
|
|
|
|
if err := i.UpdateShareStatus(status); err != nil {
|
|
|
|
|
logrus.Debugf("Add image share result error: %s", err.Error())
|
|
|
|
|
}
|
2018-02-07 11:11:35 +08:00
|
|
|
|
}()
|
2018-02-05 19:23:59 +08:00
|
|
|
|
}
|
|
|
|
|
|
2017-11-07 11:40:44 +08:00
|
|
|
|
func (e *exectorManager) pluginImageBuild1(in []byte) {
|
|
|
|
|
eventID := gjson.GetBytes(in, "event_id").String()
|
|
|
|
|
logger := event.GetManager().GetLogger(eventID)
|
|
|
|
|
logger.Info("从镜像构建插件任务开始执行", map[string]string{"step": "builder-exector", "status": "starting"})
|
|
|
|
|
|
|
|
|
|
w := NewWorker(pluginImage, "", nil, in)
|
|
|
|
|
go func() {
|
|
|
|
|
logrus.Info("start exec build plugin from image worker")
|
|
|
|
|
defer event.GetManager().ReleaseLogger(logger)
|
|
|
|
|
for i := 0; i < 3; i++ {
|
|
|
|
|
_, err := w.run(time.Minute * 30)
|
|
|
|
|
if err != nil {
|
|
|
|
|
logrus.Errorf("exec plugin build from image python shell error:%s", err.Error())
|
2017-12-15 17:25:09 +08:00
|
|
|
|
if i < 2 {
|
2017-11-07 11:40:44 +08:00
|
|
|
|
logger.Info("镜像构建插件任务执行失败,开始重试", map[string]string{"step": "builder-exector", "status": "failure"})
|
|
|
|
|
} else {
|
|
|
|
|
logger.Info("镜像构建插件任务执行失败", map[string]string{"step": "callback", "status": "failure"})
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (e *exectorManager) pluginDockerfileBuild1(in []byte) {
|
|
|
|
|
eventID := gjson.GetBytes(in, "event_id").String()
|
|
|
|
|
logger := event.GetManager().GetLogger(eventID)
|
|
|
|
|
logger.Info("从dockerfile构建插件任务开始执行", map[string]string{"step": "builder-exector", "status": "starting"})
|
|
|
|
|
|
|
|
|
|
w := NewWorker(pluginDockerfile, "", nil, in)
|
|
|
|
|
go func() {
|
|
|
|
|
logrus.Info("start exec build plugin from image worker")
|
|
|
|
|
defer event.GetManager().ReleaseLogger(logger)
|
|
|
|
|
for i := 0; i < 3; i++ {
|
|
|
|
|
_, err := w.run(time.Minute * 30)
|
|
|
|
|
if err != nil {
|
|
|
|
|
logrus.Errorf("exec plugin build from image python shell error:%s", err.Error())
|
2017-12-15 17:25:09 +08:00
|
|
|
|
if i < 2 {
|
2017-11-07 11:40:44 +08:00
|
|
|
|
logger.Info("dockerfile构建插件任务执行失败,开始重试", map[string]string{"step": "builder-exector", "status": "failure"})
|
|
|
|
|
} else {
|
|
|
|
|
logger.Info("dockerfile构建插件任务执行失败", map[string]string{"step": "callback", "status": "failure"})
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (e *exectorManager) Start() error {
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
func (e *exectorManager) Stop() error {
|
|
|
|
|
return nil
|
|
|
|
|
}
|