Skip to content

Commit

Permalink
build dockerfile with git releaser
Browse files Browse the repository at this point in the history
  • Loading branch information
kbudde committed Dec 15, 2021
1 parent 1ff4ab5 commit 63655ff
Show file tree
Hide file tree
Showing 4 changed files with 115 additions and 112 deletions.
67 changes: 0 additions & 67 deletions .github/workflows/docker.yml

This file was deleted.

16 changes: 16 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,22 @@ jobs:
uses: actions/setup-go@v2
with:
go-version: 1.17
-
name: Docker Login
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GH_TOKEN }}
-
name: Login to Docker Hub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Docker Setup Buildx
uses: docker/setup-buildx-action@v1.6.0
-
name: Run GoReleaser
uses: goreleaser/goreleaser-action@v2
Expand Down
94 changes: 92 additions & 2 deletions .goreleaser.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ before:
builds:
- env:
- CGO_ENABLED=0
binary: rabbitmq_exporter-{{.Version}}.{{.Target}}
#binary: rabbitmq_exporter-{{.Version}}.{{.Target}}
targets:
- linux_amd64
- linux_arm64
Expand All @@ -28,4 +28,94 @@ changelog:
- '^docs:'
- '^test:'
release:
discussion_category_name: Announcements
discussion_category_name: Announcements

dockers:
- goos: linux
goarch: amd64
image_templates:
- "kbudde/rabbitmq-exporter:linux-amd64-{{.ShortCommit}}"
- "ghcr.io/kbudde/rabbitmq_exporter:linux-amd64-{{.ShortCommit}}"
use: buildx
build_flag_templates:
- "--label=org.opencontainers.image.created={{.Date}}"
- "--label=org.opencontainers.image.title={{.ProjectName}}"
- "--label=org.opencontainers.image.revision={{.FullCommit}}"
- "--label=org.opencontainers.image.version={{.Version}}"
- "--label=org.opencontainers.image.source=https://github.com/kbudde/rabbitmq_exporter"
- "--platform=linux/amd64"

- goos: linux
goarch: arm
goarm: 6
image_templates:
- "kbudde/rabbitmq-exporter:linux-arm6-{{.ShortCommit}}"
- "ghcr.io/kbudde/rabbitmq_exporter:linux-arm6-{{.ShortCommit}}"
use: buildx
build_flag_templates:
- "--label=org.opencontainers.image.created={{.Date}}"
- "--label=org.opencontainers.image.title={{.ProjectName}}"
- "--label=org.opencontainers.image.revision={{.FullCommit}}"
- "--label=org.opencontainers.image.version={{.Version}}"
- "--label=org.opencontainers.image.source=https://github.com/kbudde/rabbitmq_exporter"
- "--platform=linux/arm/v6"

- goos: linux
goarch: arm
goarm: 7
image_templates:
- "kbudde/rabbitmq-exporter:linux-arm7-{{.ShortCommit}}"
- "ghcr.io/kbudde/rabbitmq_exporter:linux-arm7-{{.ShortCommit}}"
use: buildx
build_flag_templates:
- "--label=org.opencontainers.image.created={{.Date}}"
- "--label=org.opencontainers.image.title={{.ProjectName}}"
- "--label=org.opencontainers.image.revision={{.FullCommit}}"
- "--label=org.opencontainers.image.version={{.Version}}"
- "--label=org.opencontainers.image.source=https://github.com/kbudde/rabbitmq_exporter"
- "--platform=linux/arm/v7"

- goos: linux
goarch: arm64
image_templates:
- "kbudde/rabbitmq-exporter:linux-arm64-{{.ShortCommit}}"
- "ghcr.io/kbudde/rabbitmq_exporter:linux-arm64-{{.ShortCommit}}"
use: buildx
build_flag_templates:
- "--label=org.opencontainers.image.created={{.Date}}"
- "--label=org.opencontainers.image.title={{.ProjectName}}"
- "--label=org.opencontainers.image.revision={{.FullCommit}}"
- "--label=org.opencontainers.image.version={{.Version}}"
- "--label=org.opencontainers.image.source=https://github.com/kbudde/rabbitmq_exporter"
- "--platform=linux/arm64"


