我必须说,您应该将工件的版本维护为非产品和产品部署的标准过程。通常,在非产品环境中,您可以计划 SNAPSHOT
版本,而在生产环境中,您应该使用可以使用maven-release-plugin生成的 RELEASE
版本。它将提升您的pom版本,以用于后续的后续发行。您可以将工件存储到AWS
S3或Artifactory或Nexus(以实现高可用性),例如此处引用的ubuntu计算机。
mvn release prepare releaseperform
现在,我建议您再添加一个名为 stage(’Release’)的阶段,在该阶段 应使用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 { sh 'version=$(echo -e 'setns x=http://maven.apache.org/POM/4.0.0ncat /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 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=$1version=$2if [[ ${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 &fiecho $! > /home/ubuntu/pid.file


