正常前端代码开发完成,部署代码需连接xshell或者SFTP工具进入到项目目录,更换静态文件才能完成部署。为提高前端部署效率,不再手动通过工具连接远程替换代码,在本地使用脚本完成远程连接及代码部署。

环境搭建

因为使用脚本登录远程服务器,需使用到ssh的免密码登录(基于密钥),实现流程如下:
1、在客户端生成一对密钥(如已生成过,可跳过此步骤)

基于空口令生成一个新的ssh密钥,以实现无密码登录:

1
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

参数说明:

-t 加密算法类型,这里是使用rsa算法

-P 指定私钥的密码,不需要可以不指定

-f 指定生成秘钥对保持的位置

2、将客户端公钥发送到服务器,使用ssh-copy-id
1
ssh-copy-id root@100.100.100.100 -p 6666

menu.saveimg.savepath20190119135334.jpg

3、配置自定义连接名,ssh的用户配置文件是放在当前用户根目录下的 .ssh 文件夹里(~/.ssh/config,不存在则新创建一个),其配置写法如下:
1
2
3
4
5
Host pptest
HostName 115.29.185.212
Port 6666
User www
IdentityFile ~/.ssh/id_rsa

menu.saveimg.savepath20190119144806.jpg

脚本

1,在项目根目录处新建配置文件 deploy.conf 方便管理
1
2
3
4
5
6
7
8
9
10
11
// 生产环境
prod_branch=master //需部署的代码分支
prod_host=prodName // 自定义连接名
prod_user=www //服务器用户名
prod_path=webstatic //需部署的服务器目录

// 测试环境
test_branch=master
test_host=testName
test_user=www
test_path=webstatic
2,在项目根目录新建脚本文件 deploy.sh
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
#!/bin/sh
#获取环境名
env=''

if [ x$1 != x ];then
env=$1
else
env='prod'
fi

#获取当前分支名
curr_branch=`git symbolic-ref --short -q HEAD`
echo '当前工作分支 => '${curr_branch}

echo '读取配置文件:'
deploy_branch=`sed '/^'${env}_branch'=/!d;s/.*=//' deploy.conf`
deploy_host=`sed '/^'${env}_host'=/!d;s/.*=//' deploy.conf`
deploy_user=`sed '/^'${env}_user'=/!d;s/.*=//' deploy.conf`
deploy_path=`sed '/^'${env}_path'=/!d;s/.*=//' deploy.conf`
deploy_mark=`sed '/^'${env}_mark'=/!d;s/.*=//' deploy.conf`
echo '分支 => '${deploy_branch}
echo '地址 => '${deploy_host}
echo '用户 => '${deploy_user}
echo '路径 => '${deploy_path}

echo '储存当前修改'
git stash

echo '切换到需发布的分支 => '${deploy_branch}
git checkout $deploy_branch

echo '编译项目'
npm run build

echo '备份中'
ssh ${deploy_host} "rm -rf ./"${deploy_path}"/back.tar"
ssh ${deploy_host} "tar -cvf "${deploy_path}"/back.tar "${deploy_path}"/dist"

echo '上传中'
scp -r ./dist ${deploy_host}:${deploy_path}

echo '切回工作分支 => '${curr_branch}
git checkout $curr_branch

echo '释放修改'
git stash pop

echo '部署完成'
3,执行部署, 测试环境:sh ./deploy.sh test,生产环境:sh ./deploy.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sh ./deploy.sh test
当前工作分支 => master
读取配置文件:
分支 => master
地址 => pptest
用户 => www
路径 => pp.huodao.hk

编译项目
...
备份中
...
上传中
...
部署成功