#!/bin/sh set -o errexit # 版本 VERSION=latest # DockerHub 用户名前缀 / 私有镜像仓库,需要提前登陆好,编译完成后会自动上传 DOCKER_NAMESPACE=registry.cn-beijing.aliyuncs.com/jiquankeji # 容器名字前缀 IMAGE_NAME=jeepay # buildx toolkit 名称 BUILDER=${IMAGE_NAME}-builder # 平台 PLATFORM=linux/amd64,linux/arm64 # 后端 Maven 依赖缓存 BACKEND_DEPS_IMAGE_NAME=${DOCKER_NAMESPACE}/${IMAGE_NAME}-deps:$VERSION FRONTEND_DEPS_IMAGE_NAME=${DOCKER_NAMESPACE}/${IMAGE_NAME}-ui-deps:$VERSION UI_FOLDER=./private-jeepay-ui TARGET=$1 HAS_DEPS=$2 ECHO_NAME=$3 docker_buildx() { build_path=$1 build_name=$2 build_file=$3 build_arg="" for i in "$@"; do if [ "$i" = "$build_path" ] || [ "$i" = "$build_name" ] || [ "$i" = "$build_file" ]; then continue fi build_arg="$build_arg --build-arg $i" done if [ "$ECHO_NAME" = "name" ]; then echo "${IMAGE_NAME}-${build_name}" else CMD="docker buildx build ${build_path} -f ${build_file} --platform ${PLATFORM} ${build_arg} -t ${DOCKER_NAMESPACE}/${IMAGE_NAME}-${build_name}:$VERSION --push" echo "$CMD" eval "$CMD" fi } build_backend() { echo "== 项目后端" if [ "$HAS_DEPS" = "deps" ]; then docker_buildx . deps docs/Dockerfile fi docker_buildx . payment Dockerfile PORT=9216 PLATFORM=payment IMAGES="$BACKEND_DEPS_IMAGE_NAME" docker_buildx . manager Dockerfile PORT=9217 PLATFORM=manager IMAGES="$BACKEND_DEPS_IMAGE_NAME" docker_buildx . merchant Dockerfile PORT=9218 PLATFORM=merchant IMAGES="$BACKEND_DEPS_IMAGE_NAME" } build_frontend() { rm -rf ${UI_FOLDER} git clone https://gitee.com/jeequan/jeepay-ui.git ${UI_FOLDER} echo "== 项目前端" if [ "$HAS_DEPS" = "deps" ]; then docker_buildx ${UI_FOLDER} ui-deps "${UI_FOLDER}/Dockerfile-deps" fi docker_buildx ${UI_FOLDER} ui-payment "${UI_FOLDER}/Dockerfile" PLATFORM=cashier IMAGES="$FRONTEND_DEPS_IMAGE_NAME" docker_buildx ${UI_FOLDER} ui-manager "${UI_FOLDER}/Dockerfile" PLATFORM=manager IMAGES="$FRONTEND_DEPS_IMAGE_NAME" docker_buildx ${UI_FOLDER} ui-merchant "${UI_FOLDER}/Dockerfile" PLATFORM=merchant IMAGES="$FRONTEND_DEPS_IMAGE_NAME" } build_deps() { echo "== 项目依赖环境编译" docker_buildx ./docker/activemq activemq ./docker/activemq/Dockerfile } if [ "$TARGET" != "" ]; then docker buildx rm ${BUILDER} || true docker buildx create --use --name ${BUILDER} --platform linux/arm64,linux/amd64 fi if [ "$TARGET" = "backend" ] || [ "$TARGET" = "all" ]; then build_backend fi if [ "$TARGET" = "frontend" ] || [ "$TARGET" = "all" ]; then build_frontend fi if [ "$TARGET" = "all" ]; then build_deps else echo "./build-docker.sh [backend|frontend|all] [deps] [name]" fi