From 5a890369a0ae9b11ce4c4a5043700b8fe41b2a00 Mon Sep 17 00:00:00 2001 From: David Gageot Date: Sat, 5 Oct 2019 12:01:28 +0200 Subject: [PATCH] Add support for Cloud Native Buildpacks pack CLI Signed-off-by: David Gageot --- pack/Dockerfile | 7 +++++++ pack/README.md | 19 +++++++++++++++++++ pack/cloudbuild.yaml | 11 +++++++++++ pack/example/cloudbuild.yaml | 10 ++++++++++ pack/example/go.mod | 3 +++ pack/example/main.go | 18 ++++++++++++++++++ 6 files changed, 68 insertions(+) create mode 100644 pack/Dockerfile create mode 100644 pack/README.md create mode 100644 pack/cloudbuild.yaml create mode 100644 pack/example/cloudbuild.yaml create mode 100644 pack/example/go.mod create mode 100644 pack/example/main.go diff --git a/pack/Dockerfile b/pack/Dockerfile new file mode 100644 index 000000000..c88308129 --- /dev/null +++ b/pack/Dockerfile @@ -0,0 +1,7 @@ +FROM busybox +ENV PACK_VERSION=v0.4.1 +RUN wget -O- https://github.com/buildpack/pack/releases/download/${PACK_VERSION}/pack-${PACK_VERSION}-linux.tgz | tar zx + +FROM gcr.io/distroless/base +ENTRYPOINT ["/pack"] +COPY --from=0 /pack / diff --git a/pack/README.md b/pack/README.md new file mode 100644 index 000000000..ac7b00391 --- /dev/null +++ b/pack/README.md @@ -0,0 +1,19 @@ +# Pack + +[pack](https://github.com/buildpack/pack) is the CLI for building apps using [Cloud Native Buildpacks](https://buildpacks.io). + +This build step invokes `pack` commands in [Google Cloud Build](cloud.google.com/cloud-build/). + +Arguments passed to this builder will be passed to `pack` directly, allowing +callers to run [any pack +command](https://buildpacks.io/docs/using-pack/). + +## Usage: + +To build a Docker image from sources: + +``` +steps: +- name: gcr.io/$PROJECT_ID/pack + args: ["build", "--builder", "heroku/buildpacks:18", "gcr.io/$PROJECT_ID/sample:tag"] +``` diff --git a/pack/cloudbuild.yaml b/pack/cloudbuild.yaml new file mode 100644 index 000000000..026998971 --- /dev/null +++ b/pack/cloudbuild.yaml @@ -0,0 +1,11 @@ +# In this directory, run the following command to build this builder. +# $ gcloud builds submit . --config=cloudbuild.yaml + +steps: +- name: 'gcr.io/cloud-builders/docker' + args: ['build', '--tag=gcr.io/${PROJECT_ID}/pack', '.'] +- name: 'gcr.io/${PROJECT_ID}/pack' + args: ['--help'] + +images: ['gcr.io/${PROJECT_ID}/pack'] +tags: ['cloud-builders-community'] diff --git a/pack/example/cloudbuild.yaml b/pack/example/cloudbuild.yaml new file mode 100644 index 000000000..98874fef1 --- /dev/null +++ b/pack/example/cloudbuild.yaml @@ -0,0 +1,10 @@ +steps: +- name: 'gcr.io/$PROJECT_ID/pack' + args: + - build + - --builder + - heroku/buildpacks:18 + - gcr.io/$PROJECT_ID/pack-sample + +images: + - gcr.io/$PROJECT_ID/pack-sample diff --git a/pack/example/go.mod b/pack/example/go.mod new file mode 100644 index 000000000..3f0fc6e12 --- /dev/null +++ b/pack/example/go.mod @@ -0,0 +1,3 @@ +module github.com/GoogleCloudPlatform/cloud-builders-community/pack/sample + +go 1.13 diff --git a/pack/example/main.go b/pack/example/main.go new file mode 100644 index 000000000..5e666f89d --- /dev/null +++ b/pack/example/main.go @@ -0,0 +1,18 @@ +package main + +import ( + "fmt" + "log" + "net/http" +) + +func main() { + http.HandleFunc("/", hello) + + log.Println("Listening on port 8080") + http.ListenAndServe(":8080", nil) +} + +func hello(w http.ResponseWriter, r *http.Request) { + fmt.Fprintf(w, "Hello, World!") +}