ion*_*ion 6 java bash continuous-deployment jenkins spring-boot
我正在尝试将 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'"
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
服务器启动、停止和重启在 shell 脚本中处理。
我的开始.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
Run Code Online (Sandbox Code Playgroud)
这完美地启动了我的服务器并且工作正常..
这里我的疑问目前在 start.sh 中,我使用相同的 jar 文件名,所以它工作正常,但在生产中,版本更改 jar 文件名也会改变如何处理这种情况。帮助我了解那个过程。我在哪里可以得到完整的想法,一切都在此先感谢
小智 5
我必须说你应该维护你的artifact\xe2\x80\x99s版本作为非产品和产品部署的标准流程。通常在非产品环境中,您可以规划SNAPSHOT版本,而在生产环境中,您应该选择RELEASEmvn release prepare release perform
版本,该版本可以使用maven-release-plugin生成。它将提升您的 pom 版本以供下一个后续版本使用。您可以将工件存储到 AWS S3 或 Artifactory 或 Nexus(以实现高可用性),就像您在此处提到的 ubuntu 计算机一样。
现在我建议您应该添加一个名为 stage (\'Release\')的阶段,您应该在其中使用 maven-release-plugin 来发布版本并将其存储到单独的路径,例如
\n\n\n\n\nubuntu@00.00.00.00:/home/ubuntu/RELEASE/${版本}
\n
根据你的阶段(\'Build\')应该复制到另一个路径,例如
\n\n\n\n\nubuntu@00.00.00.00:/home/ubuntu/SNAPSHOT/${版本}
\n
您可以根据 Jenkins 管道的条件输入参数执行阶段“ Release ”和“ Prod-Deliver ”。\n这将是您案例中顺利 CICD 的可能解决方案。
\n\n pipeline {\n agent any\n\n tools{\n maven \'localmaven\' \n }\n stages {\n stage(\'Build\') { \n steps {\n sh \'mvn clean install\' \n }\n post {\n success {\n echo \'Now Archiving...\'\n }\n } \n }\n\n stage(\'Release\') { \n steps {\n sh \'elease:prepare release:perform\' \n }\n post {\n success {\n ////\n }\n } \n }\n\n stage(\'NonProd-Deliver\') {\n steps {\n /*\n You can extract the version from pom.xml,replace you project location in jenkins workspace in the below command\n */\n 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 /)\'\n sh \'scp -v -o StrictHostKeyChecking=no -i /var/lib/jenkins/secrets/mykey target/*.jar ubuntu@00.00.00.00:/home/ubuntu/SNAPSHOT/${version}\'\n 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\'"\n }\n }\n\n stage(\'Prod-Deliver\') {\n steps {\n /*\n For production release you should pass the version as a parameter to your jenkins pipeline which is going to be in production\n */\n sh \'scp -v -o StrictHostKeyChecking=no -i /var/lib/jenkins/secrets/mykey target/*.jar ubuntu@00.00.00.00:/home/ubuntu/RELEASE/${version} \'\n 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}\'"\n }\n }\n\n}\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n您必须在脚本文件中添加条件,如下所示
\n\n#!/bin/bash\nrelease_type=$1\nversion=$2\nif [[ ${release_type} == "prod" ]]; then\n # non snapshot release to production env\n nohup java -jar /home/ubuntu/RELEASE/${version}/aws-0.0.1.jar > /home/ubuntu/log.txt 2>&1 & \nelse\n # snapshot release to non production env\n nohup java -jar /home/ubuntu/SNAPSHOT/${version}/aws-0.0.1-SNAPSHOT.jar > /home/ubuntu/log.txt 2>&1 &\nfi\necho $! > /home/ubuntu/pid.file\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
4409 次 |
最近记录: |