如何使用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/bashnohup 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/bashrelease_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