我正在尝试将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] 举报,一经查实,本站将立刻删除。