docker_manifests:
-
name_template: ghcr.io/kbudde/rabbitmq_exporter:latest
image_templates:
- ghcr.io/kbudde/rabbitmq_exporter:linux-amd64-{{.ShortCommit}}
- ghcr.io/kbudde/rabbitmq_exporter:linux-arm6-{{.ShortCommit}}
- ghcr.io/kbudde/rabbitmq_exporter:linux-arm7-{{.ShortCommit}}
- ghcr.io/kbudde/rabbitmq_exporter:linux-arm64-{{.ShortCommit}}
-
name_template: kbudde/rabbitmq-exporter:latest
image_templates:
- kbudde/rabbitmq-exporter:linux-amd64-{{.ShortCommit}}
- kbudde/rabbitmq-exporter:linux-arm6-{{.ShortCommit}}
- kbudde/rabbitmq-exporter:linux-arm7-{{.ShortCommit}}
- kbudde/rabbitmq-exporter:linux-arm64-{{.ShortCommit}}
-
name_template: ghcr.io/kbudde/rabbitmq_exporter:{{.Version}}
image_templates:
- ghcr.io/kbudde/rabbitmq_exporter:linux-amd64-{{.ShortCommit}}
- ghcr.io/kbudde/rabbitmq_exporter:linux-arm6-{{.ShortCommit}}
- ghcr.io/kbudde/rabbitmq_exporter:linux-arm7-{{.ShortCommit}}
- ghcr.io/kbudde/rabbitmq_exporter:linux-arm64-{{.ShortCommit}}
-
name_template: kbudde/rabbitmq-exporter:{{.Version}}
image_templates:
- kbudde/rabbitmq-exporter:linux-amd64-{{.ShortCommit}}
- kbudde/rabbitmq-exporter:linux-arm6-{{.ShortCommit}}
- kbudde/rabbitmq-exporter:linux-arm7-{{.ShortCommit}}
- kbudde/rabbitmq-exporter:linux-arm64-{{.ShortCommit}}
50 changes: 7 additions & 43 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,68 +1,32 @@
# Accept the Go version for the image to be set as a build argument.
ARG GO_VERSION=1.15
# First stage: build the executable.
FROM golang:${GO_VERSION}-alpine AS builder

ARG VERSION=""
ARG BRANCH=""
ARG COMMIT=""


# Create the user and group files that will be used in the running container to
# run the process as an unprivileged user.
RUN mkdir /user && \
echo 'nobody:x:65534:65534:nobody:/:' > /user/passwd && \
echo 'nobody:x:65534:' > /user/group
FROM alpine AS builder

# Install the Certificate-Authority certificates for the app to be able to make
# calls to HTTPS endpoints.
# Git is required for fetching the dependencies.
RUN apk add --no-cache ca-certificates git

# Set the working directory outside $GOPATH to enable the support for modules.
WORKDIR /src

# Fetch dependencies first; they are less susceptible to change on every build
# and will therefore be cached for speeding up the next build
COPY ./go.mod ./go.sum ./
RUN go mod download

# Import the code from the context.
COPY ./ ./

# Build the executable to `/app`. Mark the build as statically linked.
RUN CGO_ENABLED=0 go build \
-installsuffix 'static' \
-ldflags "-X main.Revision=${COMMIT} \
-X main.Branch=${BRANCH} \
-X main.Version=${VERSION} \
-X main.BuildDate=$(date -u ""+%Y%m%d-%H:%M:%S"")" \
-o /app .
RUN apk add --no-cache ca-certificates

# Final stage: the running container.
FROM scratch AS final

# Add maintainer label in case somebody has questions.
LABEL maintainer="Kris.Budde@gmail.com"

# Import the user and group files from the first stage.
COPY --from=builder /user/group /user/passwd /etc/

# Import the Certificate-Authority certificates for enabling HTTPS.
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/

# Import the compiled executable from the first stage.
COPY --from=builder /app /app
COPY rabbitmq_exporter /rabbitmq_exporter

# Declare the port on which the webserver will be exposed.
# As we're going to run the executable as an unprivileged user, we can't bind
# to ports below 1024.
EXPOSE 9419

# Perform any further action as an unprivileged user.
USER nobody:nobody
USER 65535:65535

# Check if exporter is alive; 10 retries gives prometheus some time to retrieve bad data (5 minutes)
HEALTHCHECK --retries=10 CMD ["/app", "-check-url", "http://localhost:9419/health"]
HEALTHCHECK --retries=10 CMD ["/rabbitmq_exporter", "-check-url", "http://localhost:9419/health"]

# Run the compiled binary.
ENTRYPOINT ["/app"]
ENTRYPOINT ["/rabbitmq_exporter"]

0 comments on commit 63655ff

Please sign in to comment.