From c2b0c1d73e1ff60464407cad6aa7585a9fc4735a Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Tue, 21 Dec 2021 16:51:23 +0100 Subject: [PATCH] Multiarch build cli docker images (#634) --- .woodpecker/main.yml | 34 ++++++++++++++++++++------ docker/Dockerfile.cli | 16 ------------ docker/Dockerfile.cli.alpine | 11 --------- docker/Dockerfile.cli.alpine.multiarch | 17 +++++++++++++ docker/Dockerfile.cli.multiarch | 19 ++++++++++++++ 5 files changed, 62 insertions(+), 35 deletions(-) delete mode 100644 docker/Dockerfile.cli delete mode 100644 docker/Dockerfile.cli.alpine create mode 100644 docker/Dockerfile.cli.alpine.multiarch create mode 100644 docker/Dockerfile.cli.multiarch diff --git a/.woodpecker/main.yml b/.woodpecker/main.yml index 89368b5c8..03b6f4940 100644 --- a/.woodpecker/main.yml +++ b/.woodpecker/main.yml @@ -25,6 +25,8 @@ pipeline: image: golang:1.16 commands: - make release-cli + when: + event: tag build-deb-rpm: group: bundle @@ -100,13 +102,26 @@ pipeline: branch: ${CI_REPO_DEFAULT_BRANCH} event: push + publish-cli-dryrun: + group: docker + image: woodpeckerci/plugin-docker-buildx + settings: + dry_run: true + repo: woodpeckerci/woodpecker-cli + dockerfile: docker/Dockerfile.cli.multiarch + platforms: linux/arm/v7,linux/arm64/v8,linux/amd64,linux/ppc64le,windows/amd64,darwin/amd64,darwin/arm64 + tag: test + when: + event: pull_request + publish-cli: group: docker - image: plugins/docker + image: woodpeckerci/plugin-docker-buildx secrets: [docker_username, docker_password] settings: repo: woodpeckerci/woodpecker-cli - dockerfile: docker/Dockerfile.cli + dockerfile: docker/Dockerfile.cli.multiarch + platforms: linux/arm/v7,linux/arm64/v8,linux/amd64,linux/ppc64le,windows/amd64,darwin/amd64,darwin/arm64 tag: next when: branch: ${CI_REPO_DEFAULT_BRANCH} @@ -114,11 +129,12 @@ pipeline: publish-cli-alpine: group: docker - image: plugins/docker + image: woodpeckerci/plugin-docker-buildx secrets: [ docker_username, docker_password ] settings: repo: woodpeckerci/woodpecker-cli - dockerfile: docker/Dockerfile.cli.alpine + dockerfile: docker/Dockerfile.cli.alpine.multiarch + platforms: linux/arm/v7,linux/arm64/v8,linux/amd64,linux/ppc64le tag: next-alpine when: branch: ${CI_REPO_DEFAULT_BRANCH} @@ -172,22 +188,24 @@ pipeline: release-cli: group: docker - image: plugins/docker + image: woodpeckerci/plugin-docker-buildx secrets: [docker_username, docker_password] settings: repo: woodpeckerci/woodpecker-cli - dockerfile: docker/Dockerfile.cli + dockerfile: docker/Dockerfile.cli.multiarch + platforms: linux/arm/v7,linux/arm64/v8,linux/amd64,linux/ppc64le,windows/amd64,darwin/amd64,darwin/arm64 tag: [latest, "${CI_COMMIT_TAG}"] when: event: tag release-cli-alpine: group: docker - image: plugins/docker + image: woodpeckerci/plugin-docker-buildx secrets: [ docker_username, docker_password ] settings: repo: woodpeckerci/woodpecker-cli - dockerfile: docker/Dockerfile.cli.alpine + dockerfile: docker/Dockerfile.cli.alpine.multiarch + platforms: linux/arm/v7,linux/arm64/v8,linux/amd64,linux/ppc64le tag: [latest-alpine, "${CI_COMMIT_TAG}-alpine"] when: event: tag diff --git a/docker/Dockerfile.cli b/docker/Dockerfile.cli deleted file mode 100644 index ad4e476d4..000000000 --- a/docker/Dockerfile.cli +++ /dev/null @@ -1,16 +0,0 @@ -# docker build --rm -f docker/Dockerfile.cli -t woodpeckerci/woodpecker-cli . - -# use golang image to copy ssl certs later -FROM golang:1.16 - -FROM scratch - -# copy certs from golang:1.16 image -COPY --from=0 /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt - -ENV GODEBUG=netdns=go -ADD dist/cli/linux_amd64/woodpecker-cli /bin/ - -HEALTHCHECK CMD ["/bin/woodpecker-cli", "ping"] - -ENTRYPOINT ["/bin/woodpecker-cli"] diff --git a/docker/Dockerfile.cli.alpine b/docker/Dockerfile.cli.alpine deleted file mode 100644 index d91ceb63b..000000000 --- a/docker/Dockerfile.cli.alpine +++ /dev/null @@ -1,11 +0,0 @@ -# docker build --rm -f docker/Dockerfile.cli.alpine -t woodpeckerci/woodpecker-cli . - -FROM alpine:3.14 -RUN apk add -U --no-cache ca-certificates - -ENV GODEBUG=netdns=go -ADD dist/cli/linux_amd64/woodpecker-cli /bin/ - -HEALTHCHECK CMD ["/bin/woodpecker-cli", "ping"] - -ENTRYPOINT ["/bin/woodpecker-cli"] diff --git a/docker/Dockerfile.cli.alpine.multiarch b/docker/Dockerfile.cli.alpine.multiarch new file mode 100644 index 000000000..427037858 --- /dev/null +++ b/docker/Dockerfile.cli.alpine.multiarch @@ -0,0 +1,17 @@ +FROM --platform=$BUILDPLATFORM golang:1.16 AS build + +WORKDIR /src +COPY . . +ARG TARGETOS TARGETARCH +RUN --mount=type=cache,target=/root/.cache/go-build \ + --mount=type=cache,target=/go/pkg \ + make build-cli + +FROM alpine:3.14 +RUN apk add -U --no-cache ca-certificates +ENV GODEBUG=netdns=go + +COPY --from=build src/dist/woodpecker-cli /bin/ + +HEALTHCHECK CMD ["/bin/woodpecker-cli", "ping"] +ENTRYPOINT ["/bin/woodpecker-cli"] diff --git a/docker/Dockerfile.cli.multiarch b/docker/Dockerfile.cli.multiarch new file mode 100644 index 000000000..af2dcad11 --- /dev/null +++ b/docker/Dockerfile.cli.multiarch @@ -0,0 +1,19 @@ +FROM --platform=$BUILDPLATFORM golang:1.16 AS build + +WORKDIR /src +COPY . . +ARG TARGETOS TARGETARCH +RUN --mount=type=cache,target=/root/.cache/go-build \ + --mount=type=cache,target=/go/pkg \ + make build-cli + +FROM scratch +ENV GODEBUG=netdns=go + +# copy certs from golang:1.16 image +COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt +# copy cli binary +COPY --from=build src/dist/woodpecker-cli /bin/ + +HEALTHCHECK CMD ["/bin/woodpecker-cli", "ping"] +ENTRYPOINT ["/bin/woodpecker-cli"]