核心思路:通过Jenkins参数化构建获取目标版本(Tag或Commit ID),使用git reset或git checkout命令将代码回退到指定提交,再重新部署。
操作步骤:
v1.0)或记录关键Commit ID;Jenkins需安装Git插件,且配置好Git仓库地址及认证信息。version,选项为历史Tag列表,如v1.0、v1.1)或String Parameter(让用户输入Commit ID)。case $status in
rollback)
echo "开始回滚到版本:$version"
git reset --hard $version # 或使用git checkout $version(保留工作区修改)
echo "代码回退完成,开始部署..."
# 后续部署命令(如scp到服务器、重启服务等)
;;
*)
echo "正常构建流程..."
;;
esac
status=rollback并指定version参数,Jenkins会自动拉取指定提交并部署。核心思路:每次构建后将代码或包(如.jar、.war)备份到Jenkins工作目录或远程服务器,回滚时取出对应备份文件覆盖当前版本。
操作步骤:
**/*.jar);或在构建脚本中添加备份命令(如tar czf ${JOB_NAME}-${BUILD_NUMBER}.tar.gz *,将文件存到${WORKSPACE}/bak目录)。BUILD_NUMBER定位备份文件,覆盖当前版本并重启服务(示例):#!/bin/bash
BACKUP_DIR="/var/lib/jenkins/workspace/${JOB_NAME}/bak"
TARGET_DIR="/var/www/html" # 部署目录
if [ -z "$version" ]; then
echo "未指定回滚版本,退出!"
exit 1
fi
BACKUP_FILE="${BACKUP_DIR}/${JOB_NAME}-${version}.tar.gz"
if [ ! -f "$BACKUP_FILE" ]; then
echo "备份文件不存在:$BACKUP_FILE,退出!"
exit 1
fi
echo "正在恢复备份文件:$BACKUP_FILE"
rm -rf "$TARGET_DIR"/* # 清空当前目录
tar xzf "$BACKUP_FILE" -C "$TARGET_DIR" # 解压备份
echo "备份恢复完成,服务已回滚到版本:$version"
Build with Parameters指定version(如123,对应第123次构建),Jenkins会自动取出备份文件并部署。核心思路:通过Jenkins构建时打Tag(如时间戳或版本号),将镜像推送到镜像仓库(如Harbor),回滚时拉取指定Tag的镜像并重启容器。
操作步骤:
docker build -t registry.example.com/project:${BUILD_TIMESTAMP}(或使用Git Commit ID作为Tag)。docker push将镜像推送到镜像仓库。kubectl或docker命令拉取指定Tag的镜像并重启容器(示例):#!/bin/bash
IMAGE_NAME="registry.example.com/project"
TAG=$1 # 通过参数传入回滚Tag
CONTAINER_NAME="project-container"
echo "正在拉取镜像:${IMAGE_NAME}:${TAG}"
docker pull "${IMAGE_NAME}:${TAG}"
echo "重启容器:${CONTAINER_NAME}"
docker stop "${CONTAINER_NAME}" && docker rm "${CONTAINER_NAME}"
docker run -d --name "${CONTAINER_NAME}" -p 8080:8080 "${IMAGE_NAME}:${TAG}"
echo "回滚完成,当前版本:${TAG}"
Build with Parameters指定TAG(如202511011200),Jenkins会自动拉取指定镜像并重启容器。核心思路:通过Jenkins更新Kubernetes Deployment的镜像版本,回滚时使用kubectl rollout undo命令恢复到上一个稳定版本。
操作步骤:
v1.0),并推送到镜像仓库。kubectl set image命令更新Deployment的镜像版本(示例):kubectl set image deployment/project-deployment project=${IMAGE_NAME}:${TAG} -n default
kubectl rollout undo deployment/project-deployment -n default
kubectl rollout status deployment/project-deployment -n default查看回滚进度。以上方法可根据项目类型(代码托管、本地文件、容器化、Kubernetes)选择使用,其中基于Git Tag和基于Kubernetes Rollback是最常用的自动化回滚方案。