|
1 | 1 | package service
|
2 | 2 |
|
3 | 3 | import (
|
| 4 | + "bytes" |
4 | 5 | "fmt"
|
5 | 6 | "github.com/1Panel-dev/1Panel/backend/app/model"
|
6 | 7 | "github.com/1Panel-dev/1Panel/backend/buserr"
|
7 | 8 | "github.com/1Panel-dev/1Panel/backend/constant"
|
8 | 9 | "github.com/1Panel-dev/1Panel/backend/global"
|
9 | 10 | "github.com/1Panel-dev/1Panel/backend/utils/docker"
|
10 | 11 | "github.com/1Panel-dev/1Panel/backend/utils/files"
|
11 |
| - "github.com/docker/cli/cli/command" |
12 | 12 | "github.com/subosito/gotenv"
|
| 13 | + "io" |
13 | 14 | "os"
|
| 15 | + "os/exec" |
14 | 16 | "path"
|
15 | 17 | "strings"
|
16 | 18 | )
|
17 | 19 |
|
18 |
| -func buildRuntime(runtime *model.Runtime, service *docker.ComposeService, oldImageID string) { |
19 |
| - err := service.ComposeBuild() |
| 20 | +func buildRuntime(runtime *model.Runtime, oldImageID string) { |
| 21 | + runtimePath := path.Join(constant.RuntimeDir, runtime.Type, runtime.Name) |
| 22 | + composePath := path.Join(runtimePath, "docker-compose.yml") |
| 23 | + logPath := path.Join(runtimePath, "build.log") |
| 24 | + |
| 25 | + logFile, err := os.OpenFile(logPath, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0666) |
| 26 | + if err != nil { |
| 27 | + fmt.Println("Failed to open log file:", err) |
| 28 | + return |
| 29 | + } |
| 30 | + defer func() { |
| 31 | + _ = logFile.Close() |
| 32 | + }() |
| 33 | + |
| 34 | + cmd := exec.Command("docker-compose", "-f", composePath, "build") |
| 35 | + multiWriterStdout := io.MultiWriter(os.Stdout, logFile) |
| 36 | + cmd.Stdout = multiWriterStdout |
| 37 | + var stderrBuf bytes.Buffer |
| 38 | + multiWriterStderr := io.MultiWriter(&stderrBuf, logFile, os.Stderr) |
| 39 | + cmd.Stderr = multiWriterStderr |
| 40 | + |
| 41 | + err = cmd.Run() |
20 | 42 | if err != nil {
|
21 | 43 | runtime.Status = constant.RuntimeError
|
22 |
| - runtime.Message = buserr.New(constant.ErrImageBuildErr).Error() + ":" + err.Error() |
| 44 | + runtime.Message = buserr.New(constant.ErrImageBuildErr).Error() + ":" + stderrBuf.String() |
23 | 45 | } else {
|
24 | 46 | runtime.Status = constant.RuntimeNormal
|
| 47 | + runtime.Message = "" |
25 | 48 | if oldImageID != "" {
|
26 | 49 | client, err := docker.NewClient()
|
27 | 50 | if err == nil {
|
@@ -83,25 +106,3 @@ func handleParams(image, runtimeType, runtimeDir string, params map[string]inter
|
83 | 106 | envContent = []byte(envStr)
|
84 | 107 | return
|
85 | 108 | }
|
86 |
| - |
87 |
| -func getComposeService(name, runtimeDir string, composeFile, env []byte, skipNormalization bool) (*docker.ComposeService, error) { |
88 |
| - project, err := docker.GetComposeProject(name, runtimeDir, composeFile, env, skipNormalization) |
89 |
| - if err != nil { |
90 |
| - return nil, err |
91 |
| - } |
92 |
| - logPath := path.Join(runtimeDir, "build.log") |
93 |
| - fileOp := files.NewFileOp() |
94 |
| - if fileOp.Stat(logPath) { |
95 |
| - _ = fileOp.DeleteFile(logPath) |
96 |
| - } |
97 |
| - file, err := os.Create(logPath) |
98 |
| - if err != nil { |
99 |
| - return nil, err |
100 |
| - } |
101 |
| - composeService, err := docker.NewComposeService(command.WithOutputStream(file)) |
102 |
| - if err != nil { |
103 |
| - return nil, err |
104 |
| - } |
105 |
| - composeService.SetProject(project) |
106 |
| - return composeService, nil |
107 |
| -} |
|
0 commit comments