244 lines
6.7 KiB
Go
244 lines
6.7 KiB
Go
|
package main
|
|||
|
|
|||
|
import (
|
|||
|
"flag"
|
|||
|
"fmt"
|
|||
|
"io"
|
|||
|
"io/ioutil"
|
|||
|
"os"
|
|||
|
"os/exec"
|
|||
|
"path"
|
|||
|
)
|
|||
|
|
|||
|
type App struct {
|
|||
|
DevImage string
|
|||
|
Image string
|
|||
|
Path string
|
|||
|
CmdFile string
|
|||
|
Doc string
|
|||
|
Env string
|
|||
|
}
|
|||
|
|
|||
|
var serviceMap = map[string]App{
|
|||
|
"account": {
|
|||
|
Image: "registry.cn-hangzhou.aliyuncs.com/fontree/account:3.1",
|
|||
|
DevImage: "registry.cn-hangzhou.aliyuncs.com/fontree/account:2.1",
|
|||
|
Path: "D:\\project\\fonchain-account\\",
|
|||
|
CmdFile: "D:\\project\\fonchain-account\\Dockerfile",
|
|||
|
Doc: "D:\\project",
|
|||
|
},
|
|||
|
"seller": {
|
|||
|
Image: "registry.cn-hangzhou.aliyuncs.com/fontree/seller:3.1",
|
|||
|
DevImage: "registry.cn-hangzhou.aliyuncs.com/fontree/seller:2.1",
|
|||
|
Path: "D:\\project\\seller-main\\",
|
|||
|
CmdFile: "D:\\project\\seller-main\\Dockerfile",
|
|||
|
Doc: "D:\\project",
|
|||
|
},
|
|||
|
"task": {
|
|||
|
Image: "registry.cn-hangzhou.aliyuncs.com/fontree/task:3.1",
|
|||
|
DevImage: "registry.cn-hangzhou.aliyuncs.com/fontree/task:2.1",
|
|||
|
Path: "D:\\project\\fonchain-task_microservice\\",
|
|||
|
CmdFile: "D:\\project\\fonchain-task_microservice\\Dockerfile",
|
|||
|
Doc: "D:\\project",
|
|||
|
},
|
|||
|
"auth": {
|
|||
|
Image: "registry.cn-hangzhou.aliyuncs.com/fontree/auth:3.2",
|
|||
|
DevImage: "registry.cn-hangzhou.aliyuncs.com/fontree/auth:2.2",
|
|||
|
Path: "D:\\project\\fonchain-auth\\",
|
|||
|
CmdFile: "D:\\project\\fonchain-auth\\Dockerfile",
|
|||
|
},
|
|||
|
"chain": {
|
|||
|
Image: "registry.cn-hangzhou.aliyuncs.com/fontree/chain:3.2",
|
|||
|
DevImage: "registry.cn-hangzhou.aliyuncs.com/fontree/chain:2.2",
|
|||
|
Path: "D:\\project\\fontree-chain_microservice\\",
|
|||
|
CmdFile: "D:\\project\\fontree-chain_microservice\\Dockerfile",
|
|||
|
Doc: "D:\\project",
|
|||
|
},
|
|||
|
"mall": {
|
|||
|
Image: "registry.cn-hangzhou.aliyuncs.com/fontree/malltest:3.0",
|
|||
|
DevImage: "registry.cn-hangzhou.aliyuncs.com/fontree/malltest:2.0",
|
|||
|
Path: "D:\\project\\fonchain-main_mall\\",
|
|||
|
CmdFile: "D:\\project\\fonchain-main_mall\\Dockerfile",
|
|||
|
Doc: "D:\\project",
|
|||
|
},
|
|||
|
"approval": {
|
|||
|
Image: "registry.cn-hangzhou.aliyuncs.com/fontree/approval:3.3",
|
|||
|
DevImage: "registry.cn-hangzhou.aliyuncs.com/fontree/approval:2.3",
|
|||
|
Path: "D:\\project\\fonchain-approval\\",
|
|||
|
CmdFile: "D:\\project\\fonchain-approval\\Dockerfile",
|
|||
|
Doc: "D:\\project",
|
|||
|
},
|
|||
|
|
|||
|
"order": {
|
|||
|
Image: "registry.cn-hangzhou.aliyuncs.com/fontree/order:3.1",
|
|||
|
DevImage: "registry.cn-hangzhou.aliyuncs.com/fontree/order:2.1",
|
|||
|
Path: "D:\\project\\fonchain-order\\",
|
|||
|
CmdFile: "D:\\project\\fonchain-order\\Dockerfile",
|
|||
|
Doc: "D:\\project",
|
|||
|
},
|
|||
|
"client": {
|
|||
|
Image: "registry.cn-hangzhou.aliyuncs.com/fontree/client:3.0",
|
|||
|
DevImage: "registry.cn-hangzhou.aliyuncs.com/fontree/client:2.0",
|
|||
|
Path: "C:\\Users\\user054\\Documents\\fonchain-main\\",
|
|||
|
CmdFile: "C:\\Users\\user054\\Documents\\fonchain-main\\Dockerfile",
|
|||
|
},
|
|||
|
"server": {
|
|||
|
Image: "121.229.45.214:9006/main-server",
|
|||
|
DevImage: "121.229.45.214:9006/main-server",
|
|||
|
Path: "D:\\project\\fonchain-main\\",
|
|||
|
CmdFile: "D:\\project\\fonchain-main\\Dockerfile",
|
|||
|
Doc: "D:\\project",
|
|||
|
},
|
|||
|
|
|||
|
"shop_mall": {
|
|||
|
Image: "121.229.45.214:9006/shop-main-server",
|
|||
|
DevImage: "121.229.45.214:9006/shop-main-server",
|
|||
|
Path: "D:\\project\\shop-main\\",
|
|||
|
CmdFile: "D:\\project\\shop-main\\Dockerfile",
|
|||
|
Doc: "D:\\project",
|
|||
|
},
|
|||
|
"shop": {
|
|||
|
Image: "registry.cn-hangzhou.aliyuncs.com/fontree/shop:3.0",
|
|||
|
DevImage: "registry.cn-hangzhou.aliyuncs.com/fontree/shop:2.0",
|
|||
|
Path: "D:\\project\\shop-main\\",
|
|||
|
CmdFile: "D:\\project\\shop-main\\Dockerfile",
|
|||
|
Doc: "D:\\project",
|
|||
|
},
|
|||
|
"artist": {
|
|||
|
Image: "registry.cn-hangzhou.aliyuncs.com/fontree/artistinfo:3.0",
|
|||
|
DevImage: "registry.cn-hangzhou.aliyuncs.com/fontree/artistinfo:2.0",
|
|||
|
Path: "D:\\code\\go\\src\\github.com\\fonchain\\fonchain-artistinfo\\",
|
|||
|
CmdFile: "D:\\code\\go\\src\\github.com\\fonchain\\fonchain-artistinfo\\Dockerfile",
|
|||
|
Doc: "D:\\code\\go\\src\\github.com\\fonchain",
|
|||
|
},
|
|||
|
}
|
|||
|
|
|||
|
func main() {
|
|||
|
|
|||
|
//查询命令所在目录,可用于判断操作系统中是否能用该命令
|
|||
|
//docker build -f ./Dockerfile -t xxx .
|
|||
|
//cmd中执行的命令:ffmpeg -i psg.flv test.mp4
|
|||
|
var name string
|
|||
|
var image string
|
|||
|
var env string
|
|||
|
var envDir string
|
|||
|
var appMap App
|
|||
|
|
|||
|
fmt.Println("1--2-")
|
|||
|
|
|||
|
flag.StringVar(&name, "n", "", "没有服务名称 auth approval account client")
|
|||
|
flag.StringVar(&envDir, "e", "", "没有使用的配置文件信息 auth approval account client")
|
|||
|
flag.Parse()
|
|||
|
|
|||
|
fmt.Printf("---------------执行项目%s,使用配置文件%s\n", name, envDir)
|
|||
|
_, ok := serviceMap[name]
|
|||
|
|
|||
|
if ok == false {
|
|||
|
fmt.Println("没有找对应项目项目")
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
appMap = serviceMap[name]
|
|||
|
if envDir == "test" {
|
|||
|
env = "conf\\" + envDir + "\\"
|
|||
|
image = appMap.DevImage
|
|||
|
} else if envDir == "prod" {
|
|||
|
env = "conf\\" + envDir + "\\"
|
|||
|
image = appMap.Image
|
|||
|
} else {
|
|||
|
fmt.Println("没有配置配置文件")
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
s, _ := GetAllFile(appMap.Path+env, []string{})
|
|||
|
fmt.Println(s)
|
|||
|
for _, t := range s {
|
|||
|
fmt.Println(t, path.Base(t))
|
|||
|
copyFile(t, appMap.Path+"conf\\"+path.Base(t))
|
|||
|
}
|
|||
|
|
|||
|
fmt.Println("----------------------------0 配置文件拷贝成功")
|
|||
|
|
|||
|
//构建
|
|||
|
var cmd *exec.Cmd
|
|||
|
|
|||
|
if appMap.Doc == "" {
|
|||
|
cmd = exec.Command("docker", "build", "-f", appMap.CmdFile, "-t", image, ".")
|
|||
|
} else {
|
|||
|
cmd = exec.Command("docker", "build", "-f", appMap.CmdFile, appMap.Doc, "-t", image)
|
|||
|
}
|
|||
|
|
|||
|
cmd.Dir = appMap.Path
|
|||
|
/*
|
|||
|
docker build -t registry.cn-hangzhou.aliyuncs.com/fontree/auth:2.2 .
|
|||
|
docker push registry.cn-hangzhou.aliyuncs.com/fontree/account:2.1
|
|||
|
docker push registry.cn-hangzhou.aliyuncs.com/fontree/account:2.1
|
|||
|
*/
|
|||
|
|
|||
|
//阻塞至等待命令执行完成
|
|||
|
fmt.Println(cmd.String())
|
|||
|
fmt.Println("1---------------", appMap.Path)
|
|||
|
out, err1 := cmd.CombinedOutput()
|
|||
|
|
|||
|
fmt.Printf("%s\n", out)
|
|||
|
if err1 != nil {
|
|||
|
fmt.Println(err1)
|
|||
|
fmt.Println("结束")
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
fmt.Println("------------------1 Success------------------")
|
|||
|
|
|||
|
//成功则去执行docker push操作
|
|||
|
cmd2 := exec.Command("docker", "push", image)
|
|||
|
out2, err2 := cmd2.CombinedOutput()
|
|||
|
|
|||
|
fmt.Printf("%s\n", out2)
|
|||
|
if err2 != nil {
|
|||
|
fmt.Println(err1)
|
|||
|
fmt.Println("结束")
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
fmt.Println("------------------2 Success------------------")
|
|||
|
|
|||
|
//开始重新构建xxx
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
func copyFile(old string, new string) bool {
|
|||
|
op, err1 := os.Open(old)
|
|||
|
of, err2 := os.Create(new)
|
|||
|
if err1 != nil || err2 != nil {
|
|||
|
fmt.Println("文件拷贝失败")
|
|||
|
return false
|
|||
|
}
|
|||
|
defer op.Close()
|
|||
|
defer of.Close()
|
|||
|
_, err := io.Copy(of, op)
|
|||
|
|
|||
|
if err != nil {
|
|||
|
fmt.Println(err)
|
|||
|
return false
|
|||
|
}
|
|||
|
return true
|
|||
|
}
|
|||
|
|
|||
|
func GetAllFile(pathname string, s []string) ([]string, error) {
|
|||
|
rd, err := ioutil.ReadDir(pathname)
|
|||
|
if err != nil {
|
|||
|
fmt.Println("read dir fail:", err)
|
|||
|
return s, err
|
|||
|
}
|
|||
|
|
|||
|
for _, fi := range rd {
|
|||
|
if !fi.IsDir() {
|
|||
|
fullName := pathname + "/" + fi.Name()
|
|||
|
s = append(s, fullName)
|
|||
|
} else { //是文件夹
|
|||
|
//s = append(s, )
|
|||
|
}
|
|||
|
}
|
|||
|
return s, nil
|
|||
|
}
|