feat: 支持仅推送前端或后端镜像

This commit is contained in:
zerosaturation 2026-01-08 23:05:44 +08:00
parent 1c878f961e
commit ad00d49eeb

View File

@ -76,6 +76,8 @@ show_help() {
-t, --tag TAG 镜像标签 [默认: latest会自动使用环境标签] -t, --tag TAG 镜像标签 [默认: latest会自动使用环境标签]
--skip-images 跳过镜像推送,仅推送配置文件 --skip-images 跳过镜像推送,仅推送配置文件
--skip-files 跳过配置文件推送,仅推送镜像 --skip-files 跳过配置文件推送,仅推送镜像
--frontend-only 仅推送前端镜像
--backend-only 仅推送后端镜像
--help 显示此帮助信息 --help 显示此帮助信息
示例: 示例:
@ -85,6 +87,8 @@ show_help() {
$0 -h 192.168.1.100 -d /home/deploy/anxin # 指定目标路径 $0 -h 192.168.1.100 -d /home/deploy/anxin # 指定目标路径
$0 -h 192.168.1.100 -t v1.0.0 # 指定镜像标签 $0 -h 192.168.1.100 -t v1.0.0 # 指定镜像标签
$0 -h 192.168.1.100 --skip-images # 仅推送配置文件 $0 -h 192.168.1.100 --skip-images # 仅推送配置文件
$0 -h 192.168.1.100 --frontend-only # 仅推送前端镜像
$0 -h 192.168.1.100 --backend-only # 仅推送后端镜像
推送内容: 推送内容:
配置文件: 配置文件:
@ -112,6 +116,8 @@ EOF
parse_args() { parse_args() {
SKIP_IMAGES=false SKIP_IMAGES=false
SKIP_FILES=false SKIP_FILES=false
FRONTEND_ONLY=false
BACKEND_ONLY=false
while [[ $# -gt 0 ]]; do while [[ $# -gt 0 ]]; do
case $1 in case $1 in
@ -147,6 +153,14 @@ parse_args() {
SKIP_FILES=true SKIP_FILES=true
shift shift
;; ;;
--frontend-only)
FRONTEND_ONLY=true
shift
;;
--backend-only)
BACKEND_ONLY=true
shift
;;
--help) --help)
show_help show_help
exit 0 exit 0
@ -173,6 +187,17 @@ parse_args() {
show_help show_help
exit 1 exit 1
fi fi
# 验证互斥参数
if [[ "$FRONTEND_ONLY" == "true" && "$BACKEND_ONLY" == "true" ]]; then
log_error "--frontend-only 和 --backend-only 不能同时使用"
exit 1
fi
if [[ "$SKIP_IMAGES" == "true" && ("$FRONTEND_ONLY" == "true" || "$BACKEND_ONLY" == "true") ]]; then
log_error "--skip-images 不能与 --frontend-only 或 --backend-only 同时使用"
exit 1
fi
} }
# =========================================== # ===========================================
@ -430,7 +455,18 @@ push_docker_images() {
image_tag="$env_tag" image_tag="$env_tag"
fi fi
local images=("${FRONTEND_IMAGE}:${image_tag}" "${BACKEND_IMAGE}:${image_tag}") # 根据参数确定要推送的镜像
local images=()
if [[ "$FRONTEND_ONLY" == "true" ]]; then
images=("${FRONTEND_IMAGE}:${image_tag}")
log_info "仅推送前端镜像"
elif [[ "$BACKEND_ONLY" == "true" ]]; then
images=("${BACKEND_IMAGE}:${image_tag}")
log_info "仅推送后端镜像"
else
images=("${FRONTEND_IMAGE}:${image_tag}" "${BACKEND_IMAGE}:${image_tag}")
log_info "推送前端和后端镜像"
fi
for image in "${images[@]}"; do for image in "${images[@]}"; do
log_info "处理镜像: $image" log_info "处理镜像: $image"
@ -462,7 +498,7 @@ push_docker_images() {
log_success "镜像推送完成: $image" log_success "镜像推送完成: $image"
done done
log_success "所有Docker镜像推送完成" log_success "Docker镜像推送完成"
} }
# =========================================== # ===========================================
@ -504,7 +540,16 @@ verify_push() {
image_tag="$env_tag" image_tag="$env_tag"
fi fi
local images=("${FRONTEND_IMAGE}:${image_tag}" "${BACKEND_IMAGE}:${image_tag}") # 根据参数确定要验证的镜像
local images=()
if [[ "$FRONTEND_ONLY" == "true" ]]; then
images=("${FRONTEND_IMAGE}:${image_tag}")
elif [[ "$BACKEND_ONLY" == "true" ]]; then
images=("${BACKEND_IMAGE}:${image_tag}")
else
images=("${FRONTEND_IMAGE}:${image_tag}" "${BACKEND_IMAGE}:${image_tag}")
fi
for image in "${images[@]}"; do for image in "${images[@]}"; do
if ssh_execute "docker images --format '{{.Repository}}:{{.Tag}}' | grep -q '^$image$'" false; then if ssh_execute "docker images --format '{{.Repository}}:{{.Tag}}' | grep -q '^$image$'" false; then
log_success "$image" log_success "$image"
@ -527,6 +572,20 @@ show_deploy_info() {
echo "部署路径: $REMOTE_PATH" echo "部署路径: $REMOTE_PATH"
echo "环境: $ENVIRONMENT" echo "环境: $ENVIRONMENT"
echo "镜像标签: $TAG" echo "镜像标签: $TAG"
# 显示推送的镜像类型
if [[ "$SKIP_IMAGES" != "true" ]]; then
if [[ "$FRONTEND_ONLY" == "true" ]]; then
echo "推送镜像: 仅前端镜像"
elif [[ "$BACKEND_ONLY" == "true" ]]; then
echo "推送镜像: 仅后端镜像"
else
echo "推送镜像: 前端和后端镜像"
fi
else
echo "推送镜像: 跳过"
fi
echo "----------------------------------------" echo "----------------------------------------"
echo "下一步操作:" echo "下一步操作:"
echo "1. 登录远程服务器:" echo "1. 登录远程服务器:"