Jenkins 参数化构建回滚

<!--jenkins所需环境安装后构建pipline项目-->

一、构建流水线(pipline)项目

Jenkins 参数化构建回滚

二、配置所属项目

1、丢弃旧的构建

Jenkins 参数化构建回滚

<!--可按需配置-->

策略

Log Rotation

保持构建的天数

7

如果非空,构建记录将保存此天数

保持构建的最大个数

5

如果非空,最多此数目的构建记录将被保存

2、参数化构建过程
选项参数

Jenkins 参数化构建回滚

名称

Status

选项

Deploy
Rollback

描述

Deploy:检索发布最新版
Rollback:版本回滚回滚指定的构建版本号
字符参数

Jenkins 参数化构建回滚

名称

Version

默认值

0

描述

回滚版本号;即jenkins发布版本号,版本发布时请忽略该选项
默认值0:本身是没有这个版本号

三、构建pipline流水线

Jenkins 参数化构建回滚

<!--脚本-->

pipeline {
agent any

tools {
// Install the Maven version configured as "M3" and add it to the path.
maven "maven3"
jdk "jdk1.8"
}

stages {
stage('pull'){
steps{
// Get some code from a GitHub repository
git credentialsId: 'liusongbo', url: 'https://gitlab.sucoupon.com/xiaohongshu/service.git'
}
}
stage('Build') {
steps {

// Run Maven on a Unix agent.
sh "mvn -Dmaven.test.skip=true clean package deploy"

// To run Maven on a Windows agent, use
// bat "mvn -Dmaven.test.failure.ignore=true clean package"

}

post {
// If Maven was able to run the tests, even if some of the test
// failed, record the test results and archive the jar file.
success {
archiveArtifacts 'target/*.jar'
}
}
}
stage('数据备份') {
steps{
sh '/data/scripts/huigun.sh'
}
}
stage('发布上线上线') {
steps{
input '是否要发布正式环境?'
sshPublisher(publishers: [sshPublisherDesc(configName: 'xhs', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: ''' mv /app/www/xhs/xiaohongshu-1.0.0.jar /app/backup/xiaohongshu-1.0.0.jar.`date +%Y%m%d%H%M%S`
cp backup/xiaohongshu-1.0.0.jar /app/www/xhs/
''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: 'backup/', remoteDirectorySDF: false, removePrefix: 'target', sourceFiles: 'target/*.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
}
}
stage('启动服务') {
steps{
sh 'ssh www@172.17.1.15 -p9352 " bash /app/scripts/devops.sh"'
}
}
}
}

<!--数据备份------huigun.sh-->

#!/bin/bash
# Date: 2021-04-26
# Author: lidy
# -*- coding:utf-8 -*

case $Status in
Deploy)
echo "Status:$Status"
path="${WORKSPACE}/backup/${BUILD_NUMBER}" #创建每次要备份的目录
if [ -d $path ];
then
echo "The files is already exists "
else
mkdir -p $path
fi
cp -f ${WORKSPACE}/target/*.jar $path #将打包好的war包备份到相应目录,覆盖已存在的目标
echo "Completing!"
;;
Rollback)
echo "Status:$Status"
echo "Version:$Version"
cd ${WORKSPACE}/backup/$Version #进入备份目录
cp -f *.jar ${WORKSPACE}/target/ #将备份拷贝到程序打包目录中,并覆盖之前的war包
;;
*)
exit
;;
esac

ReservedNum=9 #保留文件数
FileDir=${WORKSPACE}/backup/
date=$(date "+%Y%m%d-%H%M%S")

cd $FileDir #进入备份目录
FileNum=$(ls -l | grep '^d' | wc -l) #当前有几个文件夹,即几个备份

while(( $FileNum > $ReservedNum))
do
OldFile=$(ls -rt | head -1) #获取最旧的那个备份文件夹
echo $date "Delete File:"$OldFile
rm -rf $FileDir/$OldFile
let "FileNum--"
done

四、运行项目效果

Jenkins 参数化构建回滚

发表评论

相关文章