Jenkinsfile 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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 版本(需 Jenkins 安装 NodeJS 插件并配置同名工具)
  12. NODEJS_TOOL = 'NodeJS-20'
  13. }
  14. options {
  15. buildDiscarder(logRotator(numToKeepStr: '10'))
  16. timeout(time: 30, unit: 'MINUTES')
  17. timestamps()
  18. }
  19. stages {
  20. stage('Checkout') {
  21. steps {
  22. checkout scm
  23. }
  24. }
  25. stage('Install & Build') {
  26. steps {
  27. nodejs(nodeJSInstallationName: env.NODEJS_TOOL) {
  28. sh '''
  29. node -v
  30. npm -v
  31. npm ci
  32. npm run build
  33. '''
  34. }
  35. }
  36. }
  37. stage('Deploy') {
  38. steps {
  39. sshagent(credentials: [env.SSH_CREDENTIALS_ID]) {
  40. sh '''
  41. set -e
  42. if [ ! -d dist ]; then
  43. echo "错误: dist 目录不存在,构建可能失败"
  44. exit 1
  45. fi
  46. echo "开始部署到 ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}"
  47. # 确保目标目录存在
  48. ssh -o StrictHostKeyChecking=no ${DEPLOY_USER}@${DEPLOY_HOST} \
  49. "mkdir -p ${DEPLOY_PATH}"
  50. # 将 dist 目录内容同步到网站根目录(不含 dist 文件夹本身)
  51. rsync -avz --delete \
  52. -e "ssh -o StrictHostKeyChecking=no" \
  53. dist/ \
  54. ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}
  55. echo "部署完成"
  56. '''
  57. }
  58. }
  59. }
  60. }
  61. post {
  62. success {
  63. echo "网站已成功部署至 ${DEPLOY_HOST}:${DEPLOY_PATH}"
  64. }
  65. failure {
  66. echo '部署失败,请查看上方日志'
  67. }
  68. always {
  69. cleanWs()
  70. }
  71. }
  72. }