Jenkins流水线执行后SSH连接及WAR包部署配置求助
Jenkins流水线优化:添加SSH远程连接与S3部署
原流水线代码
pipeline { agent any tools{ jdk 'JDK 1.8' } stages { stage('Clean') { steps { script { sh 'mvn clean' } } } stage('Install'){ steps{ script{ sh 'mvn install' } } } stage('Deploy'){ steps{ script{ sh 'mvn deploy' } } } } }
需求说明
- 流水线执行完成后,使用本地主机的
.ppk凭证文件,通过SSH连接远程EC2实例:ssh -i "{path to ppk file}" ubuntu@ec2-xx-xxx-xx-xxxx.compute-1.amazonaws.com - 获取
mvn install阶段生成的.war文件路径,执行AWS S3部署命令:aws s3 --profile abc cp <war s3 path> abc.war
优化后的完整流水线代码
pipeline { agent any tools{ jdk 'JDK 1.8' } environment { // 存储war文件路径的变量 WAR_FILE_PATH = '' // 替换为你的.ppk文件实际路径 PPK_FILE_PATH = '/path/to/your/key.ppk' // 替换为你的EC2远程连接地址 EC2_REMOTE_ADDR = 'ubuntu@ec2-xx-xxx-xx-xxxx.compute-1.amazonaws.com' // 替换为你的S3目标存储路径 S3_TARGET_PATH = 's3://your-bucket/path/abc.war' } stages { stage('Clean') { steps { sh 'mvn clean' } } stage('Install & Capture WAR Path'){ steps{ script{ sh 'mvn install' // 查找target目录下的war文件并获取绝对路径 WAR_FILE_PATH = sh(script: 'find $WORKSPACE/target -name "*.war" -type f | head -n 1', returnStdout: true).trim() echo "Generated WAR file path: ${WAR_FILE_PATH}" } } } stage('Deploy'){ steps{ sh 'mvn deploy' } } } post { always { script { // 处理SSH连接:先设置ppk文件权限(SSH要求私钥权限必须为600) sh "chmod 600 ${PPK_FILE_PATH}" // 执行SSH连接并测试(可替换为实际远程操作) sh "ssh -i ${PPK_FILE_PATH} -o StrictHostKeyChecking=no ${EC2_REMOTE_ADDR} 'echo Connected to remote EC2 successfully'" // 执行AWS S3上传命令 if (WAR_FILE_PATH) { sh "aws s3 --profile abc cp ${WAR_FILE_PATH} ${S3_TARGET_PATH}" echo "Successfully uploaded WAR file to S3: ${S3_TARGET_PATH}" } else { error "No WAR file found in ${WORKSPACE}/target" } } } } }
关键步骤解释
- WAR文件路径捕获:
- 在
Install & Capture WAR Path阶段,通过find命令定位target目录下的第一个.war文件,用sh(returnStdout: true)获取输出并赋值给环境变量,trim()去除多余换行符避免路径错误
- 在
- SSH远程连接处理:
- 必须给
.ppk文件设置600权限,这是SSH对私钥文件的强制权限要求,否则会拒绝连接 - 添加
-o StrictHostKeyChecking=no跳过首次连接的主机密钥确认,适配自动化流水线场景
- 必须给
- AWS S3部署:
- 先判断
WAR_FILE_PATH是否存在,避免无文件时执行命令报错 - 确保Jenkins代理已配置好AWS CLI的
abc配置文件(可通过aws configure --profile abc提前配置)
- 先判断
内容的提问来源于stack exchange,提问作者Akshat Mani Tripathi
相关产品推荐
相关产品推荐

