You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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"
                }
            }
        }
    }
}

关键步骤解释

  1. WAR文件路径捕获:
    • 在Install & Capture WAR Path阶段,通过find命令定位target目录下的第一个.war文件,用sh(returnStdout: true)获取输出并赋值给环境变量,trim()去除多余换行符避免路径错误
  2. SSH远程连接处理:
    • 必须给.ppk文件设置600权限,这是SSH对私钥文件的强制权限要求,否则会拒绝连接
    • 添加-o StrictHostKeyChecking=no跳过首次连接的主机密钥确认,适配自动化流水线场景
  3. AWS S3部署:
    • 先判断WAR_FILE_PATH是否存在,避免无文件时执行命令报错
    • 确保Jenkins代理已配置好AWS CLI的abc配置文件(可通过aws configure --profile abc提前配置)

内容的提问来源于stack exchange,提问作者Akshat Mani Tripathi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 11:03:29