前言

在没有 ci 或者 jekenis 的支持下,是否还在为本地手动打包部署而烦恼?
本文主要针对远古级部署而写对对应脚本

shell🌰

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/bin/bash

# 基础参数配置
PROMPT="是否更新dist?(y/n)"
read -t 10 -p $PROMPT":" IS_UPDATE_DIST #判断是否更新dist包
DIST_DIR="vue.config.js"
USER_NAME="username"
IP="test_ip"
PORT="8080"
PASSWORD="PASSWORD#"
PROJECT_DIR="/front/dist"
DINGDING_TALK_URL="https://oapi.dingtalk.com/robot/send"
TALK_ACCESS_TOKEN="12321321"


# 本地build
if [ $IS_UPDATE_DIST == "n" ]
then
zip -r dist-2.zip $DIST_DIR
elif [ $IS_UPDATE_DIST == "y" ]
then
echo "打包新的dist"
# yarn -v 判断yarn是否安装
yarn -v && yarn build:test || npm run build:test # 打包最新的dist
# 对dist进行压缩
zip -r dist-2.zip $DIST_DIR
else
echo "该选项无效,请重新选择!"
exit
fi


# 上传本地的压缩文件到服务器
expect <<EOD
set timeout 30
spawn scp -P $PORT ./dist-2.zip $USER_NAME@$IP:$PROJECT_DIR
expect "*assword*"
send "$PASSWORD\r"
expect eof
EOD

echo "完成本地文件到服务器上传"

# 远程服务器连接,对上传对文件进行解压到部署的目录
expect <<EOD
set timeout 30
spawn ssh -p $PORT $USER_NAME@$IP
expect "*assword*"
send "$PASSWORD\r"
expect "#*"
send "cd $PROJECT_DIR\r"
send "unzip dist-2.zip -d ./dist-demo1\r"
expect eof
EOD

echo "完成本地dist部署到服务器"

# 钉钉订阅部署消息

msg='{
"msgtype":"text",
"text":{
title:"测试部署通知",
content:"测试部署通知-content"
}
}'

curl -X POST $DINGDING_TALK_URL\?access_token\=$TALK_ACCESS_TOKEN -H 'Content-Type: application/json' -d "$msg"

echo "钉钉消息通知已发送"

exit