From 43ca1df6bb564514c987c156224701b96911710c Mon Sep 17 00:00:00 2001 From: Mauro Stettler Date: Thu, 14 Dec 2023 14:07:58 +0100 Subject: [PATCH 01/13] build debug image Signed-off-by: Mauro Stettler --- Dockerfile.delve | 30 ++++++++++++++++++++++++++++++ Makefile | 7 +++++++ 2 files changed, 37 insertions(+) create mode 100644 Dockerfile.delve diff --git a/Dockerfile.delve b/Dockerfile.delve new file mode 100644 index 000000000..8809ffa6f --- /dev/null +++ b/Dockerfile.delve @@ -0,0 +1,30 @@ +FROM golang:1.21-alpine3.18 AS build + +ARG TARGETOS +ARG TARGETARCH +ARG BUILDTARGET=rollout-operator-debug + +RUN apk add --no-cache build-base git + +COPY . /src/rollout-operator +WORKDIR /src/rollout-operator +RUN go install github.com/go-delve/delve/cmd/dlv@v1.21.2 +RUN /go/bin/dlv -h +RUN GOOS=${TARGETOS} GOARCH=${TARGETARCH} make ${BUILDTARGET} + +FROM alpine:3.18 +RUN apk add --no-cache ca-certificates + +COPY --from=build /go/bin/dlv /bin/dlv +COPY --from=build /src/rollout-operator/rollout-operator /bin/rollout-operator +ENTRYPOINT [ "/usr/bin/dlv", "--headless=true", "--listen=:49988", "--api-version=2", "--accept-multiclient", "exec", "/bin/rollout-operator" ] + +# Create rollout-operator user to run as non-root. +RUN addgroup -g 10000 -S rollout-operator && \ + adduser -u 10000 -S rollout-operator -G rollout-operator +USER rollout-operator:rollout-operator + +ARG revision +LABEL org.opencontainers.image.title="rollout-operator" \ + org.opencontainers.image.source="https://github.com/grafana/rollout-operator" \ + org.opencontainers.image.revision="${revision}" diff --git a/Makefile b/Makefile index 220d2a2c8..5753e310c 100644 --- a/Makefile +++ b/Makefile @@ -21,6 +21,9 @@ help: ## Display this help and any documented user-facing targets rollout-operator: $(GO_FILES) ## Build the rollout-operator binary GOOS=$(GOOS) GOARCH=$(GOARCH) CGO_ENABLED=0 go build -ldflags '-extldflags "-static"' ./cmd/rollout-operator +rollout-operator-debug: $(GO_FILES) + GOOS=$(GOOS) GOARCH=$(GOARCH) CGO_ENABLED=0 go build -ldflags '-extldflags "-static"' ./cmd/rollout-operator + .PHONY: rollout-operator-boringcrypto rollout-operator-boringcrypto: $(GO_FILES) ## Build the rollout-operator binary with boringcrypto GOEXPERIMENT=boringcrypto GOOS=$(GOOS) GOARCH=$(GOARCH) CGO_ENABLED=1 go build -tags netgo ./cmd/rollout-operator @@ -29,6 +32,10 @@ rollout-operator-boringcrypto: $(GO_FILES) ## Build the rollout-operator binary build-image: clean ## Build the rollout-operator image docker buildx build --load --platform linux/amd64 --build-arg revision=$(GIT_REVISION) -t rollout-operator:latest -t rollout-operator:$(IMAGE_TAG) . +.PHONY: build-debug-image ## Build a rollout-operator image running in delve +build-debug-image: clean + docker buildx build --load --platform linux/amd64,linux/arm64 --build-arg revision=$(GIT_REVISION) -t rollout-operator:latest -t rollout-operator:$(IMAGE_TAG) -f Dockerfile.delve . + .PHONY: build-image-boringcrypto build-image-boringcrypto: clean ## Build the rollout-operator image with boringcrypto # Tags with the regular image repo for integration testing From befa19fc98a0d840f059340429a090be9b9f296c Mon Sep 17 00:00:00 2001 From: Mauro Stettler Date: Thu, 14 Dec 2023 14:08:41 +0100 Subject: [PATCH 02/13] only arm Signed-off-by: Mauro Stettler --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 5753e310c..c4fd7428c 100644 --- a/Makefile +++ b/Makefile @@ -34,7 +34,7 @@ build-image: clean ## Build the rollout-operator image .PHONY: build-debug-image ## Build a rollout-operator image running in delve build-debug-image: clean - docker buildx build --load --platform linux/amd64,linux/arm64 --build-arg revision=$(GIT_REVISION) -t rollout-operator:latest -t rollout-operator:$(IMAGE_TAG) -f Dockerfile.delve . + docker buildx build --load --platform linux/arm64 --build-arg revision=$(GIT_REVISION) -t rollout-operator:latest -t rollout-operator:$(IMAGE_TAG) -f Dockerfile.delve . .PHONY: build-image-boringcrypto build-image-boringcrypto: clean ## Build the rollout-operator image with boringcrypto From 1415066311544e6e3b928652ca0aec6115fb0db2 Mon Sep 17 00:00:00 2001 From: Mauro Stettler Date: Thu, 14 Dec 2023 14:12:03 +0100 Subject: [PATCH 03/13] add target to publish debug image Signed-off-by: Mauro Stettler --- Makefile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Makefile b/Makefile index c4fd7428c..831a6a487 100644 --- a/Makefile +++ b/Makefile @@ -48,6 +48,10 @@ publish-images: publish-standard-image publish-boringcrypto-image ## Build and p publish-standard-image: clean ## Build and publish only the standard rollout-operator image docker buildx build --push --platform linux/amd64,linux/arm64 --build-arg revision=$(GIT_REVISION) --build-arg BUILDTARGET=rollout-operator -t $(IMAGE_PREFIX)/rollout-operator:$(IMAGE_TAG) . +.PHONY: publish-debug-image +publish-debug-image: clean + docker buildx build --push --platform linux/amd64,linux/arm64 --build-arg revision=$(GIT_REVISION) --build-arg BUILDTARGET=rollout-operator-debug -t rollout-operator-debug:latest -t rollout-operator-debug:$(IMAGE_TAG) -f Dockerfile.delve . + .PHONY: publish-boringcrypto-image publish-boringcrypto-image: clean ## Build and publish only the boring-crypto rollout-operator image docker buildx build --push --platform linux/amd64,linux/arm64 --build-arg revision=$(GIT_REVISION) --build-arg BUILDTARGET=rollout-operator-boringcrypto -t $(IMAGE_PREFIX)/rollout-operator-boringcrypto:$(IMAGE_TAG) . From a53a136d6b87f0ea1c3b34aa05c9c44e219a962c Mon Sep 17 00:00:00 2001 From: Mauro Stettler Date: Thu, 14 Dec 2023 14:15:18 +0100 Subject: [PATCH 04/13] update title Signed-off-by: Mauro Stettler --- Dockerfile.delve | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile.delve b/Dockerfile.delve index 8809ffa6f..9120289f8 100644 --- a/Dockerfile.delve +++ b/Dockerfile.delve @@ -25,6 +25,6 @@ RUN addgroup -g 10000 -S rollout-operator && \ USER rollout-operator:rollout-operator ARG revision -LABEL org.opencontainers.image.title="rollout-operator" \ +LABEL org.opencontainers.image.title="rollout-operator-debug" \ org.opencontainers.image.source="https://github.com/grafana/rollout-operator" \ org.opencontainers.image.revision="${revision}" From b6a6cb39487a5db67f6e07cf21eafa9b75c95977 Mon Sep 17 00:00:00 2001 From: Mauro Stettler Date: Thu, 14 Dec 2023 14:21:34 +0100 Subject: [PATCH 05/13] correct tag prefix Signed-off-by: Mauro Stettler --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 831a6a487..ce636b209 100644 --- a/Makefile +++ b/Makefile @@ -50,7 +50,7 @@ publish-standard-image: clean ## Build and publish only the standard rollout-ope .PHONY: publish-debug-image publish-debug-image: clean - docker buildx build --push --platform linux/amd64,linux/arm64 --build-arg revision=$(GIT_REVISION) --build-arg BUILDTARGET=rollout-operator-debug -t rollout-operator-debug:latest -t rollout-operator-debug:$(IMAGE_TAG) -f Dockerfile.delve . + docker buildx build --push --platform linux/amd64,linux/arm64 --build-arg revision=$(GIT_REVISION) --build-arg BUILDTARGET=rollout-operator-debug -t $(IMAGE_PREFIX)/rollout-operator-debug:latest -t $(IMAGE_PREFIX)/rollout-operator-debug:$(IMAGE_TAG) -f Dockerfile.delve . .PHONY: publish-boringcrypto-image publish-boringcrypto-image: clean ## Build and publish only the boring-crypto rollout-operator image From 04a2d3a1d6f5fa2b6c78a383fd3d7835a1fe150e Mon Sep 17 00:00:00 2001 From: Mauro Stettler Date: Thu, 14 Dec 2023 14:23:15 +0100 Subject: [PATCH 06/13] same repo different tag Signed-off-by: Mauro Stettler --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index ce636b209..77de17af7 100644 --- a/Makefile +++ b/Makefile @@ -50,7 +50,7 @@ publish-standard-image: clean ## Build and publish only the standard rollout-ope .PHONY: publish-debug-image publish-debug-image: clean - docker buildx build --push --platform linux/amd64,linux/arm64 --build-arg revision=$(GIT_REVISION) --build-arg BUILDTARGET=rollout-operator-debug -t $(IMAGE_PREFIX)/rollout-operator-debug:latest -t $(IMAGE_PREFIX)/rollout-operator-debug:$(IMAGE_TAG) -f Dockerfile.delve . + docker buildx build --push --platform linux/amd64,linux/arm64 --build-arg revision=$(GIT_REVISION) --build-arg BUILDTARGET=rollout-operator-debug -t $(IMAGE_PREFIX)/rollout-operator:$(IMAGE_TAG)-debug -f Dockerfile.delve . .PHONY: publish-boringcrypto-image publish-boringcrypto-image: clean ## Build and publish only the boring-crypto rollout-operator image From 0641cd15f624cc4536fe4a7f959b5a73f2d4ea00 Mon Sep 17 00:00:00 2001 From: Mauro Stettler Date: Thu, 14 Dec 2023 14:32:24 +0100 Subject: [PATCH 07/13] fix dlv path Signed-off-by: Mauro Stettler --- Dockerfile.delve | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile.delve b/Dockerfile.delve index 9120289f8..684dca6d5 100644 --- a/Dockerfile.delve +++ b/Dockerfile.delve @@ -17,7 +17,7 @@ RUN apk add --no-cache ca-certificates COPY --from=build /go/bin/dlv /bin/dlv COPY --from=build /src/rollout-operator/rollout-operator /bin/rollout-operator -ENTRYPOINT [ "/usr/bin/dlv", "--headless=true", "--listen=:49988", "--api-version=2", "--accept-multiclient", "exec", "/bin/rollout-operator" ] +ENTRYPOINT [ "/bin/dlv", "--headless=true", "--listen=:49988", "--api-version=2", "--accept-multiclient", "exec", "/bin/rollout-operator" ] # Create rollout-operator user to run as non-root. RUN addgroup -g 10000 -S rollout-operator && \ From 714108c853981717957ce55bd9b9f79287f90f3e Mon Sep 17 00:00:00 2001 From: Mauro Stettler Date: Thu, 14 Dec 2023 14:39:25 +0100 Subject: [PATCH 08/13] fix delve parameters Signed-off-by: Mauro Stettler --- Dockerfile.delve | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile.delve b/Dockerfile.delve index 684dca6d5..f99d141db 100644 --- a/Dockerfile.delve +++ b/Dockerfile.delve @@ -17,7 +17,7 @@ RUN apk add --no-cache ca-certificates COPY --from=build /go/bin/dlv /bin/dlv COPY --from=build /src/rollout-operator/rollout-operator /bin/rollout-operator -ENTRYPOINT [ "/bin/dlv", "--headless=true", "--listen=:49988", "--api-version=2", "--accept-multiclient", "exec", "/bin/rollout-operator" ] +ENTRYPOINT [ "/bin/dlv", "--headless=true", "--listen=:49988", "--api-version=2", "--accept-multiclient", "exec", "/bin/rollout-operator" , "--continue", "--"] # Create rollout-operator user to run as non-root. RUN addgroup -g 10000 -S rollout-operator && \ From 21d43ba3348ed79f212f2e66af6a6e5283b3b756 Mon Sep 17 00:00:00 2001 From: Mauro Stettler Date: Thu, 14 Dec 2023 15:00:24 +0100 Subject: [PATCH 09/13] fix build flags Signed-off-by: Mauro Stettler --- Dockerfile.delve | 2 +- Makefile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile.delve b/Dockerfile.delve index f99d141db..29951afb3 100644 --- a/Dockerfile.delve +++ b/Dockerfile.delve @@ -8,7 +8,7 @@ RUN apk add --no-cache build-base git COPY . /src/rollout-operator WORKDIR /src/rollout-operator -RUN go install github.com/go-delve/delve/cmd/dlv@v1.21.2 +RUN go install -ldflags "-s -w -extldflags '-static'" github.com/go-delve/delve/cmd/dlv@v1.21.2 RUN /go/bin/dlv -h RUN GOOS=${TARGETOS} GOARCH=${TARGETARCH} make ${BUILDTARGET} diff --git a/Makefile b/Makefile index 77de17af7..27bbe6085 100644 --- a/Makefile +++ b/Makefile @@ -22,7 +22,7 @@ rollout-operator: $(GO_FILES) ## Build the rollout-operator binary GOOS=$(GOOS) GOARCH=$(GOARCH) CGO_ENABLED=0 go build -ldflags '-extldflags "-static"' ./cmd/rollout-operator rollout-operator-debug: $(GO_FILES) - GOOS=$(GOOS) GOARCH=$(GOARCH) CGO_ENABLED=0 go build -ldflags '-extldflags "-static"' ./cmd/rollout-operator + GOOS=$(GOOS) GOARCH=$(GOARCH) CGO_ENABLED=0 go build -gcflags "all=-N -l" -ldflags '-extldflags "-static"' ./cmd/rollout-operator .PHONY: rollout-operator-boringcrypto rollout-operator-boringcrypto: $(GO_FILES) ## Build the rollout-operator binary with boringcrypto From c1d94f53cb82bdb47c5460310f43f821eb189941 Mon Sep 17 00:00:00 2001 From: Mauro Stettler Date: Thu, 14 Dec 2023 15:13:52 +0100 Subject: [PATCH 10/13] go install dlv like normal Signed-off-by: Mauro Stettler --- Dockerfile.delve | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile.delve b/Dockerfile.delve index 29951afb3..f99d141db 100644 --- a/Dockerfile.delve +++ b/Dockerfile.delve @@ -8,7 +8,7 @@ RUN apk add --no-cache build-base git COPY . /src/rollout-operator WORKDIR /src/rollout-operator -RUN go install -ldflags "-s -w -extldflags '-static'" github.com/go-delve/delve/cmd/dlv@v1.21.2 +RUN go install github.com/go-delve/delve/cmd/dlv@v1.21.2 RUN /go/bin/dlv -h RUN GOOS=${TARGETOS} GOARCH=${TARGETARCH} make ${BUILDTARGET} From 1d4005d88f0fd20181dfe6107b1c6d2515e43160 Mon Sep 17 00:00:00 2001 From: Mauro Stettler Date: Fri, 15 Dec 2023 11:34:49 +0100 Subject: [PATCH 11/13] update alpine Signed-off-by: Mauro Stettler --- Dockerfile.delve | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile.delve b/Dockerfile.delve index f99d141db..fcf79f17a 100644 --- a/Dockerfile.delve +++ b/Dockerfile.delve @@ -1,4 +1,4 @@ -FROM golang:1.21-alpine3.18 AS build +FROM golang:1.21-alpine3.19 AS build ARG TARGETOS ARG TARGETARCH @@ -12,7 +12,7 @@ RUN go install github.com/go-delve/delve/cmd/dlv@v1.21.2 RUN /go/bin/dlv -h RUN GOOS=${TARGETOS} GOARCH=${TARGETARCH} make ${BUILDTARGET} -FROM alpine:3.18 +FROM alpine:3.19 RUN apk add --no-cache ca-certificates COPY --from=build /go/bin/dlv /bin/dlv From 97d27f4801b5dfaa2e19febeae1edf2d07499078 Mon Sep 17 00:00:00 2001 From: Mauro Stettler Date: Fri, 15 Dec 2023 11:35:38 +0100 Subject: [PATCH 12/13] comment Signed-off-by: Mauro Stettler --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 27bbe6085..26cf50027 100644 --- a/Makefile +++ b/Makefile @@ -21,7 +21,7 @@ help: ## Display this help and any documented user-facing targets rollout-operator: $(GO_FILES) ## Build the rollout-operator binary GOOS=$(GOOS) GOARCH=$(GOARCH) CGO_ENABLED=0 go build -ldflags '-extldflags "-static"' ./cmd/rollout-operator -rollout-operator-debug: $(GO_FILES) +rollout-operator-debug: $(GO_FILES) ## Build the rollout-operator binary without optimizations GOOS=$(GOOS) GOARCH=$(GOARCH) CGO_ENABLED=0 go build -gcflags "all=-N -l" -ldflags '-extldflags "-static"' ./cmd/rollout-operator .PHONY: rollout-operator-boringcrypto @@ -32,7 +32,7 @@ rollout-operator-boringcrypto: $(GO_FILES) ## Build the rollout-operator binary build-image: clean ## Build the rollout-operator image docker buildx build --load --platform linux/amd64 --build-arg revision=$(GIT_REVISION) -t rollout-operator:latest -t rollout-operator:$(IMAGE_TAG) . -.PHONY: build-debug-image ## Build a rollout-operator image running in delve +.PHONY: build-debug-image ## Build a rollout-operator debug image running in delve build-debug-image: clean docker buildx build --load --platform linux/arm64 --build-arg revision=$(GIT_REVISION) -t rollout-operator:latest -t rollout-operator:$(IMAGE_TAG) -f Dockerfile.delve . From bed708e1141bb4815e5cd4bc41bc2efc1955a0c9 Mon Sep 17 00:00:00 2001 From: Mauro Stettler Date: Fri, 15 Dec 2023 11:43:24 +0100 Subject: [PATCH 13/13] separate build targets per arch for local builds Signed-off-by: Mauro Stettler --- Makefile | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 26cf50027..eb740d239 100644 --- a/Makefile +++ b/Makefile @@ -4,6 +4,7 @@ GIT_REVISION := $(shell git rev-parse --short HEAD) IMAGE_PREFIX ?= grafana IMAGE_TAG ?= $(subst /,-,$(GIT_BRANCH))-$(GIT_REVISION) +IMAGE_TAG_DEBUG ?= $(IMAGE_TAG)-debug GOOS ?= $(shell go env GOOS) GOARCH ?= $(shell go env GOARCH) @@ -32,9 +33,14 @@ rollout-operator-boringcrypto: $(GO_FILES) ## Build the rollout-operator binary build-image: clean ## Build the rollout-operator image docker buildx build --load --platform linux/amd64 --build-arg revision=$(GIT_REVISION) -t rollout-operator:latest -t rollout-operator:$(IMAGE_TAG) . -.PHONY: build-debug-image ## Build a rollout-operator debug image running in delve -build-debug-image: clean - docker buildx build --load --platform linux/arm64 --build-arg revision=$(GIT_REVISION) -t rollout-operator:latest -t rollout-operator:$(IMAGE_TAG) -f Dockerfile.delve . +# Separate build targets per architecture because docker exporter currently doesn't support multi-arch builds on mac. +.PHONY: build-debug-image-amd64 ## Build a rollout-operator debug image running in delve +build-debug-image-amd64: clean + docker buildx build --load --platform linux/amd64 --build-arg revision=$(GIT_REVISION) -t rollout-operator:$(IMAGE_TAG_DEBUG) -f Dockerfile.delve . + +.PHONY: build-debug-image-arm64 ## Build a rollout-operator debug image running in delve +build-debug-image-arm64: clean + docker buildx build --load --platform linux/arm64 --build-arg revision=$(GIT_REVISION) -t rollout-operator:$(IMAGE_TAG_DEBUG) -f Dockerfile.delve . .PHONY: build-image-boringcrypto build-image-boringcrypto: clean ## Build the rollout-operator image with boringcrypto @@ -50,7 +56,7 @@ publish-standard-image: clean ## Build and publish only the standard rollout-ope .PHONY: publish-debug-image publish-debug-image: clean - docker buildx build --push --platform linux/amd64,linux/arm64 --build-arg revision=$(GIT_REVISION) --build-arg BUILDTARGET=rollout-operator-debug -t $(IMAGE_PREFIX)/rollout-operator:$(IMAGE_TAG)-debug -f Dockerfile.delve . + docker buildx build --push --platform linux/amd64,linux/arm64 --build-arg revision=$(GIT_REVISION) --build-arg BUILDTARGET=rollout-operator-debug -t $(IMAGE_PREFIX)/rollout-operator:$(IMAGE_TAG_DEBUG) -f Dockerfile.delve . .PHONY: publish-boringcrypto-image publish-boringcrypto-image: clean ## Build and publish only the boring-crypto rollout-operator image