Jenkins部署Java(maven)项目&Vue前端项目部署流水线pipeline模版-可直接使用Jenkinsfile

流水线已经编写完毕,修改流水线中参数,即可使用
tips:注意Jenkins中是否给机器配置了路径前缀,本文均没有配置, 使用绝对路径

前端VUE部署模版

#!groovy
pipeline{
    agent any
        environment {
    //        环境标识 无其他用处,作为标识
            ENV_NAME = "dev"
			
    //        服务器标识  Jenkins设置中服务器标识
            SERVER_CONFIG_NAME = "DevComputer"
			
    //        远程项目地址  Vue项目远程地址
            SERVER_REMOTE_PROJECT_NAME = "/usr/project/vueProject/"
			
    //   	GIT远程分支名称 
            GIT_BRANCH_NAME = "dev"
			
	//      GIT 远程仓库地址  
			GIT_SERVER_ADDRESS="http://vueProject.git"
			
	//      package.json的相对位置,若在根目录,则为 ./, 若在根目录下ui目录下,则值为ui
			BUILD_ADDRESS="./"
			
	//      具体打包命令 也可用npm install && npm build:dev
	        BUILD_COMMAND="yarn&&yarn build:dev"	
			
	//		打包完后dist最终存放位置,如果为根目录,则值为"dist/**", 如果为ui目录下,则值为"ui/dist/**"
			OUTPUT_ADDRESS="dist/**"
			
	// 		是否需要去除dist目录前缀,想要最终目录只有一层dist目录, 如果在根目录下,则值为"/",如果dist在ui目录下,则值为"ui/"
			REMOVE_PREFIX="/"
			

        }
    stages{
        stage('build'){
            steps{
            echo '---------------------------------拉取代码开始---------------------------------------'
git branch: "${env.GIT_BRANCH_NAME}", credentialsId: '输入Jenkins中配置的git账号ID', url: "${env.GIT_SERVER_ADDRESS}"
            echo '---------------------------------拉取代码结束---------------------------------------'


            echo '---------------------------------代码构建开始---------------------------------------'
sh """
cd ${env.BUILD_ADDRESS}
${env.BUILD_COMMAND}
"""
            echo '---------------------------------代码构建结束---------------------------------------'

            }
        }

        stage('deploy'){
            steps{
            echo '---------------------------------代码部署开始---------------------------------------'
sshPublisher(publishers: [sshPublisherDesc(configName: "${env.SERVER_CONFIG_NAME}", transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 1200000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: "${env.SERVER_REMOTE_PROJECT_NAME}", remoteDirectorySDF: false, removePrefix: "${env.REMOVE_PREFIX}", sourceFiles: "${env.OUTPUT_ADDRESS}")], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true)])
            echo '---------------------------------代码部署结束---------------------------------------'
            }
        }
    }
    post{
        always{
            echo 'over'
        }
        cleanup{
            echo '----------即将清理工作空间```````'
            cleanWs()
            echo '----------清理工作空间完成```````'
        }
    }
}

后端Java部署模版

pipeline {
    agent any
    environment {
	//        环境标识
			ENV_NAME = "dev"
	//       Jenkins中 服务器标识
			SERVER_CONFIG_NAME = "DevComputer"
	//        远程Java项目地址
			SERVER_REMOTE_PROJECT_NAME = "/usr/jar/new-project"
	//        GIT远程分支名称
			GIT_BRANCH_NAME = "dev"
				
	//      GIT 远程仓库地址
			GIT_SERVER_ADDRESS="http://javaProject.git"

			
	//      pom.xml的相对位置,若在根目录,则为 ./, 若在根目录下xxx目录下,则值为xxx
			BUILD_ADDRESS="./"
			
	//      具体打包命令 多进程并发跳过测试  快速打包
	        BUILD_COMMAND="mvn clean package -D maven.test.skip=true -P test -T 1C"	
			
	//		jar最终存放位置,根据需要填"
			OUTPUT_ADDRESS="target/*.jar"

	
			
	// 	    源代码中sh目录位置
			SHELL_ADDRESS="script/bin/deploy.sh"
	//      shell参数,如果有则填入,无则空
			SHELL_CUSTOM_COMMAND=""
			
    }
    stages {
        stage('build') {
            steps {
            echo '---------------------------------拉取代码开始---------------------------------------'
            git branch: "${env.GIT_BRANCH_NAME}", credentialsId: 'Jenkins git账号ID', url: "${env.GIT_SERVER_ADDRESS}"
            echo '---------------------------------拉取代码结束---------------------------------------'

            echo '---------------------------------代码打包开始---------------------------------------'
            sh """
			cd ${env.BUILD_ADDRESS}
			${env.BUILD_COMMAND} """
            echo '---------------------------------拉取打包结束---------------------------------------'
            }
       }

        stage('deploy') {
            steps {
            echo '---------------------------------代码发布启动开始---------------------------------------'
    sshPublisher(publishers: [sshPublisherDesc(configName: "${env.SERVER_CONFIG_NAME}", transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: """cd ${env.SERVER_REMOTE_PROJECT_NAME}	
""", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: "${env.SERVER_REMOTE_PROJECT_NAME}", remoteDirectorySDF: false, removePrefix: '', sourceFiles:"${env.OUTPUT_ADDRESS}")], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true)])


            echo '---------------------------------代码发布并启动结束---------------------------------------'
            sshPublisher(publishers: [sshPublisherDesc(configName: "${env.SERVER_CONFIG_NAME}", transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: """cd ${env.SERVER_REMOTE_PROJECT_NAME}
BUILD_ID=dontKillMe

sh ${env.SERVER_REMOTE_PROJECT_NAME}/${env.SHELL_ADDRESS} ${env.SHELL_CUSTOM_COMMAND}
""", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: "${env.SERVER_REMOTE_PROJECT_NAME}", remoteDirectorySDF: false, removePrefix: '', sourceFiles: "${env.SHELL_ADDRESS}")], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true)])
   
            }
        }

    }
    post{
        always{
            echo 'over'
        }
        cleanup{
            echo '----------即将清理工作空间```````'
            cleanWs()
            echo '----------清理工作空间完成```````'
        }
    }
}

