Jenkinsfile 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. pipeline {
  2. agent any
  3. environment {
  4. // 部署目标
  5. DEPLOY_HOST = '120.26.186.130'
  6. DEPLOY_PATH = '/docker/middleware/nginx/html/alien_website/'
  7. // Jenkins 凭据 ID(SSH 私钥,需在 Jenkins 中预先配置)
  8. SSH_CREDENTIALS_ID = 'alien-website-deploy-ssh'
  9. // SSH 登录用户(按服务器实际用户修改)
  10. DEPLOY_USER = 'root'
  11. NODE_VERSION = '20'
  12. }
  13. options {
  14. buildDiscarder(logRotator(numToKeepStr: '10'))
  15. timeout(time: 30, unit: 'MINUTES')
  16. timestamps()
  17. }
  18. stages {
  19. stage('Checkout') {
  20. steps {
  21. checkout scm
  22. }
  23. }
  24. stage('Install & Build') {
  25. steps {
  26. sh '''
  27. set -e
  28. export NVM_DIR="$HOME/.nvm"
  29. if [ ! -s "$NVM_DIR/nvm.sh" ]; then
  30. echo "安装 nvm..."
  31. curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
  32. fi
  33. . "$NVM_DIR/nvm.sh"
  34. nvm install ${NODE_VERSION}
  35. nvm use ${NODE_VERSION}
  36. node -v
  37. npm -v
  38. npm ci
  39. npm run build
  40. '''
  41. }
  42. }
  43. stage('Deploy') {
  44. steps {
  45. sshagent(credentials: [env.SSH_CREDENTIALS_ID]) {
  46. sh '''
  47. set -e
  48. if [ ! -d dist ]; then
  49. echo "错误: dist 目录不存在,构建可能失败"
  50. exit 1
  51. fi
  52. echo "开始部署到 ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}"
  53. # 确保目标目录存在
  54. ssh -o StrictHostKeyChecking=no ${DEPLOY_USER}@${DEPLOY_HOST} \
  55. "mkdir -p ${DEPLOY_PATH}"
  56. # 将 dist 目录内容同步到网站根目录(不含 dist 文件夹本身)
  57. rsync -avz --delete \
  58. -e "ssh -o StrictHostKeyChecking=no" \
  59. dist/ \
  60. ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}
  61. echo "部署完成"
  62. '''
  63. }
  64. }
  65. }
  66. }
  67. post {
  68. success {
  69. echo "网站已成功部署至 ${DEPLOY_HOST}:${DEPLOY_PATH}"
  70. }
  71. failure {
  72. echo '部署失败,请查看上方日志'
  73. }
  74. always {
  75. cleanWs()
  76. }
  77. }
  78. }