|
|
@@ -0,0 +1,83 @@
|
|
|
+pipeline {
|
|
|
+ agent any
|
|
|
+
|
|
|
+ environment {
|
|
|
+ // 部署目标
|
|
|
+ DEPLOY_HOST = '120.26.186.130'
|
|
|
+ DEPLOY_PATH = '/docker/middleware/nginx/html/alien_website/'
|
|
|
+ // Jenkins 凭据 ID(SSH 私钥,需在 Jenkins 中预先配置)
|
|
|
+ SSH_CREDENTIALS_ID = 'alien-website-deploy-ssh'
|
|
|
+ // SSH 登录用户(按服务器实际用户修改)
|
|
|
+ DEPLOY_USER = 'root'
|
|
|
+ // Node 版本(需 Jenkins 安装 NodeJS 插件并配置同名工具)
|
|
|
+ NODEJS_TOOL = 'NodeJS-20'
|
|
|
+ }
|
|
|
+
|
|
|
+ options {
|
|
|
+ buildDiscarder(logRotator(numToKeepStr: '10'))
|
|
|
+ timeout(time: 30, unit: 'MINUTES')
|
|
|
+ timestamps()
|
|
|
+ }
|
|
|
+
|
|
|
+ stages {
|
|
|
+ stage('Checkout') {
|
|
|
+ steps {
|
|
|
+ checkout scm
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ stage('Install & Build') {
|
|
|
+ steps {
|
|
|
+ nodejs(nodeJSInstallationName: env.NODEJS_TOOL) {
|
|
|
+ sh '''
|
|
|
+ node -v
|
|
|
+ npm -v
|
|
|
+ npm ci
|
|
|
+ npm run build
|
|
|
+ '''
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ stage('Deploy') {
|
|
|
+ steps {
|
|
|
+ sshagent(credentials: [env.SSH_CREDENTIALS_ID]) {
|
|
|
+ sh '''
|
|
|
+ set -e
|
|
|
+
|
|
|
+ if [ ! -d dist ]; then
|
|
|
+ echo "错误: dist 目录不存在,构建可能失败"
|
|
|
+ exit 1
|
|
|
+ fi
|
|
|
+
|
|
|
+ echo "开始部署到 ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}"
|
|
|
+
|
|
|
+ # 确保目标目录存在
|
|
|
+ ssh -o StrictHostKeyChecking=no ${DEPLOY_USER}@${DEPLOY_HOST} \
|
|
|
+ "mkdir -p ${DEPLOY_PATH}"
|
|
|
+
|
|
|
+ # 将 dist 目录内容同步到网站根目录(不含 dist 文件夹本身)
|
|
|
+ rsync -avz --delete \
|
|
|
+ -e "ssh -o StrictHostKeyChecking=no" \
|
|
|
+ dist/ \
|
|
|
+ ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}
|
|
|
+
|
|
|
+ echo "部署完成"
|
|
|
+ '''
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ post {
|
|
|
+ success {
|
|
|
+ echo "网站已成功部署至 ${DEPLOY_HOST}:${DEPLOY_PATH}"
|
|
|
+ }
|
|
|
+ failure {
|
|
|
+ echo '部署失败,请查看上方日志'
|
|
|
+ }
|
|
|
+ always {
|
|
|
+ cleanWs()
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|