微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我正在尝试将spring boot应用程序部署到AWS EC2实例.我已经看到很多博客和教程完全解释了部署过程,这是可以理解的.我正在努力如何在jenkins中进行持续部署或交付,其中主要功能是spring boot app name或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 [email protected]:/home/ubuntu'
             sh "sshpass -p password ssh -o StrictHostKeyChecking=no -i /var/lib/jenkins/secrets/mykey [email protected] '/home/ubuntu/start.sh'"
        }
    }
}

}

服务器启动和停止以及重新启动都在shell脚本中处理.

我的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文件名也改变了如何处理这种情况.帮助我了解该过程.在那里我可以提前获得完整的想法和一切

解决方法:

我必须说你应该将工件的版本作为非产品和prod部署的标准流程.通常在非产品环境中,您可以规划SNAPSHOT版本,在生产中您应该使用RELEASE版本,该版本可以使用maven-release-plugin使用mvn release prepare release执行生成.它将提升您的pom版本以用于下一个后续版本.您可以将工件存储到AWS S3或Artifactory或Nexus(用于高可用性),例如您在此处引用的ubuntu计算机.

现在我建议你再添加一个名为stage(‘Release’)的阶段,你应该使用maven-release-plugin来释放版本并将其存储到一个单独的路径中

[email protected]:/home/ubuntu/RELEASE/${version}

并根据你的舞台(‘Build’)应该复制到另一条路径

[email protected]:/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 [email protected]:/home/ubuntu/SNAPSHOT/${version}'
               sh "sshpass -p password ssh -o StrictHostKeyChecking=no -i /var/lib/jenkins/secrets/mykey [email protected] '/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 [email protected]:/home/ubuntu/RELEASE/${version} '
             sh "sshpass -p password ssh -o StrictHostKeyChecking=no -i /var/lib/jenkins/secrets/mykey [email protected] '/home/ubuntu/start.sh prod ${version}'"
        }
    }

}
}

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

#!/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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