This is an automated email from the ASF dual-hosted git repository. astefanutti pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit b424b959335ed43f7cb570c37065500cd869ff6c Author: Antonin Stefanutti <[email protected]> AuthorDate: Mon Dec 16 12:20:50 2019 +0100 feat(build): Better handle tasks build directory sharing --- pkg/builder/builder.go | 26 +++++++++++++------------- pkg/builder/builder_steps.go | 2 +- pkg/controller/build/schedule_pod.go | 4 ++-- pkg/trait/builder.go | 21 ++++++++++----------- 4 files changed, 26 insertions(+), 27 deletions(-) diff --git a/pkg/builder/builder.go b/pkg/builder/builder.go index 2683386..4cf5c3d 100644 --- a/pkg/builder/builder.go +++ b/pkg/builder/builder.go @@ -51,24 +51,24 @@ func New(c client.Client) Builder { func (b *defaultBuilder) Run(build v1alpha1.BuilderTask) v1alpha1.BuildStatus { result := v1alpha1.BuildStatus{} - // create tmp path - buildDir := build.BuildDir - if buildDir == "" { - buildDir = os.TempDir() - } - builderPath, err := ioutil.TempDir(buildDir, "builder-") - if err != nil { - log.Error(err, "Unexpected error while creating a temporary dir") + var buildDir string + if build.BuildDir == "" { + tmpDir, err := ioutil.TempDir(os.TempDir(), "builder-") + if err != nil { + log.Error(err, "Unexpected error while creating a temporary dir") - result.Phase = v1alpha1.BuildPhaseFailed - result.Error = err.Error() + result.Phase = v1alpha1.BuildPhaseFailed + result.Error = err.Error() + } + buildDir = tmpDir + defer os.RemoveAll(buildDir) + } else { + buildDir = build.BuildDir } - defer os.RemoveAll(builderPath) - c := Context{ Client: b.client, - Path: builderPath, + Path: buildDir, Namespace: build.Meta.Namespace, Build: build, BaseImage: build.BaseImage, diff --git a/pkg/builder/builder_steps.go b/pkg/builder/builder_steps.go index 4b84f9f..429d9b8 100644 --- a/pkg/builder/builder_steps.go +++ b/pkg/builder/builder_steps.go @@ -297,7 +297,7 @@ func packager(ctx *Context, selector artifactsSelector) error { return err } - tarFileName := path.Join(ctx.Build.BuildDir, "package", ctx.Build.Meta.Name) + tarFileName := path.Join(ctx.Path, "package", "occi.tar") tarFileDir := path.Dir(tarFileName) err = os.MkdirAll(tarFileDir, 0777) diff --git a/pkg/controller/build/schedule_pod.go b/pkg/controller/build/schedule_pod.go index 74ff938..30c2c38 100644 --- a/pkg/controller/build/schedule_pod.go +++ b/pkg/controller/build/schedule_pod.go @@ -141,7 +141,7 @@ func (action *schedulePodAction) newBuildPod(ctx context.Context, build *v1alpha } else { action.operatorImage = operatorImage } - action.addCamelTaskToPod(build, task.Builder, pod) + action.addBuilderTaskToPod(build, task.Builder, pod) } else if task.Kaniko != nil { action.addKanikoTaskToPod(task.Kaniko, pod) } @@ -154,7 +154,7 @@ func (action *schedulePodAction) newBuildPod(ctx context.Context, build *v1alpha return pod, nil } -func (action *schedulePodAction) addCamelTaskToPod(build *v1alpha1.Build, task *v1alpha1.BuilderTask, pod *corev1.Pod) { +func (action *schedulePodAction) addBuilderTaskToPod(build *v1alpha1.Build, task *v1alpha1.BuilderTask, pod *corev1.Pod) { pod.Spec.InitContainers = append(pod.Spec.InitContainers, corev1.Container{ Name: task.Name, Image: action.operatorImage, diff --git a/pkg/trait/builder.go b/pkg/trait/builder.go index 3001ca2..b65fd8c 100644 --- a/pkg/trait/builder.go +++ b/pkg/trait/builder.go @@ -60,8 +60,8 @@ func (t *builderTrait) Configure(e *Environment) (bool, error) { } func (t *builderTrait) Apply(e *Environment) error { - camelTask := t.camelTask(e) - e.BuildTasks = append(e.BuildTasks, v1alpha1.Task{Builder: camelTask}) + builderTask := t.builderTask(e) + e.BuildTasks = append(e.BuildTasks, v1alpha1.Task{Builder: builderTask}) if platform.SupportsKanikoPublishStrategy(e.Platform) { kanikoTask, err := t.kanikoTask(e) @@ -69,7 +69,7 @@ func (t *builderTrait) Apply(e *Environment) error { return err } mount := corev1.VolumeMount{Name: "camel-k-builder", MountPath: kaniko.BuildDir} - camelTask.VolumeMounts = append(camelTask.VolumeMounts, mount) + builderTask.VolumeMounts = append(builderTask.VolumeMounts, mount) kanikoTask.VolumeMounts = append(kanikoTask.VolumeMounts, mount) if e.Platform.Status.Build.IsKanikoCacheEnabled() { @@ -114,7 +114,7 @@ func (t *builderTrait) Apply(e *Environment) error { }, } // Use the PVC used to warm the Kaniko cache to coordinate the Camel Maven build and the Kaniko image build - camelTask.Volumes = append(camelTask.Volumes, corev1.Volume{ + builderTask.Volumes = append(builderTask.Volumes, corev1.Volume{ Name: "camel-k-builder", VolumeSource: corev1.VolumeSource{ PersistentVolumeClaim: &corev1.PersistentVolumeClaimVolumeSource{ @@ -124,11 +124,10 @@ func (t *builderTrait) Apply(e *Environment) error { }) } else { // Use an emptyDir volume to coordinate the Camel Maven build and the Kaniko image build - camelTask.Volumes = append(camelTask.Volumes, corev1.Volume{ + builderTask.Volumes = append(builderTask.Volumes, corev1.Volume{ Name: "camel-k-builder", VolumeSource: corev1.VolumeSource{ - EmptyDir: &corev1.EmptyDirVolumeSource{ - }, + EmptyDir: &corev1.EmptyDirVolumeSource{}, }, }) } @@ -149,10 +148,10 @@ func (t *builderTrait) InfluencesKit() bool { return true } -func (t *builderTrait) camelTask(e *Environment) *v1alpha1.BuilderTask { +func (t *builderTrait) builderTask(e *Environment) *v1alpha1.BuilderTask { task := &v1alpha1.BuilderTask{ BaseTask: v1alpha1.BaseTask{ - Name: "camel", + Name: "builder", }, Meta: e.IntegrationKit.ObjectMeta, BaseImage: e.Platform.Status.Build.BaseImage, @@ -173,7 +172,7 @@ func (t *builderTrait) camelTask(e *Environment) *v1alpha1.BuilderTask { task.Steps = append(task.Steps, builder.StepIDsFor(s2i.S2iSteps...)...) } else if platform.SupportsKanikoPublishStrategy(e.Platform) { task.Steps = append(task.Steps, builder.StepIDsFor(kaniko.KanikoSteps...)...) - task.BuildDir = kaniko.BuildDir + task.BuildDir = path.Join(kaniko.BuildDir, e.IntegrationKit.Name) } quarkus := e.Catalog.GetTrait("quarkus").(*quarkusTrait) @@ -198,7 +197,7 @@ func (t *builderTrait) kanikoTask(e *Environment) (*v1alpha1.KanikoTask, error) env := make([]corev1.EnvVar, 0) baseArgs := []string{ "--dockerfile=Dockerfile", - "--context=" + path.Join(kaniko.BuildDir, "package", "context"), + "--context=" + path.Join(kaniko.BuildDir, e.IntegrationKit.Name, "package", "context"), "--destination=" + image, "--cache=" + strconv.FormatBool(e.Platform.Status.Build.IsKanikoCacheEnabled()), "--cache-dir=" + path.Join(kaniko.BuildDir, "cache"),
