78 lines
2.5 KiB
Groovy
78 lines
2.5 KiB
Groovy
pipeline {
|
||
agent any
|
||
options { timestamps(); disableConcurrentBuilds() }
|
||
|
||
environment {
|
||
// ====== 宿主机 SSH(关键:Jenkins 在容器里,所有 build/deploy 都到宿主机上跑)======
|
||
HOST_SSH_CRED = "gitea-ssh"
|
||
HOST_SSH_USER = "root"
|
||
HOST_SSH_PORT = "22"
|
||
// 推荐先用 172.17.0.1(容器到宿主机),不通再换公网IP
|
||
HOST_SSH_HOST = "172.17.0.1"
|
||
|
||
// ====== 你的项目 ======
|
||
REPO_SSH = "ssh://git@1.94.254.176:222/root/agri.git" // gitea 仓库
|
||
BRANCH = "master"
|
||
BOOT_MODULE = "agri-admin" // 多模块启动模块(按你实际改)
|
||
|
||
// ====== 宿主机构建与部署路径 ======
|
||
BUILD_DIR = "/opt/agri/build/agri-prod"
|
||
DEPLOY_DIR = "/opt/agri"
|
||
DEPLOY_JAR = "/opt/agri/agri.jar"
|
||
}
|
||
|
||
stages {
|
||
stage("Checkout (Jenkins only for commit id)") {
|
||
steps {
|
||
checkout scm
|
||
sh 'git rev-parse --short HEAD'
|
||
}
|
||
}
|
||
|
||
stage("Build & Deploy on Host (no docker)") {
|
||
steps {
|
||
sshagent(credentials: [env.HOST_SSH_CRED]) {
|
||
sh '''
|
||
set -eux
|
||
# 让宿主机拉代码并按本次构建的 commit 精准构建
|
||
ssh -p ${HOST_SSH_PORT} -o StrictHostKeyChecking=no ${HOST_SSH_USER}@${HOST_SSH_HOST} "
|
||
set -eux
|
||
|
||
# 1) 准备构建目录
|
||
sudo mkdir -p ${BUILD_DIR}
|
||
sudo chown -R $(whoami):$(whoami) ${BUILD_DIR}
|
||
|
||
if [ ! -d ${BUILD_DIR}/.git ]; then
|
||
rm -rf ${BUILD_DIR}/*
|
||
git clone -b ${BRANCH} ${REPO_SSH} ${BUILD_DIR}
|
||
fi
|
||
|
||
cd ${BUILD_DIR}
|
||
git fetch --all --prune
|
||
git checkout -f ${GIT_COMMIT}
|
||
|
||
# 2) 宿主机本地打包(用你宿主机装的 JDK8 + Maven)
|
||
java -version
|
||
mvn -v
|
||
mvn -B -DskipTests -pl ${BOOT_MODULE} -am clean package
|
||
|
||
# 3) 找 jar,并部署到 /opt/agri/agri.jar
|
||
jar=\$(ls -1 ${BOOT_MODULE}/target/*.jar | grep -v 'sources\\|javadoc\\|original' | head -n 1)
|
||
echo \"picked jar: \$jar\"
|
||
|
||
sudo mkdir -p ${DEPLOY_DIR}
|
||
sudo cp -f ${DEPLOY_JAR} ${DEPLOY_DIR}/agri.jar.bak 2>/dev/null || true
|
||
sudo cp -f \"\$jar\" ${DEPLOY_DIR}/agri.jar.new
|
||
sudo mv -f ${DEPLOY_DIR}/agri.jar.new ${DEPLOY_JAR}
|
||
|
||
# 4) 重启服务
|
||
sudo systemctl restart agri
|
||
sudo systemctl status agri --no-pager | tail -n 30
|
||
"
|
||
'''
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|