无jenkins部署java项目

📅 发布时间:2026/7/14 8:53:40 👁️ 浏览次数:
无jenkins部署java项目
1、必要软件GitMavenJdk2、部署脚本#!/bin/bash # 设置颜色输出 RED\033[0;31m GREEN\033[0;32m YELLOW\033[1;33m NC\033[0m # No Color # 配置信息 GIT_REPO_URL你的Git仓库地址 # 请修改为你的Git仓库地址 PROJECT_DIR/opt/project # 项目存放目录 JAR_DIR/opt/jar # JAR文件存放目录 JAR_NAMEyour-app.jar # JAR文件名请修改 PROJECT_MODULE # 如果是多模块项目指定模块名如module-name/target SPRING_PROFILEprod # Spring Boot 配置文件 # 打印带颜色的信息 print_info() { echo -e ${GREEN}[INFO]${NC} $1 } print_error() { echo -e ${RED}[ERROR]${NC} $1 } print_warn() { echo -e ${YELLOW}[WARN]${NC} $1 } # 检查命令执行结果 check_result() { if [ $? -ne 0 ]; then print_error $1 exit 1 fi } # 第一步拉取代码并打包 deploy_project() { print_info 开始部署项目... # 创建必要的目录 mkdir -p $PROJECT_DIR mkdir -p $JAR_DIR # 进入项目目录 cd $PROJECT_DIR # 检查是否已存在git仓库 if [ -d .git ]; then print_info 更新代码... git pull else print_info 克隆代码... git clone $GIT_REPO_URL . fi check_result 代码拉取失败 # Maven打包 print_info 开始Maven打包... # 检查maven命令 if ! command -v mvn /dev/null; then print_error Maven未安装请先安装Maven exit 1 fi # 执行打包命令跳过测试 mvn clean package -DskipTests check_result Maven打包失败 # 查找生成的JAR文件 print_info 查找生成的JAR文件... # 确定JAR文件路径 if [ -n $PROJECT_MODULE ]; then JAR_PATH$PROJECT_DIR/$PROJECT_MODULE/target/*.jar else JAR_PATH$PROJECT_DIR/target/*.jar fi # 复制最新的JAR文件到目标目录 print_info 复制JAR文件到 $JAR_DIR ... cp $JAR_PATH $JAR_DIR/$JAR_NAME 2/dev/null # 如果上面的命令失败尝试查找其他位置的JAR if [ $? -ne 0 ]; then # 查找最近生成的JAR文件 LATEST_JAR$(find $PROJECT_DIR -name *.jar -type f -printf %T %p\n | sort -n | tail -1 | cut -f2- -d ) if [ -n $LATEST_JAR ]; then cp $LATEST_JAR $JAR_DIR/$JAR_NAME print_info 找到并复制JAR: $LATEST_JAR else print_error 未找到生成的JAR文件 exit 1 fi fi check_result 复制JAR文件失败 print_info 部署完成JAR文件已保存到: $JAR_DIR/$JAR_NAME } # 第二步启动JAR项目使用prod配置 start_project() { print_info 开始启动项目使用配置文件: $SPRING_PROFILE cd $JAR_DIR # 检查JAR文件是否存在 if [ ! -f $JAR_DIR/$JAR_NAME ]; then print_error JAR文件不存在: $JAR_DIR/$JAR_NAME exit 1 fi # 检查Java环境 if ! command -v java /dev/null; then print_error Java未安装请先安装Java exit 1 fi # 检查是否已经在运行 if [ -f app.pid ]; then OLD_PID$(cat app.pid) if ps -p $OLD_PID /dev/null 21; then print_warn 应用已在运行PID: $OLD_PID print_info 是否重启(y/n): read -r RESTART if [ $RESTART y ] || [ $RESTART Y ]; then print_info 停止旧进程... kill $OLD_PID sleep 3 else exit 0 fi fi fi # 启动JAR包 - 使用prod配置 print_info 启动JAR文件使用 $SPRING_PROFILE 配置... # Java启动参数可根据需要修改 JAVA_OPTS-Xms512m -Xmx1024m -XX:UseG1GC # 方式1使用application-prod.properties/yml # 启动命令后台运行- 通过命令行参数指定profile nohup java $JAVA_OPTS -jar $JAR_NAME --spring.profiles.active$SPRING_PROFILE app.log 21 # 方式2也可以使用环境变量两种方式任选一种 # nohup java $JAVA_OPTS -jar -Dspring.profiles.active$SPRING_PROFILE $JAR_NAME app.log 21 # 保存PID echo $! app.pid # 等待几秒检查是否启动成功 sleep 8 # 检查进程是否存在 if ps -p $(cat app.pid) /dev/null 21; then print_info 应用启动成功 print_info PID: $(cat app.pid) print_info 配置文件: $SPRING_PROFILE print_info 日志文件: $JAR_DIR/app.log # 显示启动日志的最后几行并过滤出profile相关信息 print_info 最近日志包含profile信息: grep -E profile|active|$SPRING_PROFILE app.log | tail -5 # 显示完整的最后5行日志 print_info 最后5行日志: tail -5 app.log else print_error 应用启动失败请检查日志 tail -20 app.log exit 1 fi } # 停止项目 stop_project() { if [ -f $JAR_DIR/app.pid ]; then PID$(cat $JAR_DIR/app.pid) print_info 正在停止应用PID: $PID kill $PID rm $JAR_DIR/app.pid print_info 应用已停止 else print_warn 没有找到PID文件 fi } # 查看状态 status_project() { if [ -f $JAR_DIR/app.pid ]; then PID$(cat $JAR_DIR/app.pid) if ps -p $PID /dev/null 21; then print_info 应用正在运行PID: $PID print_info 配置文件: $SPRING_PROFILE print_info 进程信息: ps -f -p $PID # 显示应用的启动参数确认profile print_info 启动参数中的profile: ps -p $PID -o args | grep -o \--spring.profiles.active[ ][^ ]* || echo 未找到profile参数 else print_warn PID文件存在但进程不存在可能异常退出 fi else print_warn 应用未运行 fi } # 查看日志 logs_project() { if [ -f $JAR_DIR/app.log ]; then tail -f $JAR_DIR/app.log else print_error 日志文件不存在 fi } # 使用不同的配置文件启动 start_with_profile() { PROFILE$1 if [ -z $PROFILE ]; then PROFILE$SPRING_PROFILE fi print_info 使用配置文件 $PROFILE 启动... cd $JAR_DIR if [ ! -f $JAR_DIR/$JAR_NAME ]; then print_error JAR文件不存在: $JAR_DIR/$JAR_NAME exit 1 fi # 停止旧进程 if [ -f app.pid ]; then kill $(cat app.pid) 2/dev/null sleep 3 fi # 启动新进程 nohup java -jar $JAR_NAME --spring.profiles.active$PROFILE app.log 21 echo $! app.pid print_info 应用已启动PID: $(cat app.pid)配置文件: $PROFILE } # 主函数 main() { case $1 in start) deploy_project start_project ;; stop) stop_project ;; restart) stop_project sleep 2 deploy_project start_project ;; status) status_project ;; logs) logs_project ;; deploy-only) deploy_project ;; start-only) start_project ;; start-prod) # 直接启动生产环境不重新部署 SPRING_PROFILEprod start_project ;; start-dev) # 使用开发环境配置启动 start_with_profile dev ;; start-test) # 使用测试环境配置启动 start_with_profile test ;; *) echo 使用方法: $0 {start|stop|restart|status|logs|deploy-only|start-only|start-prod|start-dev|start-test} echo start - 完整部署并使用 prod 配置启动 echo stop - 停止应用 echo restart - 重启应用 echo status - 查看应用状态 echo logs - 查看实时日志 echo deploy-only - 只部署拉取代码打包 echo start-only - 只启动使用现有JARprod配置 echo start-prod - 直接启动prod配置不重新部署 echo start-dev - 直接启动dev配置不重新部署 echo start-test - 直接启动test配置不重新部署 exit 1 ;; esac } # 执行主函数 main $3、使用方法修改配置将GIT_REPO_URL改为你的Git仓库地址根据需要修改JAR_NAME如果是多模块项目设置PROJECT_MODULESPRING_PROFILE是配置环境​​​​​​​application-prod.yml生产环境prodapplication-dev.yml开发环境devapplication-test.yml测试环境testapplication.yml通用配置使用# 完整部署并启动 ./start.sh start # 只部署拉取代码打包 ./start.sh deploy-only # 只启动使用现有JAR ./start.sh start-only # 停止应用 ./start.sh stop # 重启应用 ./start.sh restart # 查看状态 ./start.sh status # 直接启动prod配置不重新部署 ./start.sh start-prod # 启动其他环境的配置 ./start.sh start-dev ./start.sh start-test # 查看应用状态确认使用的配置 ./start.sh status查看日志tail -f /opt/jar/app.log