- 新增 Jenkinsfile 阶段:拉取 main → mvn package → 本机重启,不再依赖服务器上手工打好的旧 jar - 敏感密钥(GATEWAY_*_SECRET)放服务器 /data/iot/gateway/gateway.env,启动前 source,不进仓库 - application*.yml 写入 PostgreSQL 账号默认值(内网测试环境),后端地址默认指向同机 127.0.0.1:8080 - 部署后健康检查失败时让流水线报错,而不是静默通过 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
78 lines
2.8 KiB
Groovy
78 lines
2.8 KiB
Groovy
// IOT 开放网关流水线:拉代码 → 构建 → 部署重启。
|
|
// 由 Jenkins 的 iot-open-gateway 任务以「Pipeline script from SCM」读取本文件。
|
|
//
|
|
// 运行方式:网关 jar 与 Jenkins 在同一台服务器(192.168.114.100)上,直接在本机重启,不走 SSH。
|
|
// 敏感配置(GATEWAY_JWT_SECRET / GATEWAY_INTERNAL_SECRET / GATEWAY_ADMIN_SECRET 等)放在服务器上的
|
|
// /data/iot/gateway/gateway.env(权限 600),启动前 source 进来,不进仓库。
|
|
// 数据库账号密码、后端地址已作为默认值写在 application*.yml 里(内网测试环境)。
|
|
pipeline {
|
|
agent any
|
|
|
|
tools {
|
|
maven 'Maven-3.8'
|
|
jdk 'JDK17'
|
|
}
|
|
|
|
environment {
|
|
DEPLOY_PORT = '18082'
|
|
APP_NAME = 'iot-open-gateway'
|
|
DEPLOY_DIR = '/data/iot/gateway'
|
|
// 防止 Jenkins 在任务结束时自动杀掉后台 nohup 进程
|
|
JENKINS_NODE_COOKIE = 'dontKillMe'
|
|
BUILD_ID = 'dontKillMe'
|
|
}
|
|
|
|
stages {
|
|
stage('拉代码') {
|
|
steps {
|
|
git branch: 'main', url: 'https://git.tengwangyun.com/wjh/IoT-OpenApi.git'
|
|
}
|
|
}
|
|
|
|
stage('构建') {
|
|
steps {
|
|
// 网关没有单测,跳过测试加快构建
|
|
sh 'mvn -B clean package -DskipTests'
|
|
}
|
|
}
|
|
|
|
stage('部署') {
|
|
steps {
|
|
sh '''
|
|
set -e
|
|
echo "=== 部署 IOT 开放网关 ==="
|
|
mkdir -p "${DEPLOY_DIR}"
|
|
JAR=$(ls target/iot-open-gateway-*.jar | head -1)
|
|
cp -f "$JAR" "${DEPLOY_DIR}/${APP_NAME}.jar"
|
|
|
|
if [ ! -f "${DEPLOY_DIR}/gateway.env" ]; then
|
|
echo "缺少 ${DEPLOY_DIR}/gateway.env(存放 GATEWAY_*_SECRET 等),中止" >&2
|
|
exit 1
|
|
fi
|
|
|
|
PID=$(lsof -ti:${DEPLOY_PORT} || true)
|
|
if [ -n "$PID" ]; then
|
|
echo "停止旧进程 $PID"
|
|
kill -9 $PID || true
|
|
sleep 2
|
|
fi
|
|
|
|
export JENKINS_NODE_COOKIE=dontKillMe
|
|
export BUILD_ID=dontKillMe
|
|
set -a
|
|
. "${DEPLOY_DIR}/gateway.env"
|
|
set +a
|
|
nohup java -jar -Dspring.profiles.active=prod "${DEPLOY_DIR}/${APP_NAME}.jar" > "${DEPLOY_DIR}/${APP_NAME}.log" 2>&1 &
|
|
|
|
echo "后台启动中,等待 12 秒检测..."
|
|
sleep 12
|
|
lsof -i:${DEPLOY_PORT} || true
|
|
echo "=== 网关健康检查 ==="
|
|
curl -sf http://127.0.0.1:${DEPLOY_PORT}/open/gateway/health
|
|
echo ""
|
|
'''
|
|
}
|
|
}
|
|
}
|
|
}
|