@@ -12,7 +12,9 @@ import (
12
12
dockercmd "github.com/docker/docker/builder/dockerfile/command"
13
13
"github.com/docker/docker/builder/dockerfile/parser"
14
14
docker "github.com/fsouza/go-dockerclient"
15
+
15
16
kapi "k8s.io/kubernetes/pkg/api"
17
+ utilruntime "k8s.io/kubernetes/pkg/util/runtime"
16
18
17
19
s2iapi "github.com/openshift/source-to-image/pkg/api"
18
20
"github.com/openshift/source-to-image/pkg/tar"
@@ -69,12 +71,22 @@ func (d *DockerBuilder) Build() error {
69
71
}
70
72
sourceInfo , err := fetchSource (d .dockerClient , buildDir , d .build , d .urlTimeout , os .Stdin , d .gitClient )
71
73
if err != nil {
74
+ d .build .Status .Reason = api .StatusReasonFetchSourceFailed
75
+ d .build .Status .Message = api .StatusMessageFetchSourceFailed
76
+ if updateErr := retryBuildStatusUpdate (d .build , d .client , nil ); updateErr != nil {
77
+ utilruntime .HandleError (fmt .Errorf ("error: An error occured while updating the build status: %v" , updateErr ))
78
+ }
72
79
return err
73
80
}
81
+
74
82
if sourceInfo != nil {
75
- updateBuildRevision (d .client , d .build , sourceInfo )
83
+ glog .V (4 ).Infof ("Setting build revision with details %#v" , sourceInfo )
84
+ revision := updateBuildRevision (d .build , sourceInfo )
85
+ if updateErr := retryBuildStatusUpdate (d .build , d .client , revision ); updateErr != nil {
86
+ utilruntime .HandleError (fmt .Errorf ("error: An error occured while updating the build status: %v" , updateErr ))
87
+ }
76
88
}
77
- if err : = d .addBuildParameters (buildDir ); err != nil {
89
+ if err = d .addBuildParameters (buildDir ); err != nil {
78
90
return err
79
91
}
80
92
@@ -91,14 +103,14 @@ func (d *DockerBuilder) Build() error {
91
103
dockerfilePath := d .getDockerfilePath (buildDir )
92
104
imageNames := getDockerfileFrom (dockerfilePath )
93
105
if len (imageNames ) == 0 {
94
- return fmt .Errorf ("no from image in dockerfile. " )
106
+ return fmt .Errorf ("no FROM image in Dockerfile " )
95
107
}
96
108
for _ , imageName := range imageNames {
97
109
if imageName == "scratch" {
98
110
glog .V (4 ).Infof ("\n Skipping image \" scratch\" " )
99
111
continue
100
112
}
101
- var imageExists bool = true
113
+ imageExists : = true
102
114
_ , err = d .dockerClient .InspectImage (imageName )
103
115
if err != nil {
104
116
if err != docker .ErrNoSuchImage {
@@ -113,18 +125,33 @@ func (d *DockerBuilder) Build() error {
113
125
dockercfg .PullAuthType ,
114
126
)
115
127
glog .V (0 ).Infof ("\n Pulling image %s ..." , imageName )
116
- if err := pullImage (d .dockerClient , imageName , pullAuthConfig ); err != nil {
128
+ if err = pullImage (d .dockerClient , imageName , pullAuthConfig ); err != nil {
129
+ d .build .Status .Reason = api .StatusReasonPullBuilderImageFailed
130
+ d .build .Status .Message = api .StatusMessagePullBuilderImageFailed
131
+ if updateErr := retryBuildStatusUpdate (d .build , d .client , nil ); updateErr != nil {
132
+ utilruntime .HandleError (fmt .Errorf ("error: An error occured while updating the build status: %v" , updateErr ))
133
+ }
117
134
return fmt .Errorf ("failed to pull image: %v" , err )
118
135
}
119
136
}
120
137
}
121
138
122
- if err := d .dockerBuild (buildDir , buildTag , d .build .Spec .Source .Secrets ); err != nil {
139
+ if err = d .dockerBuild (buildDir , buildTag , d .build .Spec .Source .Secrets ); err != nil {
140
+ d .build .Status .Reason = api .StatusReasonDockerBuildFailed
141
+ d .build .Status .Message = api .StatusMessageDockerBuildFailed
142
+ if updateErr := retryBuildStatusUpdate (d .build , d .client , nil ); updateErr != nil {
143
+ utilruntime .HandleError (fmt .Errorf ("error: An error occured while updating the build status: %v" , updateErr ))
144
+ }
123
145
return err
124
146
}
125
147
126
148
cname := containerName ("docker" , d .build .Name , d .build .Namespace , "post-commit" )
127
149
if err := execPostCommitHook (d .dockerClient , d .build .Spec .PostCommit , buildTag , cname ); err != nil {
150
+ d .build .Status .Reason = api .StatusReasonPostCommitHookFailed
151
+ d .build .Status .Message = api .StatusMessagePostCommitHookFailed
152
+ if updateErr := retryBuildStatusUpdate (d .build , d .client , nil ); updateErr != nil {
153
+ utilruntime .HandleError (fmt .Errorf ("error: An error occured while updating the build status: %v" , updateErr ))
154
+ }
128
155
return err
129
156
}
130
157
@@ -149,6 +176,11 @@ func (d *DockerBuilder) Build() error {
149
176
}
150
177
glog .V (0 ).Infof ("\n Pushing image %s ..." , pushTag )
151
178
if err := pushImage (d .dockerClient , pushTag , pushAuthConfig ); err != nil {
179
+ d .build .Status .Reason = api .StatusReasonPushImageToRegistryFailed
180
+ d .build .Status .Message = api .StatusMessagePushImageToRegistryFailed
181
+ if updateErr := retryBuildStatusUpdate (d .build , d .client , nil ); updateErr != nil {
182
+ utilruntime .HandleError (fmt .Errorf ("error: An error occured while updating the build status: %v" , updateErr ))
183
+ }
152
184
return reportPushFailure (err , authPresent , pushAuthConfig )
153
185
}
154
186
glog .V (0 ).Infof ("Push successful" )
0 commit comments