Separate pipeline for internal/external build and support multi arch (#2991)

* separate pipeline for internal/external build and support multi arch
* remove distutils and use node:lts-alpine in both
* change base image arguments
* fix local naming and base image
* address feedback

---------

Co-authored-by: Felix Kunde <felix-kunde@gmx.de>
This commit is contained in:
Ida Novindasari 2025-12-10 16:45:42 +01:00 committed by GitHub
parent 842c6eded3
commit 1b4ffb0875
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 70 additions and 32 deletions

View File

@ -7,6 +7,8 @@ env:
on:
push:
branches:
- master
tags:
- '*'

View File

@ -12,7 +12,8 @@ LOCAL_BUILD_FLAGS ?= $(BUILD_FLAGS)
LDFLAGS ?= -X=main.version=$(VERSION)
DOCKERDIR = docker
IMAGE ?= registry.opensource.zalan.do/acid/$(BINARY)
BASE_IMAGE ?= alpine:latest
IMAGE ?= $(BINARY)
TAG ?= $(VERSION)
GITHEAD = $(shell git rev-parse --short HEAD)
GITURL = $(shell git config --get remote.origin.url)
@ -42,8 +43,9 @@ ifndef GOPATH
GOPATH := $(HOME)/go
endif
PATH := $(GOPATH)/bin:$(PATH)
SHELL := env PATH="$(PATH)" $(SHELL)
PATH := $(GOPATH)/bin:$(PATH)
SHELL := env PATH="$(PATH)" $(SHELL)
IMAGE_TAG := $(IMAGE):$(TAG)$(CDP_TAG)$(DEBUG_FRESH)$(DEBUG_POSTFIX)
default: local
@ -66,14 +68,11 @@ docker: ${DOCKERDIR}/${DOCKERFILE}
echo "Version ${VERSION}"
echo "CDP tag ${CDP_TAG}"
echo "git describe $(shell git describe --tags --always --dirty)"
docker build --rm -t "$(IMAGE):$(TAG)$(CDP_TAG)$(DEBUG_FRESH)$(DEBUG_POSTFIX)" -f "${DOCKERDIR}/${DOCKERFILE}" --build-arg VERSION="${VERSION}" .
docker build --rm -t "$(IMAGE_TAG)" -f "${DOCKERDIR}/${DOCKERFILE}" --build-arg VERSION="${VERSION}" --build-arg BASE_IMAGE="${BASE_IMAGE}" .
indocker-race:
docker run --rm -v "${GOPATH}":"${GOPATH}" -e GOPATH="${GOPATH}" -e RACE=1 -w ${PWD} golang:1.25.3 bash -c "make linux"
push:
docker push "$(IMAGE):$(TAG)$(CDP_TAG)"
mocks:
GO111MODULE=on go generate ./...

View File

@ -1,6 +1,15 @@
version: "2017-09-20"
allow_concurrent_steps: true
build_env: &BUILD_ENV
PYTHON_BASE_IMAGE: container-registry.zalando.net/library/python-3.11-slim
ALPINE_BASE_IMAGE: container-registry.zalando.net/library/alpine-3
MULTI_ARCH_REGISTRY: container-registry-test.zalando.net/acid
pipeline:
- id: build-postgres-operator
env:
<<: *BUILD_ENV
type: script
vm_config:
type: linux
@ -17,17 +26,26 @@ pipeline:
- desc: Build Docker image
cmd: |
IS_PR_BUILD=${CDP_PULL_REQUEST_NUMBER+"true"}
if [[ ${CDP_TARGET_BRANCH} == "master" && ${IS_PR_BUILD} != "true" ]]
then
IMAGE=registry-write.opensource.zalan.do/acid/postgres-operator
if [ -z ${CDP_SOURCE_BRANCH} ]; then
IMAGE=${MULTI_ARCH_REGISTRY}/postgres-operator
else
IMAGE=registry-write.opensource.zalan.do/acid/postgres-operator-test
IMAGE=${MULTI_ARCH_REGISTRY}/postgres-operator-test
fi
docker buildx create --config /etc/cdp-buildkitd.toml --driver-opt network=host --bootstrap --use
docker buildx build --platform "linux/amd64,linux/arm64" \
--build-arg BASE_IMAGE="${ALPINE_BASE_IMAGE}" \
-t "${IMAGE}:${CDP_BUILD_VERSION}" \
-f docker/Dockerfile \
--push .
if [ -z ${CDP_SOURCE_BRANCH} ]; then
cdp-promote-image ${IMAGE}:${CDP_BUILD_VERSION}
fi
export IMAGE
make docker push
- id: build-operator-ui
env:
<<: *BUILD_ENV
type: script
vm_config:
type: linux
@ -46,18 +64,21 @@ pipeline:
- desc: 'Build and push Docker image'
cmd: |
cd ui
IS_PR_BUILD=${CDP_PULL_REQUEST_NUMBER+"true"}
if [[ ${CDP_TARGET_BRANCH} == "master" && ${IS_PR_BUILD} != "true" ]]
then
IMAGE=registry-write.opensource.zalan.do/acid/postgres-operator-ui
if [ -z ${CDP_SOURCE_BRANCH} ]; then
IMAGE=${MULTI_ARCH_REGISTRY}/postgres-operator-ui
else
IMAGE=registry-write.opensource.zalan.do/acid/postgres-operator-ui-test
IMAGE=${MULTI_ARCH_REGISTRY}/postgres-operator-ui-test
fi
IMAGE_TAG=$(make docker-push IMAGE=${IMAGE} BASE_IMAGE=${PYTHON_BASE_IMAGE})
if [ -z ${CDP_SOURCE_BRANCH} ]; then
cdp-promote-image ${IMAGE_TAG}
fi
export IMAGE
make docker
make push
- id: build-logical-backup
env:
<<: *BUILD_ENV
type: script
vm_config:
type: linux
@ -67,6 +88,11 @@ pipeline:
cmd: |
cd logical-backup
export TAG=$(git describe --tags --always --dirty)
IMAGE="registry-write.opensource.zalan.do/acid/logical-backup"
docker build --rm -t "$IMAGE:$TAG$CDP_TAG" .
docker push "$IMAGE:$TAG$CDP_TAG"
docker buildx create --config /etc/cdp-buildkitd.toml --driver-opt network=host --bootstrap --use
docker buildx build --platform linux/amd64,linux/arm64 \
-t ${MULTI_ARCH_REGISTRY}/postgres-operator-logical-backup:${TAG} \
--push .
if [ -z ${CDP_SOURCE_BRANCH} ]; then
cdp-promote-image ${MULTI_ARCH_REGISTRY}/postgres-operator-logical-backup:${TAG}
fi

View File

@ -1,4 +1,4 @@
ARG BASE_IMAGE=registry.opensource.zalan.do/library/alpine-3:latest
ARG BASE_IMAGE=alpine:latest
FROM golang:1.25-alpine AS builder
ARG VERSION=latest

View File

@ -1,4 +1,4 @@
ARG BASE_IMAGE=registry.opensource.zalan.do/library/python-3.11-slim:latest
ARG BASE_IMAGE=python:3.11-slim
ARG NODE_IMAGE=node:lts-alpine
FROM $NODE_IMAGE AS build

View File

@ -1,6 +1,7 @@
.PHONY: clean test appjs docker push mock
IMAGE ?= registry.opensource.zalan.do/acid/postgres-operator-ui
IMAGE ?= postgres-operator-ui
BASE_IMAGE ?= python:3.11-slim
VERSION ?= $(shell git describe --tags --always --dirty)
TAG ?= $(VERSION)
GITHEAD = $(shell git rev-parse --short HEAD)
@ -30,10 +31,20 @@ docker: appjs
echo "Version ${VERSION}"
echo "CDP tag ${CDP_TAG}"
echo "git describe $(shell git describe --tags --always --dirty)"
docker build --rm -t "$(IMAGE):$(TAG)$(CDP_TAG)" -f Dockerfile .
push:
docker push "$(IMAGE):$(TAG)$(CDP_TAG)"
docker build --rm -t "$(IMAGE):$(TAG)$(CDP_TAG)" -f Dockerfile --build-arg BASE_IMAGE="${BASE_IMAGE}" .
docker-push: appjs
echo "Tag ${TAG}"
echo "Version ${VERSION}"
echo "CDP tag ${CDP_TAG}"
echo "git describe $(shell git describe --tags --always --dirty)"
docker buildx create --config /etc/cdp-buildkitd.toml --driver-opt network=host --bootstrap --use
docker buildx build --platform linux/amd64,linux/arm64 \
--build-arg BASE_IMAGE="${BASE_IMAGE}" \
-f Dockerfile \
-t "$(IMAGE):$(TAG)$(CDP_TAG)" \
--push .
echo "$(IMAGE):$(TAG)$(CDP_TAG)"
mock:
docker run -it -p 8081:8081 "$(IMAGE):$(TAG)" --mock