github.imxd.top/openshift/source-to-image@v1.2.0/pkg/build/strategies/strategies.go (about) 1 package strategies 2 3 import ( 4 "time" 5 6 "github.com/openshift/source-to-image/pkg/api" 7 "github.com/openshift/source-to-image/pkg/build" 8 "github.com/openshift/source-to-image/pkg/build/strategies/dockerfile" 9 "github.com/openshift/source-to-image/pkg/build/strategies/onbuild" 10 "github.com/openshift/source-to-image/pkg/build/strategies/sti" 11 "github.com/openshift/source-to-image/pkg/docker" 12 "github.com/openshift/source-to-image/pkg/util/fs" 13 utilstatus "github.com/openshift/source-to-image/pkg/util/status" 14 ) 15 16 // GetStrategy decides what build strategy will be used for the STI build. 17 // TODO: deprecated, use Strategy() instead 18 func GetStrategy(client docker.Client, config *api.Config) (build.Builder, api.BuildInfo, error) { 19 return Strategy(client, config, build.Overrides{}) 20 } 21 22 // Strategy creates the appropriate build strategy for the provided config, using 23 // the overrides provided. Not all strategies support all overrides. 24 func Strategy(client docker.Client, config *api.Config, overrides build.Overrides) (build.Builder, api.BuildInfo, error) { 25 var builder build.Builder 26 var buildInfo api.BuildInfo 27 var err error 28 29 fileSystem := fs.NewFileSystem() 30 31 startTime := time.Now() 32 33 if len(config.AsDockerfile) != 0 { 34 builder, err = dockerfile.New(config, fileSystem) 35 if err != nil { 36 buildInfo.FailureReason = utilstatus.NewFailureReason( 37 utilstatus.ReasonGenericS2IBuildFailed, 38 utilstatus.ReasonMessageGenericS2iBuildFailed, 39 ) 40 return nil, buildInfo, err 41 } 42 return builder, buildInfo, nil 43 } 44 45 dkr := docker.New(client, config.PullAuthentication) 46 image, err := docker.GetBuilderImage(dkr, config) 47 buildInfo.Stages = api.RecordStageAndStepInfo(buildInfo.Stages, api.StagePullImages, api.StepPullBuilderImage, startTime, time.Now()) 48 if err != nil { 49 buildInfo.FailureReason = utilstatus.NewFailureReason( 50 utilstatus.ReasonPullBuilderImageFailed, 51 utilstatus.ReasonMessagePullBuilderImageFailed, 52 ) 53 return nil, buildInfo, err 54 } 55 config.HasOnBuild = image.OnBuild 56 57 if config.AssembleUser, err = docker.GetAssembleUser(dkr, config); err != nil { 58 buildInfo.FailureReason = utilstatus.NewFailureReason( 59 utilstatus.ReasonPullBuilderImageFailed, 60 utilstatus.ReasonMessagePullBuilderImageFailed, 61 ) 62 return nil, buildInfo, err 63 } 64 65 // if we're blocking onbuild, just do a normal s2i build flow 66 // which won't do a docker build and invoke the onbuild commands 67 if image.OnBuild && !config.BlockOnBuild { 68 builder, err = onbuild.New(client, config, fileSystem, overrides) 69 if err != nil { 70 buildInfo.FailureReason = utilstatus.NewFailureReason( 71 utilstatus.ReasonGenericS2IBuildFailed, 72 utilstatus.ReasonMessageGenericS2iBuildFailed, 73 ) 74 return nil, buildInfo, err 75 } 76 return builder, buildInfo, nil 77 } 78 79 builder, err = sti.New(client, config, fileSystem, overrides) 80 if err != nil { 81 buildInfo.FailureReason = utilstatus.NewFailureReason( 82 utilstatus.ReasonGenericS2IBuildFailed, 83 utilstatus.ReasonMessageGenericS2iBuildFailed, 84 ) 85 return nil, buildInfo, err 86 } 87 return builder, buildInfo, err 88 }