需求描述

由于研发项目较小,团队人员较少,所以没有部署jenkins。需要写一个自动化部署的shell脚本,实现在本地执行脚本自动完成打包,上传、备份、重启等操作。

具体实现

1、在项目根目录新建名为deploy.sh的脚本文件,每次修改完代码,直接在根目录打开git命令窗口,执行sh deploy.sh

2、下面是实现代码

#!/bin/bash
set -e

#存储原始环境变量
OriginHOME=$HOME

export HOME=/home/remoteusername

if [[ $1 != "dev" && $1 != "test" && $1 != "pre" ]]
then
    echo -e "\033[41;37m 不存在 $1 环境  只有 -> dev(联调) test(测试) pre(预生产) \033[0m"
    exit
fi

#记录当前时间2022-10-0911:08:55
time=$(date "+%Y-%m-%d%H:%M:%S")
#备份文件名称 dist2022-10-0911:08:55
newFileName="dist"$time
#服务器上的路径
filePath=""

function deploy() {
    #上次包备份
    #连接服务器,对上次的包进行备份
    ssh -p 22 root@ip mv /xx/xx/xx/${filePath}/dist /xx/xx/xx/${filePath}/${newFileName}
    echo -e "\033[32m 连接成功,上传代码中... \033[0m"
    #复制dist文件上传到远程服务器
    scp -r dist root@ip:/xx/xx/xx/${filePath}
    echo -e "\033[32m 代码上传成功 \033[0m\n"
    #重启nginx
    ssh -p 22 root@ip '/xx/xx/xx/nginx -s reload'
    echo -e "\033[32m nginx重启成功 \033[0m\n"
}

function build() {
    #执行打包命令
    yarn build:prod

    #-e\033[32m设置文字前景色绿色
    echo -e "\033[32m 打包完毕 \033[0m"
    echo -e "\033[32m 连接 $1 服务器 \033[0m"

    if [ $1 == "dev" ];then
      filePath="联调环境的包存放文件名"
    elif [ $1 == "test" ];then
      filePath="测试环境的包存放文件名"
    elif [ $1 == "pre" ];then
      filePath="预生产环境的包存放文件名"
    else
        echo -e "您输错环境名称了吧..."
        exit
    fi

    deploy
}


build $1



3、由于本地客户端无法安装sshpass或except来实现免密登录,你可以在客户端生成ssh公钥并把它放在服务器上,来完成免密登录。

Logo

一站式 AI 云服务平台

更多推荐