pipeline {
agent any
parameters {
choice(name: 'DEPLOY_ENV', choices: ['dev','qa','prod'], description: '选择部署环境')
}
stages {
stage('Checkout') {
steps { git url: 'git@github.com:your/repo.git', credentialsId: 'git-ssh' }
}
stage('Build') {
steps { sh 'mvn -B -DskipTests clean package' }
post { success { archiveArtifacts 'target/*.jar' } }
}
stage('Test') {
parallel {
stage('Unit Test') { steps { sh 'mvn test' } }
stage('SonarQube') {
steps { withSonarQubeEnv('sonar-server') { sh 'mvn sonar:sonar' } }
}
}
}
stage('Deploy') {
steps {
script {
if (params.DEPLOY_ENV == 'prod') {
timeout(time: 15, unit: 'MINUTES') {
input message: '确认生产环境部署?', ok: '发布'
}
}
// 方式A:SSH 传输产物并重启
sshPublisher(
credentialsId: 'prod-ssh',
transfers: [ [sourceFile: 'target/*.jar', remoteDirectory: '/app'] ]
)
sh 'ssh user@prod-server "systemctl restart yourapp.service"'
// 方式B:Docker 构建与部署(示例)
// dockerImage = docker.build("your-registry/your-app:${env.BUILD_ID}")
// dockerImage.push()
// sh 'ssh prod-server "docker pull your-registry/your-app:${env.BUILD_ID} && docker-compose up -d"'
}
}
}
}
post {
always { emailext subject: "构建状态: ${currentBuild.result}", to: 'team@example.com' }
failure { slackSend channel: '#alerts', message: '构建失败!' }
success { echo '部署完成' }
}
}
H/5 * * * *(每 5 分钟检查变更)。kubectl rollout undo deployment/your-app。免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。