// New returns the instance of STI builder strategy for the given config. // If the layeredBuilder parameter is specified, then the builder provided will // be used for the case that the base Docker image does not have 'tar' or 'bash' // installed. func New(req *api.Config) (*STI, error) { docker, err := docker.New(req.DockerConfig, req.PullAuthentication) if err != nil { return nil, err } inst := scripts.NewInstaller(req.BuilderImage, req.ScriptsURL, docker, req.PullAuthentication) b := &STI{ installer: inst, config: req, docker: docker, git: git.New(), fs: util.NewFileSystem(), tar: tar.New(), callbackInvoker: util.NewCallbackInvoker(), requiredScripts: []string{api.Assemble, api.Run}, optionalScripts: []string{api.SaveArtifacts}, externalScripts: map[string]bool{}, installedScripts: map[string]bool{}, scriptsURL: map[string]string{}, } // The sources are downloaded using the GIT downloader. // TODO: Add more SCM in future. b.source = &git.Clone{b.git, b.fs} b.garbage = &build.DefaultCleaner{b.fs, b.docker} b.layered, err = layered.New(req, b) // Set interfaces b.preparer = b b.artifacts = b b.scripts = b b.postExecutor = b return b, err }
// NewDockerBuilder creates a new instance of DockerBuilder func NewDockerBuilder(dockerClient DockerClient, build *api.Build) *DockerBuilder { return &DockerBuilder{ dockerClient: dockerClient, build: build, git: git.New(), tar: tar.New(), urlTimeout: urlCheckTimeout, } }
// NewDockerBuilder creates a new instance of DockerBuilder func NewDockerBuilder(dockerClient DockerClient, authCfg docker.AuthConfiguration, authPresent bool, build *api.Build) *DockerBuilder { return &DockerBuilder{ dockerClient: dockerClient, authPresent: authPresent, auth: authCfg, build: build, git: git.New(), tar: tar.New(), urlTimeout: urlCheckTimeout, } }
// New returns a new instance of OnBuild builder func New(config *api.Config) (*OnBuild, error) { dockerHandler, err := docker.New(config.DockerConfig, config.PullAuthentication) if err != nil { return nil, err } b := &OnBuild{ docker: dockerHandler, git: git.New(), fs: util.NewFileSystem(), tar: tar.New(), } // Use STI Prepare() and download the 'run' script optionally. s, err := sti.New(config) s.SetScripts([]string{}, []string{api.Assemble, api.Run}) b.source = onBuildSourceHandler{ &git.Clone{b.git, b.fs}, s, } b.garbage = &build.DefaultCleaner{b.fs, b.docker} return b, nil }