| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- 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_VERSION = '20'
- }
- options {
- buildDiscarder(logRotator(numToKeepStr: '10'))
- timeout(time: 30, unit: 'MINUTES')
- timestamps()
- }
- stages {
- stage('Checkout') {
- steps {
- checkout scm
- }
- }
- stage('Install & Build') {
- steps {
- sh '''
- set -e
- export NVM_DIR="$HOME/.nvm"
- if [ ! -s "$NVM_DIR/nvm.sh" ]; then
- echo "安装 nvm..."
- curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
- fi
- . "$NVM_DIR/nvm.sh"
- nvm install ${NODE_VERSION}
- nvm use ${NODE_VERSION}
- node -v
- npm -v
- npm ci
- npm run build
- '''
- }
- }
- stage('Deploy') {
- steps {
- withCredentials([sshUserPrivateKey(
- credentialsId: env.SSH_CREDENTIALS_ID,
- keyFileVariable: 'SSH_KEY',
- usernameVariable: 'SSH_USER'
- )]) {
- sh '''
- set -e
- if [ ! -d dist ]; then
- echo "错误: dist 目录不存在,构建可能失败"
- exit 1
- fi
- chmod 600 "$SSH_KEY"
- SSH_OPTS="-i $SSH_KEY -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
- echo "开始部署到 ${SSH_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}"
- # 确保目标目录存在
- ssh $SSH_OPTS ${SSH_USER}@${DEPLOY_HOST} \
- "mkdir -p ${DEPLOY_PATH}"
- # 将 dist 目录内容同步到网站根目录(不含 dist 文件夹本身)
- rsync -avz --delete \
- -e "ssh $SSH_OPTS" \
- dist/ \
- ${SSH_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}
- echo "部署完成"
- '''
- }
- }
- }
- }
- post {
- success {
- echo "网站已成功部署至 ${DEPLOY_HOST}:${DEPLOY_PATH}"
- }
- failure {
- echo '部署失败,请查看上方日志'
- }
- always {
- cleanWs()
- }
- }
- }
|