Jenkinsfile 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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. withCredentials([sshUserPrivateKey(
  46. credentialsId: env.SSH_CREDENTIALS_ID,
  47. keyFileVariable: 'SSH_KEY',
  48. usernameVariable: 'SSH_USER'
  49. )]) {
  50. sh '''
  51. set -e
  52. if [ ! -d dist ]; then
  53. echo "错误: dist 目录不存在,构建可能失败"
  54. exit 1
  55. fi
  56. chmod 600 "$SSH_KEY"
  57. SSH_OPTS="-i $SSH_KEY -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
  58. echo "开始部署到 ${SSH_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}"
  59. # 确保目标目录存在
  60. ssh $SSH_OPTS ${SSH_USER}@${DEPLOY_HOST} \
  61. "mkdir -p ${DEPLOY_PATH}"
  62. # 将 dist 目录内容同步到网站根目录(不含 dist 文件夹本身)
  63. rsync -avz --delete \
  64. -e "ssh $SSH_OPTS" \
  65. dist/ \
  66. ${SSH_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}
  67. echo "部署完成"
  68. '''
  69. }
  70. }
  71. }
  72. }
  73. post {
  74. success {
  75. echo "网站已成功部署至 ${DEPLOY_HOST}:${DEPLOY_PATH}"
  76. }
  77. failure {
  78. echo '部署失败,请查看上方日志'
  79. }
  80. always {
  81. cleanWs()
  82. }
  83. }
  84. }