如何使用 jenkins 将 Spring Boot jar 文件部署到 EC2?

ion*_*ion 6 java bash continuous-deployment jenkins spring-boot

我正在尝试将 Spring Boot 应用程序部署到 AWS EC2 实例。我看过很多博客和教程完全解释了部署过程,这是可以理解的。我正在努力如何在 jenkins 中进行持续部署或交付,其中主要功能是 Spring Boot 应用程序名称或 jar 文件名在那个时间发生变化。

我的管道

  pipeline {
    agent any

    tools{
       maven 'localmaven' 
    }
    stages {
        stage('Build') { 
            steps {
               sh 'mvn clean package' 
            }
            post {
               success {
                    echo 'Now Archiving...'
                    archiveArtifacts artifacts: '**/target/*.jar'
                   }
              } 
          }


    stage('Deliver') {
        steps {
             sh 'scp -v -o StrictHostKeyChecking=no  -i /var/lib/jenkins/secrets/mykey target/*.jar ubuntu@00.00.00.00:/home/ubuntu'
             sh "sshpass -p password ssh -o StrictHostKeyChecking=no -i /var/lib/jenkins/secrets/mykey ubuntu@00.00.00.00 '/home/ubuntu/start.sh'"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

}

服务器启动、停止和重启在 shell 脚本中处理。

我的开始.sh

#!/bin/bash
nohup java -jar /home/ubuntu/aws-0.0.1-SNAPSHOT.jar > /home/ubuntu/log.txt 2>&1 &
echo $! > /home/ubuntu/pid.file
Run Code Online (Sandbox Code Playgroud)

这完美地启动了我的服务器并且工作正常..

这里我的疑问目前在 start.sh 中,我使用相同的 jar 文件名,所以它工作正常,但在生产中,版本更改 jar 文件名也会改变如何处理这种情况。帮助我了解那个过程。我在哪里可以得到完整的想法,一切都在此先感谢

小智 5

我必须说你应该维护你的artifact\xe2\x80\x99s版本作为非产品和产品部署的标准流程。通常在非产品环境中,您可以规划SNAPSHOT版本,而在生产环境中,您应该选择RELEASEmvn release prepare release perform版本,该版本可以使用maven-release-plugin生成。它将提升您的 pom 版本以供下一个后续版本使用。您可以将工件存储到 AWS S3 或 Artifactory 或 Nexus(以实现高可用性),就像您在此处提到的 ubuntu 计算机一样。

\n\n

现在我建议您应该添加一个名为 stage (\'Release\')的阶段,您应该在其中使用 maven-release-plugin 来发布版本并将其存储到单独的路径,例如

\n\n
\n

ubuntu@00.00.00.00:/home/ubuntu/RELEASE/${版本}

\n
\n\n

根据你的阶段(\'Build\')应该复制到另一个路径,例如

\n\n
\n

ubuntu@00.00.00.00:/home/ubuntu/SNAPSHOT/${版本}

\n
\n\n

您可以根据 Jenkins 管道的条件输入参数执行阶段“ Release ”和“ Prod-Deliver ”。\n这将是您案例中顺利 CICD 的可能解决方案。

\n\n
   pipeline {\n    agent any\n\n    tools{\n       maven \'localmaven\' \n    }\n    stages {\n        stage(\'Build\') { \n            steps {\n               sh \'mvn clean install\' \n            }\n            post {\n               success {\n                    echo \'Now Archiving...\'\n                   }\n              } \n          }\n\n        stage(\'Release\') { \n            steps {\n               sh \'elease:prepare release:perform\' \n            }\n            post {\n               success {\n                    ////\n                   }\n              } \n          }\n\n      stage(\'NonProd-Deliver\') {\n          steps {\n               /*\n               You can extract the version from pom.xml,replace you project location in jenkins workspace in the below command\n               */\n               sh \'version=$(echo -e \'setns x=http://maven.apache.org/POM/4.0.0\\ncat /x:project/x:version/text()\' | xmllint --shell ${YOUR_PROJECT_LOCATION}/pom.xml | grep -v /)\'\n               sh \'scp -v -o StrictHostKeyChecking=no  -i /var/lib/jenkins/secrets/mykey target/*.jar ubuntu@00.00.00.00:/home/ubuntu/SNAPSHOT/${version}\'\n               sh "sshpass -p password ssh -o StrictHostKeyChecking=no -i /var/lib/jenkins/secrets/mykey ubuntu@00.00.00.00 \'/home/ubuntu/start.sh nonprod $version\'"\n          }\n      }\n\n       stage(\'Prod-Deliver\') {\n        steps {\n              /*\n               For production release you should pass the version as a parameter to your jenkins pipeline which is going to be in production\n               */\n             sh \'scp -v -o StrictHostKeyChecking=no  -i /var/lib/jenkins/secrets/mykey target/*.jar ubuntu@00.00.00.00:/home/ubuntu/RELEASE/${version} \'\n             sh "sshpass -p password ssh -o StrictHostKeyChecking=no -i /var/lib/jenkins/secrets/mykey ubuntu@00.00.00.00 \'/home/ubuntu/start.sh prod ${version}\'"\n        }\n    }\n\n}\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

您必须在脚本文件中添加条件,如下所示

\n\n
#!/bin/bash\nrelease_type=$1\nversion=$2\nif [[ ${release_type} == "prod" ]]; then\n  # non snapshot release to production env\n  nohup java -jar /home/ubuntu/RELEASE/${version}/aws-0.0.1.jar > /home/ubuntu/log.txt 2>&1 & \nelse\n  # snapshot release to non production env\n  nohup java -jar /home/ubuntu/SNAPSHOT/${version}/aws-0.0.1-SNAPSHOT.jar > /home/ubuntu/log.txt 2>&1 &\nfi\necho $! > /home/ubuntu/pid.file\n
Run Code Online (Sandbox Code Playgroud)\n