前端Jenkins多版本部署以及回滚

1,049 阅读3分钟

先上效果 image.png

部署环境可以选择production or test 回滚可以选择之前的版本号,复制进去就可以回滚

设置多个环境部署

第一步:参数化构建过程

设置部署环境,填写入你想部署的环境,如图我填的是test和production

image.png

第二步:根据不同的环境设置不同的build打包,配置的参数可以通过$你的参数 获取,如图中,我设置的变量就可以通过$DEPLOY_ENV获取

image.png


#!/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环境,然后就配置成测试环境时需要上传的文件夹

image.png

第四步:然后点击 add Server,配置生产环境的

image.png

然后配置一下传入到服务器的路径文件和指定路径,例如发布生产时我就把我的压缩包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底下的高级里配置

image.png

第六步:运行时,选择参数即可

image.png

根据不同版本部署的到这里已经结束了 想要看版本回滚的接着往下看~

版本回滚

整体逻辑就是每build一次都将结果放在workplace的history里面,改名为当前build name。回滚时输入之前build name,直接根据名字在history文件里寻找,最后将结果放在result文件里。不回滚时也将产生的结果放在result文件里,到时候就是将result里的build.tar传递给服务器。并且在history中做了一个10次就删除最老的build.tar的命令,防止缓存过多。 jenkins的 shell脚本

第一步:新增一个参数构件化过程

image.png

第二步:修改build Name

我将build name设置为build number和部署环境和部署人的集合,方便之后回滚 image.png

第三步: 修改执行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天的构建

image.png

第五步:归档

image.png

第六步:修改ssh server的Exec command

具体可以自己调整

image.png