流水线已经编写完毕,修改流水线中参数,即可使用
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秒"