后端Jar包重启脚本

#!/bin/bash

# 系统时间
DATE=$(date +'%Y-%m-%d-%H:%M:%S')
#启动时间
START_TIME=$(date +%s)
#当前shell目录
CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"


export JAVA_HOME PATH CLASSPAT


# 输入要启动jar包的绝对路径,如果要重启多个,则写多个
ARRAY_JAR_FILE=(
  "/usr/jar/Javaname-cloud.jar"
)
# 停止某个jar包,
# 参数为 jar名称
function stopJar() {
  local JAR_FILE=$1

  # 使用 pgrep 更精确地匹配获取 PID
  PID=$(pgrep -f "$JAR_FILE.jar")

  if [ -z "$PID" ]; then
    echo "$DATE - 未找到 $JAR_FILE.jar 的进程"
    return 0
  fi

  # 最大尝试次数
  MAX_TRIES=30
  TRIES=0

  while ((TRIES < MAX_TRIES)); do
    kill -9 "$PID"
    # 显示进度或在检查之前暂停一段时间
    sleep 1

    if ps -p "$PID" > /dev/null; then
      ((TRIES++))
      echo "$DATE - 尝试 $TRIES: 进程 $PID ($JAR_FILE) 仍在运行,正在尝试再次终止..."
    else
      echo "$DATE - 进程 $PID ($JAR_FILE) 已成功终止。"
      return 0
    fi
  done

  echo "$DATE - 已达到最大尝试次数 ($MAX_TRIES)。进程 $PID ($JAR_FILE) 仍在运行。错误!!!"
  return 0
}


# 启动Jar包的脚本
# 入参为  jar目录, jar包名称


function startJar() {
  local JAR_PATH=$1
  local JAR_FILE=$2
  cd $1
  # 启动 jar 包
  nohup java -Xms256m -Xmx1024m -jar "$JAR_FILE.jar" >start.log 2>&1 &
  PID=$!

  echo "正在启动 $JAR_FILE.jar ..."
  sleep 1
  echo "进程号为 $PID"
  sleep 1
  echo "$JAR_FILE.jar 启动成功!"
}


# 依次停止全部
for JAR in ${ARRAY_JAR_FILE[@]}; do
  JAR_DIR=$(dirname $JAR)
  JAR_MAIN_NAME=$(basename $JAR .jar)
  echo "即将停止$JAR_MAIN_NAME程序包"
  stopJar $JAR_MAIN_NAME
  echo "程序包$JAR_MAIN_NAME进程结束"
done



# 依次启动全部
for JAR in ${ARRAY_JAR_FILE[@]}; do
  JAR_DIR=$(dirname $JAR)
  JAR_MAIN_NAME=$(basename $JAR .jar)
  echo "即将重新启动$JAR_MAIN_NAME程序包"
  startJar $JAR_DIR $JAR_MAIN_NAME

done


END_TIME=$(date +%s)
EXECUTING_TIME=$(expr $END_TIME - $START_TIME)

echo "本次重启总共用时为$EXECUTING_TIME秒"

你可能感兴趣的:(Jenkins部署Java(maven)项目&Vue前端项目部署流水线pipeline模版-可直接使用Jenkinsfile)