MCPcopy Create free account
hub / github.com/1Panel-dev/1Panel / ImageBuild

Method ImageBuild

agent/app/service/image.go:204–264  ·  view source on GitHub ↗
(req dto.ImageBuild)

Source from the content-addressed store, hash-verified

202}
203
204func (u *ImageService) ImageBuild(req dto.ImageBuild) error {
205 client, err := docker.NewDockerClient()
206 if err != nil {
207 return err
208 }
209 defer client.Close()
210 fileName := "Dockerfile"
211 if req.From == "edit" {
212 dir := fmt.Sprintf("%s/docker/build/%s", global.Dir.DataDir, strings.ReplaceAll(req.Name, ":", "_"))
213 if _, err := os.Stat(dir); err != nil && os.IsNotExist(err) {
214 if err = os.MkdirAll(dir, os.ModePerm); err != nil {
215 return err
216 }
217 }
218
219 pathItem := fmt.Sprintf("%s/Dockerfile", dir)
220 file, err := os.OpenFile(pathItem, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, constant.FilePerm)
221 if err != nil {
222 return err
223 }
224 defer file.Close()
225 write := bufio.NewWriter(file)
226 _, _ = write.WriteString(string(req.Dockerfile))
227 write.Flush()
228 req.Dockerfile = dir
229 } else {
230 fileName = path.Base(req.Dockerfile)
231 req.Dockerfile = path.Dir(req.Dockerfile)
232 }
233 tar, err := archive.TarWithOptions(req.Dockerfile+"/", &archive.TarOptions{})
234 if err != nil {
235 return err
236 }
237
238 opts := build.ImageBuildOptions{
239 Dockerfile: fileName,
240 Tags: []string{req.Name},
241 Remove: true,
242 Labels: stringsToMap(req.Tags),
243 BuildArgs: stringsToMap2(req.Args),
244 }
245 taskItem, err := task.NewTaskWithOps(req.Name, task.TaskBuild, task.TaskScopeImage, req.TaskID, 1)
246 if err != nil {
247 return fmt.Errorf("new task for image build failed, err: %v", err)
248 }
249
250 go func() {
251 defer tar.Close()
252 taskItem.AddSubTask(i18n.GetMsgByKey("ImageBuild"), func(t *task.Task) error {
253 dockerCli := docker.NewClientWithExist(client)
254 if err := dockerCli.BuildImageWithProcessAndOptions(taskItem, tar, opts); err != nil {
255 return err
256 }
257 return nil
258 }, nil)
259
260 _ = taskItem.Execute()
261 }()

Callers

nothing calls this directly

Calls 10

stringsToMapFunction · 0.85
stringsToMap2Function · 0.85
MkdirAllMethod · 0.80
OpenFileMethod · 0.80
CloseMethod · 0.65
StatMethod · 0.45
FlushMethod · 0.45
AddSubTaskMethod · 0.45
ExecuteMethod · 0.45

Tested by

no test coverage detected