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

我正在尝试将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'"

}

}

}

}

服务器启动,停止和重新启动均在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文件名也会更改如何处理这种情况。帮助我了解该过程。我在哪里可以得到完整的想法,在此先感谢一切

回答:

我必须说,您应该将工件的版本维护为非产品和产品部署的标准过程。通常,在非产品环境中,您可以计划

版本,而在生产环境中,您应该使用可以使用maven-release-plugin生成的

版本。它将提升您的pom版本,以用于后续的后续发行。您可以将工件存储到AWS

S3或Artifactory或Nexus(以实现高可用性),例如此处引用的ubuntu计算机。mvn release prepare release

perform

现在,我建议您再添加一个名为 应使用maven-release-

plugin发行版本并将其存储在单独的路径中,例如

ubuntu@00.00.00.00:/ home / ubuntu / RELEASE / $ {version}

并且根据您的stage(’Build’)应该复制到另一个路径,例如

ubuntu@00.00.00.00:/ home / ubuntu / SNAPSHOT / $ {version}

您可以根据Jenkins管道的条件输入参数执行阶段“ ”和“ ”。在您的情况下,这可能是获得平滑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}'"

}

}

}

}

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

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

以上是 如何使用jenkins将spring boot jar文件部署到EC2? 的全部内容, 来源链接: utcz.com/qa/404257.html

回到顶部