我们有这样的发现,前端的web代码在服务器上的更新是很频繁的,并且他们每次都要求整个文件夹下的都删掉,然后把新的包全部复制上去。
背景:我使用jenkins构建web-h5的工程后,自动部署到测试环境上给测试人员测试,或者部署到开发环境,给开发人员验证,原来是编译结束后将dist目录下的复制到远程机器的路径/usr/local/webapps/h5/help路径下,复制前,删除/usr/local/webapps/h5/help文件夹,基本步骤如下:
cnpm install
npm run build --target=help --lbServer=$test_env #test_env是对应的环境,可以是test,或者dev
ssh root@$remote_ip "rm -rf /usr/local/webapps/$web_m/$web_dir"
cd dist
scp -r * root@$remote_ip: /usr/local/webapps/h5/help/
但是这个上面的操作有一个风险:ssh root@$remote_ip "rm -rf /usr/local/webapps/$web_m/$web_dir" 如果首次调试新工程,忘记了在服务器上创新新文件夹$web_m,就会把/usr/local/webapps下的都删掉。。。。。(我发生过一次,觉得这个rm -rf 太吓人了)
然后我想如果我每次都把打好的包放在ftp的固定路径下,然后让web的模块软链接到这个路径下的最新包,这样是比较安全的。
操作是将构建好的包(格式统一:年月日_分支_commitid_模块_环境,比如202009291148_develop_efde501_h5_help_test)
now_time=`date "+%Y%m%d%H%M"` #获取时间
commit=`git rev-parse --short HEAD` #获取commitid
dist_name="$now_time"_"$dn"_"$commit"_$web_m_$web_dir #dn是分支,web_m 这里为h5,web_dir 为help(我有多个模块和工程,所以这些都是传入的变量)
cnpm install
npm run build --target=help --lbServer=$test_env #test_env是对应的环境,可以是test,或者dev
mv dist $dist_name #(格式统一:年月日_分支_commitid_模块_环境,比如202009291148_develop_efde501_h5_help_test)
scp -r $dist_name root@$remote_ip: /usr/local/webapps/all_proj/
link_dir "$web_m" "$web_dir" 调用软链接函数,函数link_dir 如下
function link_dir()
{
[ "x$1" == "x" ] && echo var1 is null && exit 1
[ "x$2" == "x" ] && echo var2 is null && exit 1
rdir=/usr/local/webapps/$1/$2
if ssh root@$remote_ip test -d /usr/local/webapps/all_pro/$dist_name; then #检测远程文件夹是否存在
ssh root@remote_ip "rm -rf $rdir" #删除软连接 (注意这里不能使用rm -rf $rdir/ 这样删软件会把源文件夹删掉)
ssh root@remote_ip "ln -s /usr/local/webapps/all_pro/$dist_name $rdir" #创建软链接,链接到最新的构建包
fi
echo ++++++link dir information as follow+++++++
ssh $remote_ip"ls -all $rdir" #察看软链接信息
}
这样每次都会链接到最新的构建包: