当前位置: 首页 > 知识库问答 >
问题:

如何使用Jenkins将spring boot jar文件部署到EC2?

鄢晔
2023-03-14

我试图将spring boot应用程序部署到AWS EC2实例中。我看到了很多博客和教程,完整地解释了部署过程,这是可以理解的。我正在努力如何在jenkins中进行持续的部署或交付,这是spring boot、app名称或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'"
        }
    }
}
#!/bin/bash
nohup java -jar /home/ubuntu/aws-0.0.1-SNAPSHOT.jar > /home/ubuntu/log.txt 2>&1 &
echo $! > /home/ubuntu/pid.file

这启动我的服务器完美,工作良好…

这里,我的疑问是start.sh,我使用的是相同的jar文件名,所以它工作得很好,但是在生产中,随着版本的变化,jar文件名也改变了如何处理这种情况。帮我了解一下这个过程。在那里我可以得到完整的想法和一切提前感谢

共有1个答案

卢枫涟
2023-03-14

我必须说,您应该将工件的版本维护为非prod和prod部署的标准流程。通常,在非Prod环境中,您可以规划快照版本,而在生产环境中,您应该选择发行版本,该版本可以使用MVN RELEASE prepare RELEASE perform使用maven-release-plugin生成。它将为下一个后续版本增加您的pom版本。您可以将您的工件存储到AWS、S3、Artifactory或Nexus(为了高可用性),就像您在这里提到的ubuntu机器一样。

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

Ubuntu@000.00.00.00://home/Ubuntu/release/${version}

Ubuntu@000.00.00.00://home/Ubuntu/snapshot/${version}

您可以根据Jenkins管道的条件输入参数执行阶段'release'和'prod-deliver'。在您的情况下,这将是一个顺利的CICD的可能解决方案。

   pipeline {
    agent any

    tools{
       maven 'localmaven' 
    }
    stages {
        stage('Build') { 
            steps {
               sh 'mvn clean install' 
            }
            post {
               success {
                    echo 'Now Archiving...'
                   }
              } 
          }

        stage('Release') { 
            steps {
               sh 'elease:prepare release:perform' 
            }
            post {
               success {
                    ////
                   }
              } 
          }

      stage('NonProd-Deliver') {
          steps {
               /*
               You can extract the version from pom.xml,replace you project location in jenkins workspace in the below command
               */
               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 /)'
               sh 'scp -v -o StrictHostKeyChecking=no  -i /var/lib/jenkins/secrets/mykey target/*.jar ubuntu@00.00.00.00:/home/ubuntu/SNAPSHOT/${version}'
               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'"
          }
      }

       stage('Prod-Deliver') {
        steps {
              /*
               For production release you should pass the version as a parameter to your jenkins pipeline which is going to be in production
               */
             sh 'scp -v -o StrictHostKeyChecking=no  -i /var/lib/jenkins/secrets/mykey target/*.jar ubuntu@00.00.00.00:/home/ubuntu/RELEASE/${version} '
             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}'"
        }
    }

}
}

您还必须像下面这样在脚本文件中添加condtion

#!/bin/bash
release_type=$1
version=$2
if [[ ${release_type} == "prod" ]]; then
  # non snapshot release to production env
  nohup java -jar /home/ubuntu/RELEASE/${version}/aws-0.0.1.jar > /home/ubuntu/log.txt 2>&1 & 
else
  # snapshot release to non production env
  nohup java -jar /home/ubuntu/SNAPSHOT/${version}/aws-0.0.1-SNAPSHOT.jar > /home/ubuntu/log.txt 2>&1 &
fi
echo $! > /home/ubuntu/pid.file
 类似资料:
  • 问题内容: 我在装有Tomcat 8的同一服务器上运行Jenkins 1.6(并且也尝试使用Jenkins 2.0)。我需要将Maven多模块应用程序部署到Tomcat Web应用程序。它有两个必须部署的子模块中的war文件。Deploy插件最多支持Tomcat 7,并且工作正常。但是,问题是我需要使用Tomcat 8,因为我的Web应用程序无法在Tomcat 7上运行。是否可以将War文件从Je

  • 在将文件部署到Wildfly时,应将文件复制到何处? 我看不到文件在哪里: 似乎要进行爆炸式部署: 在运行期间,启用的war文件由tmp目录中的vfs分解。这些文件将在停止/重新启动/禁用时删除。 参考内容位于内容数据目录中,用于重新创建tmp文件。

  • 我有一个Spring Boot Java应用程序,我已经按照教程进行了设置,以便构建一个WAR。我正试图使用Jenkins将这个WAR文件部署到远程Tomcat 7服务器。当我告诉Jenkins构建和部署应用程序时,登录Jenkins表明一切都是成功的。如果我登录到托管Tomcat的远程服务器,我可以看到WAR被复制到服务器。如果我查看日志文件,它会显示以下内容: 如果我进入tomcat管理器应用

  • 我正试图部署詹金斯战争文件。我执行了以下命令 下面是日志文件。 PS C:\站点 谁能告诉我javajarjenkins的命令是什么。战争

  • 我已经制作了我的网络应用程序,我想把它放在互联网上。我听说用户可以使用 .war 文件在 cPanel 中部署 Web 应用程序。我一直在搜索这个,任何类型的教程或任何有关如何做到这一点的信息。但是没有一个真正告诉你如何做到这一点,你只会找到关于如何在Tomcat或Glassfish上部署的教程。我在这里错过了什么点吗?一旦我的 Web 应用程序打包为 .war 文件,我如何将它放到互联网上?如果