From e3354e440f20c17ffe74906630696dbd951b6c15 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Mon, 4 Oct 2021 17:09:22 +0200 Subject: [PATCH] Publish alpine container (#398) * Enable build & publish of alpine docker container * Delete outdated BUILD file * Move Dockerfiles into subdir "docker" * Update & format Dockerfiles * Introduce "next" tag Co-authored-by: Anbraten --- .dockerignore | 4 - .woodpecker/main.yml | 92 ++++++++++--------- BUILDING | 19 ---- Dockerfile | 13 --- Dockerfile.agent | 10 -- docker/Dockerfile.agent | 17 ++++ .../Dockerfile.agent.alpine | 4 +- docker/Dockerfile.server | 20 ++++ .../Dockerfile.server.alpine | 6 +- docs/docs/80-downloads.md | 7 +- 10 files changed, 98 insertions(+), 94 deletions(-) delete mode 100644 .dockerignore delete mode 100644 BUILDING delete mode 100644 Dockerfile delete mode 100644 Dockerfile.agent create mode 100644 docker/Dockerfile.agent rename Dockerfile.agent.alpine => docker/Dockerfile.agent.alpine (65%) create mode 100644 docker/Dockerfile.server rename Dockerfile.alpine => docker/Dockerfile.server.alpine (73%) diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index 8c5bfe506aa..00000000000 --- a/.dockerignore +++ /dev/null @@ -1,4 +0,0 @@ -* -!release/* -.env - diff --git a/.woodpecker/main.yml b/.woodpecker/main.yml index 90f975d5b5a..aec3fa70c68 100644 --- a/.woodpecker/main.yml +++ b/.woodpecker/main.yml @@ -50,16 +50,6 @@ pipeline: - (cd web/; go generate ./...) - make release - # publish-server-alpine: - # image: plugins/docker - # repo: woodpeckerci/woodpecker-server - # dockerfile: Dockerfile.alpine - # secrets: [ docker_username, docker_password ] - # tag: [ alpine ] - # when: - # branch: master - # event: push - build-cli: image: golang:1.16 commands: make release-cli @@ -67,8 +57,21 @@ pipeline: publish-server: image: plugins/docker repo: woodpeckerci/woodpecker-server + dockerfile: docker/Dockerfile.server secrets: [docker_username, docker_password] - tag: [latest] + # TODO: only release as next after 0.15.0 got released + tag: [next, latest] + when: + branch: master + event: push + + publish-server-alpine: + image: plugins/docker + repo: woodpeckerci/woodpecker-server + dockerfile: docker/Dockerfile.server.alpine + secrets: [ docker_username, docker_password ] + # TODO: only release as next-alpine after 0.15.0 got released + tag: [next-alpine, latest-alpine] when: branch: master event: push @@ -76,55 +79,58 @@ pipeline: publish-agent: image: plugins/docker repo: woodpeckerci/woodpecker-agent - dockerfile: Dockerfile.agent + dockerfile: docker/Dockerfile.agent secrets: [docker_username, docker_password] - tag: [latest] + # TODO: only release as next after 0.15.0 got released + tag: [next, latest] when: branch: master event: push - # publish-agent-alpine: - # image: plugins/docker - # repo: woodpeckerci/woodpecker-agent - # dockerfile: Dockerfile.agent.alpine - # secrets: [ docker_username, docker_password ] - # tag: [ alpine ] - # when: - # branch: master - # event: push - - # release-server-alpine: - # image: plugins/docker - # repo: woodpeckerci/woodpecker-server - # dockerfile: Dockerfile.alpine - # secrets: [ docker_username, docker_password ] - # tag: "${DRONE_TAG}-alpine" - # when: - # event: tag - # - # release-agent-alpine: - # image: plugins/docker - # repo: woodpeckerci/woodpecker-agent - # dockerfile: Dockerfile.agent.alpine - # secrets: [ docker_username, docker_password ] - # tag: "${DRONE_TAG}-alpine" - # when: - # event: tag + publish-agent-alpine: + image: plugins/docker + repo: woodpeckerci/woodpecker-agent + dockerfile: docker/Dockerfile.agent.alpine + secrets: [ docker_username, docker_password ] + # TODO: only release as next-alpine after 0.15.0 got released + tag: [next-alpine, latest-alpine] + when: + branch: master + event: push release-server: image: plugins/docker repo: woodpeckerci/woodpecker-server + dockerfile: docker/Dockerfile.server secrets: [docker_username, docker_password] - tag: ${DRONE_TAG} + tag: [latest, "${DRONE_TAG}"] + when: + event: tag + + release-server-alpine: + image: plugins/docker + repo: woodpeckerci/woodpecker-server + dockerfile: docker/Dockerfile.server.alpine + secrets: [ docker_username, docker_password ] + tag: [latest-alpine, "${DRONE_TAG}-alpine"] when: event: tag release-agent: image: plugins/docker repo: woodpeckerci/woodpecker-agent - dockerfile: Dockerfile.agent + dockerfile: docker/Dockerfile.agent secrets: [docker_username, docker_password] - tag: ${DRONE_TAG} + tag: [latest, "${DRONE_TAG}"] + when: + event: tag + + release-agent-alpine: + image: plugins/docker + repo: woodpeckerci/woodpecker-agent + dockerfile: docker/Dockerfile.agent.alpine + secrets: [ docker_username, docker_password ] + tag: [latest-alpine, "${DRONE_TAG}-alpine"] when: event: tag diff --git a/BUILDING b/BUILDING deleted file mode 100644 index 14ecc82b99e..00000000000 --- a/BUILDING +++ /dev/null @@ -1,19 +0,0 @@ -1. Install go 1.9 or later -2. Execute `make install` to compile project and install binaries to `GOPATH` - ---- - -0. To generate SQL files - -go get github.com/vektra/mockery/.../ - -export download_url=$(curl -s https://api.github.com/repos/go-swagger/go-swagger/releases/latest | \ - jq -r '.assets[] | select(.name | contains("'"$(uname | tr '[:upper:]' '[:lower:]')"'_amd64")) | .browser_download_url') -curl -o swagger -L'#' "$download_url" -chmod +x swagger -sudo mv swagger /usr/local/bin - -go get github.com/woodpecker-ci/togo - -go generate - diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index ff040469810..00000000000 --- a/Dockerfile +++ /dev/null @@ -1,13 +0,0 @@ -# docker build --rm -t woodpeckerci/woodpecker-server . - -FROM drone/ca-certs -EXPOSE 8000 9000 80 443 - -ENV GODEBUG=netdns=go -ENV WOODPECKER_DATABASE_DATASOURCE=/var/lib/drone/drone.sqlite -ENV WOODPECKER_DATABASE_DRIVER=sqlite3 -ENV XDG_CACHE_HOME=/var/lib/drone - -ADD release/woodpecker-server /bin/ - -ENTRYPOINT ["/bin/woodpecker-server"] diff --git a/Dockerfile.agent b/Dockerfile.agent deleted file mode 100644 index 5b38ea73e3f..00000000000 --- a/Dockerfile.agent +++ /dev/null @@ -1,10 +0,0 @@ -# docker build --rm -f Dockerfile.agent -t woodpeckerci/woodpecker-agent . - -FROM drone/ca-certs -ENV GODEBUG=netdns=go -ADD release/woodpecker-agent /bin/ - -EXPOSE 3000 -HEALTHCHECK CMD ["/bin/woodpecker-agent", "ping"] - -ENTRYPOINT ["/bin/woodpecker-agent"] diff --git a/docker/Dockerfile.agent b/docker/Dockerfile.agent new file mode 100644 index 00000000000..75d0af9a16c --- /dev/null +++ b/docker/Dockerfile.agent @@ -0,0 +1,17 @@ +# docker build --rm -f docker/Dockerfile.agent -t woodpeckerci/woodpecker-agent . + +# 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 release/woodpecker-agent /bin/ + +EXPOSE 3000 +HEALTHCHECK CMD ["/bin/woodpecker-agent", "ping"] + +ENTRYPOINT ["/bin/woodpecker-agent"] diff --git a/Dockerfile.agent.alpine b/docker/Dockerfile.agent.alpine similarity index 65% rename from Dockerfile.agent.alpine rename to docker/Dockerfile.agent.alpine index 44ac431887f..e4a814ec64d 100644 --- a/Dockerfile.agent.alpine +++ b/docker/Dockerfile.agent.alpine @@ -1,5 +1,6 @@ -FROM alpine:3.9.4 +# docker build --rm -f docker/Dockerfile.agent.alpine -t woodpeckerci/woodpecker-agent . +FROM alpine:3.14 RUN apk add -U --no-cache ca-certificates ENV GODEBUG=netdns=go @@ -9,4 +10,3 @@ EXPOSE 3000 HEALTHCHECK CMD ["/bin/woodpecker-agent", "ping"] ENTRYPOINT ["/bin/woodpecker-agent"] - diff --git a/docker/Dockerfile.server b/docker/Dockerfile.server new file mode 100644 index 00000000000..a73b8a0f8a4 --- /dev/null +++ b/docker/Dockerfile.server @@ -0,0 +1,20 @@ +# docker build --rm -f docker/Dockerfile.server -t woodpeckerci/woodpecker-server . + +# 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 + +EXPOSE 8000 9000 80 443 + +ENV GODEBUG=netdns=go +ENV WOODPECKER_DATABASE_DATASOURCE=/var/lib/drone/drone.sqlite +ENV WOODPECKER_DATABASE_DRIVER=sqlite3 +ENV XDG_CACHE_HOME=/var/lib/drone + +ADD release/woodpecker-server /bin/ + +ENTRYPOINT ["/bin/woodpecker-server"] diff --git a/Dockerfile.alpine b/docker/Dockerfile.server.alpine similarity index 73% rename from Dockerfile.alpine rename to docker/Dockerfile.server.alpine index 0b7d7677f2d..128f69bfdb1 100644 --- a/Dockerfile.alpine +++ b/docker/Dockerfile.server.alpine @@ -1,8 +1,10 @@ -FROM alpine:3.9.4 -EXPOSE 8000 9000 80 443 +# docker build --rm -f docker/Dockerfile.server.alpine -t woodpeckerci/woodpecker-server . +FROM alpine:3.14 RUN apk add -U --no-cache ca-certificates +EXPOSE 8000 9000 80 443 + ENV GODEBUG=netdns=go ENV WOODPECKER_DATABASE_DATASOURCE=/var/lib/drone/drone.sqlite ENV WOODPECKER_DATABASE_DRIVER=sqlite3 diff --git a/docs/docs/80-downloads.md b/docs/docs/80-downloads.md index f513742678a..07ddff39609 100644 --- a/docs/docs/80-downloads.md +++ b/docs/docs/80-downloads.md @@ -6,6 +6,11 @@ ## Docker images +Image variants: +* The `next` version is based on the current master branch +* The `latest` is same as next (will change after v0.15.0 release to be latest stable release) +* The `x.x.x` version images are stable releases + ``` bash # server docker pull woodpeckerci/woodpecker-server:latest @@ -15,7 +20,7 @@ docker pull woodpeckerci/woodpecker-server:latest-alpine docker pull woodpeckerci/woodpecker-agent:latest docker pull woodpeckerci/woodpecker-agent:latest-alpine -# cli +# TODO: cli docker pull woodpeckerci/woodpecker-cli:latest docker pull woodpeckerci/woodpecker-cli:latest-alpine ```