先上效果
部署环境可以选择production or test 回滚可以选择之前的版本号,复制进去就可以回滚
设置多个环境部署
第一步:参数化构建过程
设置部署环境,填写入你想部署的环境,如图我填的是test和production
第二步:根据不同的环境设置不同的build打包,配置的参数可以通过$你的参数 获取,如图中,我设置的变量就可以通过$DEPLOY_ENV获取
#!/bin/bash
node -v
npm get registry
npm config set registry https://registry.npmmirror.com
echo "当前选择的环境是: $DEPLOY_ENV"
npm install yarn -g
yarn -v
# 删除之前的生成的build
rm -rf build
yarn
if [ $DEPLOY_ENV == production ]
then
echo "正在部署到生产环境"
yarn build
# 部署生产环境的命令
else
echo "正在部署到测试环境"
yarn build-test
# 部署测试环境的命令
fi
# 删除之前的生成的build.tar,并打包新的build.tar
rm -rf build.tar
tar -zcvf build.tar ./build
第三步:ssh Server里点开高级里的label然后设置成你想要的选项,例如我现在写的是test环境,然后就配置成测试环境时需要上传的文件夹
第四步:然后点击 add Server,配置生产环境的
然后配置一下传入到服务器的路径文件和指定路径,例如发布生产时我就把我的压缩包build.tar传入到服务器的/www/wwwroot/foundation-2.0.0-prod/ 文件中,发布测试时我就把我的压缩包build.tar传入到服务器的/www/wwwroot/foundation-2.0.0-test/ 文件中
然后执行exec command
# 进入到指定目录
cd /www/wwwroot/foundation-2.0.0-test/
# 删除原来的build文件
rm -rf build
# 解压
tar zxvf build.tar
# 删除build.tar
rm build.tar
第五步:在Ssh Server底下的高级里配置
第六步:运行时,选择参数即可
根据不同版本部署的到这里已经结束了 想要看版本回滚的接着往下看~
版本回滚
整体逻辑就是每build一次都将结果放在workplace的history里面,改名为当前build name。回滚时输入之前build name,直接根据名字在history文件里寻找,最后将结果放在result文件里。不回滚时也将产生的结果放在result文件里,到时候就是将result里的build.tar传递给服务器。并且在history中做了一个10次就删除最老的build.tar的命令,防止缓存过多。 jenkins的 shell脚本
第一步:新增一个参数构件化过程
第二步:修改build Name
我将build name设置为build number和部署环境和部署人的集合,方便之后回滚
第三步: 修改执行shell
#!/bin/bash
# 如果ROLLBACK_VERSION不填写,不回滚,直接发布最新的
if [ 0"$ROLLBACK_VERSION" = "0" ]; then
echo "非回滚"
node -v
npm get registry
npm config set registry https://registry.npmmirror.com
echo "当前选择的环境是: $DEPLOY_ENV"
npm install yarn -g
yarn -v
rm -rf build
yarn
if [ $DEPLOY_ENV == production ]
then
echo "打包生产版本"
yarn build
# 部署生产环境的命令
else
echo "打包测试版本"
yarn build-test
# 部署测试环境的命令
fi
rm -rf build.tar
tar -zcvf build.tar ./build
# 将打包的存入history,保持稳定存10个,这次需求发布的存在result里
# 如果没有history和result文件夹则新建
if [ ! -d history ]
then
echo "history不存在"
mkdir history
fi
if [ ! -d result ]
then
echo "result不存在"
mkdir result
fi
# 将build.tar改名为当前build name.tar,并放入history中
cp build.tar history/${BUILD_NUMBER}-${DEPLOY_ENV}-${BUILD_USER}.tar
# 将要发布的包放入result中
cp build.tar result/build.tar
# 设置目标文件夹路径
folder_path="history"
# 设置最大文件数量
max_files=10
# 统计文件夹内文件数量
file_count=$(ls -t "$folder_path" | wc -l)
echo "历史文件夹中有 $file_count 个文件"
# 如果文件数量大于指定数量
if [ "$file_count" -gt "$max_files" ]
then
# 删除最老的文件(按修改时间排序)
files_to_delete=$(ls -t "$folder_path" | tail -n +$((max_files + 1)))
echo "删除文件 $files_to_delete"
for file in $files_to_delete; do
rm "$folder_path/$file"
done
fi
else
#回滚的情况下
echo "回滚版本 $ROLLBACK_VERSION"
# 如果history里有需求回滚的版本,那么将需求版本放入result中
if [ -e "history/${ROLLBACK_VERSION}.tar" ]
then
cp history/${ROLLBACK_VERSION}.tar result/build.tar
cp history/${ROLLBACK_VERSION}.tar history/${BUILD_NUMBER}-${DEPLOY_ENV}-${BUILD_USER}.tar
else
echo "没有该版本"
fi
fi
第四步:只保留10天的构建
第五步:归档
第六步:修改ssh server的Exec command
具体可以自己调整