Hoody's Blog
一键编译发布

每次增加博客功能都要进行3个项目的编译发布
2个VUE前端项目(博客和后台) 编译打包
1个Springboot API后端 编译打包
还要重启服务

手动挡是用不下去了.
由于只写过一些简单的linux脚本
所以大致记录一下我学习windows脚本的编写过程

0.脚本中需要做什么

1.调用npm run build 对前端项目进行编译打包
2.调用mvnw package 对Springboot进行打包
3.上传至Linux服务器
4.重启docker容器

1.编译项目

在windows 执行脚本那就是bat没跑了

bat (批处理文件类型)
在DOS和Windows(任意)系统中,.bat文件是可执行文件,由一系列命令构成,其中可以包含对其他程序的调用。这个文件的每一行都是一条DOS命令(大部分时候就好像我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。
----------------------百度百科

项目目录:

|project  
|--deploy.bat  
|--Springboot-server (maven Springboot)  
|--vue-front (vue cli3)  
|--vue-admin (vue cli3)  

首先,写入 deploy.bat

rem 直接使用命令会在新的cmd进程中执行,并且当前cmd进程将会马上执行下一行
rem npm run build:prod -prefix ./vue-front
rem  使用call 名调用,会在当前cmd进程中执行,并且执行完之后才会执行下一行

rem  npm -prefix 可以指定前缀.即命令的工作目录
call npm run build:prod -prefix ./vue-front
call npm run build:prod -prefix ./vue-admin 

rem 暂时不知道怎么设置mvnw的工作目录,先cd过去再执行,完了再cd回来
cd Springboot-server
call mvnw clean
call mvnw package -DskipTests
cd ..

至此,3个项目分别打包在了自己的目录下, 项目目录:

|project
|--deploy.bat
|--Springboot-server
   |--target
      |--app.jar
|--vue-front
   |--dist
|--vue-admin
   |--dist

2.windows上传文件到Linux

好了,编译打包完了,下一步是要上传到Linux服务器
在这之前我是使用Xftp进行图形化操作的,但是它的帮助文档只写了怎么用命令行启动图形化界面
ORZ
Google 一番,得到了WinSCP

什么是 WinSCP
WinSCP 是一个 Windows 环境下使用的 SSH 的开源图形化 SFTP 客户端。同时支持 SCP 协议。它的主要功能是在本地与远程计算机间安全地复制文件,并且可以直接编辑文件。
同时也支持命令行脚本运行
---------WinSCP

大致用法: 1.通过winscp 进入scp命令界面 或者 winscp /script=<你的winSCP脚本>
2.open user:pwd@ip:port 打开到服务器的SSH连接
3.put <本地目录> <远程目录> 上传文件
4.call linux 命令 = 远程调用服务器linux 命令
5.close 关闭连接
其他命令参考脚本和任务自动化

callWinSCP.bat

call WinSCP /script=ScpScript.txt

ScpScript.txt

open user:pwd@ip:port
put E:\myfile.txt /root/myfile.txt
close

3.最终脚本

deploy.bat 加入调用 WinSCP

rem 直接使用命令会在新的cmd进程中执行,并且当前cmd进程将会马上执行下一行
rem npm run build:prod -prefix ./vue-front
rem  使用call 名调用,会在当前cmd进程中执行,并且执行完之后才会执行下一行

rem  npm -prefix 可以指定前缀.即命令的工作目录
call npm run build:prod -prefix ./vue-front
call npm run build:prod -prefix ./vue-admin 

rem 暂时不知道怎么设置mvnw的工作目录,先cd过去再执行,完了再cd回来
cd Springboot-server
call mvnw clean
call mvnw package -DskipTests
rem 返回上级目录
cd ..

rem /script="你的SCP脚本"
call WinSCP /script=ScpScript.txt

ScpScript.txt 注意:在SCP脚本中,使用的是WinSCP提供的命令

rem 打开SSH连接
open user:pwd@ip:port
echo ----------------开始上传文件到 远程 /root/wait-deploy 目录--------------------
put .\vue-admin\dist /root/wait-deploy/admin
put .\vue-front\dist /root/wait-deploy/front
put .\Springboot-server\target\app.jar /root/wait-deploy/app.jar 

echo ----------------停止 Docker 运行--------------------
call sudo docker stop api
call sudo docker stop nginx

echo ----------------删除 远程 /root/docker/nginx/dist/admin 挂载目录--------------------
call rm -rf /root/docker/nginx/dist/admin

echo ----------------删除 远程 /root/docker/nginx/dist/front 挂载目录--------------------
call rm -rf /root/docker/nginx/dist/front

echo ----------------删除 远程 /root/docker/api/app.jar 挂载文件--------------------
call rm -rf /root/docker/api/app.jar

echo ----------------复制 远程 /root/wait-deploy 的文件到docker 挂载目录--------------------
call sudo cp -r /root/wait-deploy/admin /root/docker/nginx/dist/admin
call sudo cp -r /root/wait-deploy/front /root/docker/nginx/dist/front
call sudo cp -r /root/wait-deploy/vip-hoody-site-api.jar /root/docker/api/app.jar

echo ----------------启动 Docker 运行--------------------
call sudo docker start api
call sudo docker start nginx
close
exit

4. 其实不是每次都要上传发布

bat 脚本可以进行 goto操作,再加上用户输入后if判断,前往代码块 deploy.bat

:begin
echo off
echo 请选择需要执行的内容:
echo 1:build vue-Front
echo 2:build vue-Admin
echo 3:build Springboot-API
echo 4:build All and deploy to ECS
echo 5:quit 
set deployall="false"
choice /c:1234 /m:"please select:"
if %errorlevel% == 4 goto end
if %errorlevel% == 3 goto buildAll
if %errorlevel% == 2 goto p1
if %errorlevel% == 1 goto p2

:buildAndDeploy
set all="true"
goto p1

:p1
rem do somethings build 
if %all%=="true" (
goto p2
) else (
goto begin)

:p2 
rem do somethings build 
goto begin 

:end 
echo quit

附录

Winscp help 命令简介

C:\ > winscp
winscp>  help
call     执行任意远程命令
cd       改变远程工作目录
checksum 计算远端文件的校验码
chmod    改变远程文件权限
close    关闭会话
cp       复制远端文件
echo     将参数显示为消息
exit     关闭所有会话并结束程序
get      从远程目录下载文件到本地目录
help     显示帮助
keepuptodate 在一个远程目录连续反映本地目录的改变
lcd      改变本地工作目录
lls      列出本地目录的内容
ln       新建远程符号链接
lpwd     显示本地工作目录
ls       列出远程目录的内容
mkdir    新建远程目录
mv       移动或者重命名远程文件
open     连接到服务器
option   设置或显示脚本选项的值
put      从本地目录上传文件到远程目录
pwd      显示远程工作目录
rm       删除远程文件
rmdir    删除远程目录
session  列出连接的会话或者选择活动会话
stat     获取远程文件属性
synchronize 用一个本地目录同步远程目录
添加新评论,支持Markdown格式