✨Jenkins 自动部署
1041 字
5 分钟
✨Jenkins 自动部署
Jenkins 自动部署
JAVA 项目 SSH 配置
5.png
JAVA 项目 java_deploy.sh 执行脚本
#!/bin/bashset -euo pipefail # 更严格的错误检查
# ===== 配置部分 =====MAIN_DIR="/home/dockerfile/cost-consult-ly" # 主目录设置SOURCE_DIR="${MAIN_DIR}/build/jenkins/java"TARGET_DIR="${MAIN_DIR}/business/docker-resource/jar"SPECIFIC_FILE="jnpf-admin-20241008-RELEASE.jar"LOG_DIR="${MAIN_DIR}/build/jenkins"DOCKER_COMPOSE_DIR="${MAIN_DIR}" # 使用主目录作为docker-compose目录SERVICE_NAME="business"# ====================
# 日志设置current_time=$(date +"%Y-%m-%d %H:%M:%S")log_file_time=$(date +"%Y%m%d")log_file="${LOG_DIR}/${log_file_time}_deploy_java.log"# ====================
# 初始化日志系统init_logging() { mkdir -p "$LOG_DIR" exec > >(tee -a "$log_file") 2>&1 echo "======= 部署启动于 $current_time =======" echo "执行用户: $USER" echo "工作目录: $(pwd)" echo "主目录: $MAIN_DIR" echo "环境变量:" printenv | grep -v 'PASSWORD\\|SECRET\\|TOKEN' || true}
# 检查目录存在性check_directories() { local dirs=("$SOURCE_DIR" "$TARGET_DIR" "$DOCKER_COMPOSE_DIR" "$MAIN_DIR") for dir in "${dirs[@]}"; do if [ ! -d "$dir" ]; then echo "❌ 错误:目录不存在 $dir" exit 10 fi done}
# 文件操作函数handle_file_operations() { echo "🔍 扫描源目录: $SOURCE_DIR" ls -la "$SOURCE_DIR"
# 清理目标文件 if compgen -G "$TARGET_DIR/$SPECIFIC_FILE" > /dev/null; then echo "🗑️ 清理旧文件: $TARGET_DIR/$SPECIFIC_FILE" rm -v "$TARGET_DIR/$SPECIFIC_FILE" fi
# 查找并复制最新jar文件 local jar_files=("$SOURCE_DIR"/jnpf-admin-*.jar) if [ ${#jar_files[@]} -eq 0 ]; then echo "❌ 错误:未找到匹配的JAR文件" exit 20 fi
local latest_jar latest_jar=$(ls -t "$SOURCE_DIR"/jnpf-admin-*.jar | head -1) echo "📦 找到最新JAR文件: $latest_jar"
echo "🚚 复制文件到目标目录..." cp -v "$latest_jar" "$TARGET_DIR/" || { echo "❌ 文件复制失败" exit 30 }
echo "🧹 清理源目录..." rm -vf "$SOURCE_DIR"/*}
# 容器管理函数manage_container() { echo "🐳 检查Docker环境..." if ! command -v docker-compose &> /dev/null; then echo "⚠️ 警告:docker-compose 未安装,跳过容器重启" return fi
local compose_file="${DOCKER_COMPOSE_DIR}/docker-compose.yml" if [ ! -f "$compose_file" ]; then echo "⚠️ 警告:docker-compose.yml 不存在,跳过容器重启" return fi
echo "🔄 准备重启服务: $SERVICE_NAME" if (cd "$DOCKER_COMPOSE_DIR" && docker-compose ps | grep -q "$SERVICE_NAME"); then echo "⏳ 正在重启服务..." if (cd "$DOCKER_COMPOSE_DIR" && docker-compose restart "$SERVICE_NAME"); then echo "✅ 服务重启成功" echo "📊 服务状态:" (cd "$DOCKER_COMPOSE_DIR" && docker-compose ps "$SERVICE_NAME") else echo "❌ 服务重启失败" exit 40 fi else echo "⚠️ 服务未运行,尝试启动..." (cd "$DOCKER_COMPOSE_DIR" && docker-compose up -d "$SERVICE_NAME") || { echo "❌ 服务启动失败" exit 50 } fi}
# 主执行流程main() { init_logging check_directories handle_file_operations manage_container
local end_time=$(date +"%Y-%m-%d %H:%M:%S") local duration=$(( $(date -d "$end_time" +%s) - $(date -d "$current_time" +%s) ))
echo "======= 部署完成于 $end_time =======" echo "⏱️ 总耗时: ${duration}秒" echo "✅ 状态: 部署成功" echo "🪵 日志位置: $log_file"}
mainHTML 项目 执行Shell 配置
# 1. 环境检查whoaminode -vyarn -v
# 2. 配置 npm 镜像(国内建议使用)npm config set registry <https://registry.npmmirror.com>npm config get registry
# 3. 清理旧构建产物rm -rf dist dist.zip
# 4. 智能安装依赖(仅在 node_modules 不存在或 package.json 变更时安装)if [ ! -d "node_modules" ] || [ "$(find package.json -newer node_modules)" ]; then echo "安装依赖..." yarn installelse echo "使用缓存依赖"fi
# 5. 构建项目yarn run build
# 6. 打包产物pwdzip -r dist.zip ./distHTML 项目 SSH 配置
6.png
HTML 项目 html_deploy.sh 执行脚本
#!/bin/bashset -euo pipefail # 更严格的错误检查
# ===== 配置部分 =====MAIN_DIR="/home/dockerfile/cost-consult-ly" # 主目录设置SOURCE_DIR="${MAIN_DIR}/build/jenkins/html"TARGET_DIR="${MAIN_DIR}/business/docker-resource/html/platform-web"SPECIFIC_FILE="${SOURCE_DIR}/dist.zip"LOG_DIR="${MAIN_DIR}/build/jenkins"# ====================
# 日志设置current_time=$(date +"%Y-%m-%d %H:%M:%S")log_file_time=$(date +"%Y%m%d")log_file="${LOG_DIR}/${log_file_time}_deploy_html.log"# ====================
# 初始化日志系统init_logging() { mkdir -p "$LOG_DIR" exec > >(tee -a "$log_file") 2>&1 echo "======= 部署启动于 $current_time =======" echo "执行用户: $USER" echo "工作目录: $(pwd)" echo "主目录: $MAIN_DIR" echo "环境变量:" printenv | grep -v 'PASSWORD\\|SECRET\\|TOKEN' || true}
# 检查目录存在性check_directories() { local dirs=("$SOURCE_DIR" "$TARGET_DIR" "$MAIN_DIR") for dir in "${dirs[@]}"; do if [ ! -d "$dir" ]; then echo "❌ 错误:目录不存在 $dir" exit 10 fi done}
# 文件操作函数handle_file_operations() { echo "🔍 扫描源目录: $SOURCE_DIR" ls -la "$SOURCE_DIR"
# 清理目标目录 echo "🗑️ 清理目标目录: $TARGET_DIR" rm -rfv "$TARGET_DIR"/*
# 检查压缩文件是否存在 if [ ! -f "$SPECIFIC_FILE" ]; then echo "❌ 错误:压缩文件 $SPECIFIC_FILE 不存在" exit 20 fi
# 解压文件 echo "📦 解压文件: $SPECIFIC_FILE" unzip -q "$SPECIFIC_FILE" -d "$SOURCE_DIR" || { echo "❌ 解压失败" exit 30 }
# 复制文件 echo "🚚 复制文件到目标目录..." cp -rv "$SOURCE_DIR"/dist/* "$TARGET_DIR/" || { echo "❌ 文件复制失败" exit 40 }
# 清理操作 echo "🧹 执行清理操作..." rm -rfv "$SOURCE_DIR"/dist* "$SOURCE_DIR"/*}
# 主执行流程main() { init_logging check_directories handle_file_operations
local end_time=$(date +"%Y-%m-%d %H:%M:%S") local duration=$(( $(date -d "$end_time" +%s) - $(date -d "$current_time" +%s) ))
echo "======= 部署完成于 $end_time =======" echo "⏱️ 总耗时: ${duration}秒" echo "✅ 状态: 部署成功" echo "🪵 日志位置: $log_file"}
main文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
相关文章 智能推荐
1
✨Shell 脚本请求接口
技术分享 记录使用 Shell 脚本批量读取项目 ID 并请求接口的示例,包含日志记录、参数清洗和请求结果输出。
2
✨K8S 基础操作指南
技术分享 整理 Kubernetes 常用基础操作命令,包含 Secret、ConfigMap、Service、Deployment 等资源的快速部署示例。
3
✨MySQL Linux 通用版离线安装
技术分享 记录 MySQL 5.7 Linux 通用版离线安装流程,包含依赖安装、用户创建、初始化、配置和远程访问设置。
4
✨IDEA 常用快捷键
技术分享 整理 IntelliJ IDEA 日常开发常用快捷键,覆盖搜索、编辑、导航、重构、运行调试、Git 与窗口操作。
5
✨使用EasyExcel实现导出Excel写入图片
技术分享 记录使用 EasyExcel 导出 Excel 并写入图片的实现示例,包含自定义写入处理逻辑。
随机文章 随机推荐

