diff --git a/Dispatchfile b/Dispatchfile index b1d4f6e..7a36a12 100644 --- a/Dispatchfile +++ b/Dispatchfile @@ -2,7 +2,7 @@ load("github.com/mesosphere/dispatch-catalog/starlark/stable/k8s@0.0.7", "secret_var") load("github.com/mesosphere/dispatch-catalog/starlark/stable/kaniko@0.0.7", "kaniko") -load("github.com/mesosphere/dispatch-catalog/starlark/stable/pipeline@0.0.7", "image_reference", "storage_resource", "push") +load("github.com/mesosphere/dispatch-catalog/starlark/stable/pipeline@0.0.7", "image_resource", "image_reference", "storage_resource", "push") load("github.com/mesosphere/dispatch-catalog/starlark/stable/git@0.0.7", "git_resource", "git_checkout_dir", "git_revision") src_repo = git_resource("src-repo") @@ -12,10 +12,49 @@ gitops_repo = git_resource("gitops-repo", revision="jenkins-demo" ) -docker_image = kaniko("build-image", src_repo, "chhsiao/devx-dispatch-demo") +def kaniko2(task_name, git_name, image_repos, tag="$(context.build.name)", context=".", dockerfile="Dockerfile", build_args={}, inputs=[], outputs=[], steps=[], **kwargs): + """ + Build a Docker image using Kaniko. + """ + + image_names = [ + image_resource( + "image{}-{}".format(i, task_name), + url=image_repos[i] + ) for i in range(len(image_repos)) + ] + + inputs = inputs + [git_name] + outputs = outputs + image_names + + args = [ + "--context={}".format(context), + "--dockerfile={}".format(dockerfile) + ] + + for k, v in build_args.items(): + args.append("--build-arg={}={}".format(k, v)) + + steps = steps + [ + k8s.corev1.Container( + name="build-{}".format(image_name), + image="gcr.io/kaniko-project/executor:latest", + args=args + [ + "--destination=$(resources.outputs.{}.url):{}".format(image_name, tag), + "--oci-layout-path=$(resources.outputs.{}.path)".format(image_name) + ], + workingDir=git_checkout_dir(git_name) + ) for image_name in image_names + ] + + task(task_name, inputs=inputs, outputs=outputs, steps=steps, **kwargs) + + return image_names + +docker_images = kaniko2("build-image", src_repo, ["chhsiao/devx-dispatch-demo", "chhsiao/devx-dispatch-demo-2"]) task("deploy", - inputs=[src_repo, docker_image, gitops_repo], + inputs=[src_repo, docker_images[0], gitops_repo], steps=[ k8s.corev1.Container( name="update-gitops-repo", @@ -26,7 +65,7 @@ task("deploy", "-base-branch={}".format(git_revision(gitops_repo)), "-create-pull-request", "-merge-pull-request", - "-substitute=imageName={}".format(image_reference(docker_image)) + "-substitute=imageName={}".format(image_reference(docker_images[0])) ] ), k8s.corev1.Container( @@ -38,7 +77,7 @@ task("deploy", sleep 1 done kubectl wait --for=condition=available deployment/hello-world - """.format(image_reference(docker_image))] + """.format(image_reference(docker_images[0]))] ) ] ) @@ -89,4 +128,4 @@ task("run-jenkins", ] ) -action(tasks=["run-jenkins"], on=push(branches=["jenkins-demo"])) +action(tasks=["build-image"], on=push())