diff --git a/docker/push.sh b/docker/push.sh index a4e1639..3b8af46 100755 --- a/docker/push.sh +++ b/docker/push.sh @@ -76,6 +76,8 @@ show_help() { -t, --tag TAG 镜像标签 [默认: latest,会自动使用环境标签] --skip-images 跳过镜像推送,仅推送配置文件 --skip-files 跳过配置文件推送,仅推送镜像 + --frontend-only 仅推送前端镜像 + --backend-only 仅推送后端镜像 --help 显示此帮助信息 示例: @@ -85,6 +87,8 @@ show_help() { $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 --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() { SKIP_IMAGES=false SKIP_FILES=false + FRONTEND_ONLY=false + BACKEND_ONLY=false while [[ $# -gt 0 ]]; do case $1 in @@ -147,6 +153,14 @@ parse_args() { SKIP_FILES=true shift ;; + --frontend-only) + FRONTEND_ONLY=true + shift + ;; + --backend-only) + BACKEND_ONLY=true + shift + ;; --help) show_help exit 0 @@ -173,6 +187,17 @@ parse_args() { show_help exit 1 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" 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 log_info "处理镜像: $image" @@ -462,7 +498,7 @@ push_docker_images() { log_success "镜像推送完成: $image" done - log_success "所有Docker镜像推送完成" + log_success "Docker镜像推送完成" } # =========================================== @@ -504,7 +540,16 @@ verify_push() { image_tag="$env_tag" 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 if ssh_execute "docker images --format '{{.Repository}}:{{.Tag}}' | grep -q '^$image$'" false; then log_success "✓ $image" @@ -527,6 +572,20 @@ show_deploy_info() { echo "部署路径: $REMOTE_PATH" echo "环境: $ENVIRONMENT" 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 "1. 登录远程服务器:"