Files
jenkins-pipeline/SCM/旧的二进制部署形式/agent.jar/sit_flymoon_agent_new.groovy

266 lines
9.6 KiB
Groovy
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

pipeline {
agent any
tools {
maven 'mvn3.8.8'
jdk 'jdk21'
}
parameters {
choice(
name: 'ENV',
choices: ['sit'],
description: '部署环境'
)
gitParameter(
branchFilter: 'origin/(.*)',
defaultValue: 'code/1118_java_re',
name: 'GIT_BRANCH',
type: 'PT_BRANCH_TAG',
selectedValue: 'DEFAULT',
sortMode: 'NONE',
description: '选择代码分支: ',
quickFilterEnabled: true,
tagFilter: '*',
listSize: "1"
)
string(
name: 'TARGET_JDK_HOME',
defaultValue: '/data/jdk-21.0.7',
description: '目标机器 JDK 路径'
)
string(
name: 'TARGET_HOST',
defaultValue: '192.168.70.18',
description: '目标服务器地址'
)
string(
name: 'DEPLOY_DIR',
defaultValue: '/data/webapps/flymoon_agent',
description: '部署目录'
)
}
environment {
APP_NAME = 'flymoon-agent'
GIT_REPO = 'http://172.24.16.20/root/fly_moon_agent.git'
GIT_CREDS = 'fly_gitlab_auth'
BUILD_DIR = "${WORKSPACE}/flymoon-agent-provider"
}
stages {
stage('01-代码检出') {
steps {
script {
echo "=========================================="
echo "Git 仓库: ${env.GIT_REPO}"
echo "分支: ${params.GIT_BRANCH}"
echo "=========================================="
git branch: "${params.GIT_BRANCH}",
credentialsId: "${env.GIT_CREDS}",
url: "${env.GIT_REPO}"
}
}
}
stage('02-Maven 构建') {
steps {
echo "=========================================="
echo "执行 Maven 打包..."
echo "构建目录: ${env.BUILD_DIR}"
echo "=========================================="
sh """
cd ${env.BUILD_DIR}/bin/
sh package.sh
"""
}
}
stage('03-上传构建产物') {
steps {
echo "=========================================="
echo "上传到: ${params.TARGET_HOST}:${params.DEPLOY_DIR}"
echo "=========================================="
sh """
scp ${env.BUILD_DIR}/target/${env.APP_NAME}.jar \
${params.TARGET_HOST}:${params.DEPLOY_DIR}/${env.APP_NAME}-new.jar
scp ${env.BUILD_DIR}/bin/start.sh \
${params.TARGET_HOST}:${params.DEPLOY_DIR}/
scp ${env.BUILD_DIR}/bin/stop.sh \
${params.TARGET_HOST}:${params.DEPLOY_DIR}/
"""
}
}
stage('04-备份与替换') {
steps {
echo "=========================================="
echo "备份旧版本并替换 JAR 包..."
echo "=========================================="
sh """
ssh ${params.TARGET_HOST} '
cd ${params.DEPLOY_DIR} &&
if [ -f ${env.APP_NAME}.jar ]; then
echo "[INFO] 备份: ${env.APP_NAME}.jar -> ${env.APP_NAME}-backup.jar"
cp ${env.APP_NAME}.jar ${env.APP_NAME}-backup.jar
fi &&
echo "[INFO] 替换: ${env.APP_NAME}-new.jar -> ${env.APP_NAME}.jar"
mv ${env.APP_NAME}-new.jar ${env.APP_NAME}.jar &&
echo "[INFO] 设置脚本执行权限"
chmod +x start.sh stop.sh &&
echo "[SUCCESS] JAR 替换完成"
'
"""
}
}
stage('05-停止旧服务') {
steps {
echo "=========================================="
echo "停止旧版本服务..."
echo "=========================================="
sh """
ssh ${params.TARGET_HOST} '
cd ${params.DEPLOY_DIR} &&
if [ -f stop.sh ]; then
sh stop.sh || true
echo "[INFO] 等待服务完全停止..."
sleep 3
else
echo "[WARN] 未找到 stop.sh跳过停止步骤"
fi
'
"""
}
}
stage('06-启动新服务') {
steps {
echo "=========================================="
echo "启动新版本服务..."
echo "环境: ${params.ENV}"
echo "JDK: ${params.TARGET_JDK_HOME}"
echo "=========================================="
sh """
ssh ${params.TARGET_HOST} '
cd ${params.DEPLOY_DIR} &&
echo "[INFO] 执行启动命令: sh start.sh ${params.ENV} ${params.TARGET_JDK_HOME}"
sh start.sh ${params.ENV} ${params.TARGET_JDK_HOME} &&
echo "[INFO] 等待启动完成..."
sleep 5 &&
if [ -f app.pid ]; then
PID=\$(cat app.pid)
if ps -p \$PID > /dev/null 2>&1; then
echo "[SUCCESS] 服务启动成功 (PID: \$PID)"
else
echo "[ERROR] 服务启动失败"
tail -50 /root/logs/${env.APP_NAME}/app.log
exit 1
fi
else
echo "[ERROR] PID 文件不存在"
exit 1
fi
'
"""
}
}
stage('07-健康检查') {
steps {
echo "=========================================="
echo "执行服务健康检查..."
echo "=========================================="
sh """
ssh ${params.TARGET_HOST} '
cd ${params.DEPLOY_DIR} &&
echo "[INFO] 等待服务完全启动..."
sleep 10 &&
if [ -f app.pid ]; then
PID=\$(cat app.pid)
if ps -p \$PID > /dev/null 2>&1; then
echo "[SUCCESS] 服务运行正常 (PID: \$PID)"
echo ""
# 显示进程信息
echo "==================== 进程信息 ===================="
ps -p \$PID -o pid,etime,cmd --no-headers
echo ""
# 显示日志位置
echo "==================== 日志位置 ===================="
echo "[INFO] 管道日志: /root/logs/${env.APP_NAME}/app.log"
echo "[INFO] 应用日志目录: ${params.DEPLOY_DIR}/logs"
echo "=================================================="
else
echo "[ERROR] 服务进程已退出"
echo "==================== 错误日志 ===================="
tail -100 /root/logs/${env.APP_NAME}/app.log
echo "=================================================="
exit 1
fi
else
echo "[ERROR] PID 文件不存在"
exit 1
fi
'
"""
}
}
}
post {
success {
echo ""
echo "=================================================="
echo " 部署成功 "
echo "=================================================="
echo "环境: ${params.ENV}"
echo "服务器: ${params.TARGET_HOST}"
echo "部署路径: ${params.DEPLOY_DIR}"
echo "JDK 路径: ${params.TARGET_JDK_HOME}"
echo "Git 分支: ${params.GIT_BRANCH}"
echo "=================================================="
}
failure {
echo ""
echo "=================================================="
echo " 部署失败 "
echo "=================================================="
echo "请检查上述日志排查问题"
echo "常见问题:"
echo "1. 检查目标服务器 JDK 路径是否正确"
echo "2. 检查 SSH 连接是否正常"
echo "3. 查看应用启动日志"
echo "=================================================="
}
always {
echo ""
echo "流水线状态: ${currentBuild.currentResult}"
echo "执行耗时: ${currentBuild.durationString}"
}
}
}