func (builder *STI) createLabelsForResultingImage() map[string]string { existingLabels, err := builder.docker.GetLabels(builder.config.BuilderImage) if err != nil { glog.V(0).Infof("error: Unable to read existing labels from current builder image %s", builder.config.BuilderImage) } return mergeLabels(util.GenerateOutputImageLabels(builder.sourceInfo, builder.config), existingLabels) }
func createLabelsForResultingImage(builder *STI, docker dockerpkg.Docker, baseImage string) map[string]string { generatedLabels := util.GenerateOutputImageLabels(builder.sourceInfo, builder.config) existingLabels, err := docker.GetLabels(baseImage) if err != nil { glog.V(0).Infof("error: Unable to read existing labels from the base image %s", baseImage) } return mergeLabels(generatedLabels, existingLabels) }
// PostExecute allows to execute post-build actions after the Docker build // finishes. func (b *STI) PostExecute(containerID, location string) error { var ( err error previousImageID string ) if b.incremental && b.config.RemovePreviousImage { if previousImageID, err = b.docker.GetImageID(b.config.Tag); err != nil { glog.Errorf("Error retrieving previous image's metadata: %v", err) } } env, err := scripts.GetEnvironment(b.config) if err != nil { glog.V(1).Infof("No .sti/environment provided (%v)", err) } buildEnv := append(scripts.ConvertEnvironment(env), b.generateConfigEnv()...) runCmd := b.scriptsURL[api.Run] if strings.HasPrefix(runCmd, "image://") { // scripts from inside of the image, we need to strip the image part runCmd = filepath.Join(strings.TrimPrefix(runCmd, "image://"), api.Run) } else { // external scripts, in which case we're taking the directory to which they // were extracted and append scripts dir and name runCmd = filepath.Join(location, "scripts", api.Run) } existingLabels, err := b.docker.GetLabels(b.config.BuilderImage) if err != nil { glog.Errorf("Unable to read existing labels from current builder image %s", b.config.BuilderImage) } opts := dockerpkg.CommitContainerOptions{ Command: append([]string{}, runCmd), Env: buildEnv, ContainerID: containerID, Repository: b.config.Tag, Labels: mergeLabels(util.GenerateOutputImageLabels(b.sourceInfo, b.config), existingLabels), } imageID, err := b.docker.CommitContainer(opts) if err != nil { return errors.NewBuildError(b.config.Tag, err) } b.result.Success = true b.result.ImageID = imageID if len(b.config.Tag) > 0 { glog.V(1).Infof("Successfully built %s", b.config.Tag) } else { glog.V(1).Infof("Successfully built %s", imageID) } if b.incremental && b.config.RemovePreviousImage && previousImageID != "" { glog.V(1).Infof("Removing previously-tagged image %s", previousImageID) if err = b.docker.RemoveImage(previousImageID); err != nil { glog.Errorf("Unable to remove previous image: %v", err) } } if b.config.CallbackURL != "" { b.result.Messages = b.callbackInvoker.ExecuteCallback(b.config.CallbackURL, b.result.Success, b.result.Messages) } return nil }