pipeline { agent any environment { APP_NAME = 'no-whatever' DEPLOY_HOST = credentials('deploy-server-host') // 在 Jenkins 凭据中配置 DEPLOY_USER = credentials('deploy-server-user') } triggers { gitlab(triggerOnPush: true, branchFilterType: 'All') } stages { stage('Checkout') { steps { checkout scm } } stage('Build Docker Image') { steps { script { docker.build("${APP_NAME}:${BUILD_NUMBER}") docker.build("${APP_NAME}:latest") } } } stage('Deploy') { steps { script { // 方案 A: Jenkins 和部署机是同一台服务器 sh """ docker stop ${APP_NAME} || true docker rm ${APP_NAME} || true docker run -d \ --name ${APP_NAME} \ -p 3000:3000 \ -v ${APP_NAME}-data:/app/data \ --restart unless-stopped \ ${APP_NAME}:latest """ // 方案 B: 部署到远程服务器 (取消注释并注释掉方案 A) // sh """ // docker save ${APP_NAME}:latest | \ // ssh ${DEPLOY_USER}@${DEPLOY_HOST} 'docker load' // ssh ${DEPLOY_USER}@${DEPLOY_HOST} << 'EOF' // docker stop ${APP_NAME} || true // docker rm ${APP_NAME} || true // docker run -d \ // --name ${APP_NAME} \ // -p 3000:3000 \ // -v ${APP_NAME}-data:/app/data \ // --restart unless-stopped \ // ${APP_NAME}:latest // EOF // """ } } } } post { success { echo "Deployed ${APP_NAME} build #${BUILD_NUMBER} successfully" } failure { echo "Build #${BUILD_NUMBER} failed" } } }