首页 > 系统相关 >前端发布shell脚本

前端发布shell脚本

时间:2024-10-22 10:14:08浏览次数:6  
标签:脚本 shell REMOTE sshpass TAR 前端 echo FILE 服务器

将“切换目录、npm构建、tar打包、scp传输到服务器、服务器端解压、服务器端文件解压替换、服务器端服务重启”流程,整合成一个shell脚本

#!/bin/bash  
###  
 # @Description: 前端自动发布脚本  
 # @FilePath: publish.sh  
###  
  
# 获取脚本所在目录  
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"  
  
# 获取脚本所在目录的上一级目录  
PARENT_DIR="$(dirname "$SCRIPT_DIR")"  
  
# 本地 tar 文件名称  
LOCAL_TAR_FILE="dist.tar"  
  
# 远程服务器信息  
REMOTE_USER="root"                  # 远程服务器用户  
REMOTE_HOST=""                      # 远程服务器 IP
REMOTE_PORT="22"                    # 远程服务器 ssh 端口  
REMOTE_PASSWORD="$1"                # 远程服务器密码  
REMOTE_DIR="/usr/frontend/"         # 远程服务器文件传输目录  
  
# todo 添加执行参数检查于确认
# 检查打包命令是否成功的函数 check_success() { if [ $? -ne 0 ]; then echo "错误: $1" exit 1 fi } # 检查 sshpass 是否存在 USE_SSHPASS=false if command -v sshpass > /dev/null 2>&1; then if [ -z "$REMOTE_PASSWORD" ]; then echo "警告: 检测到 sshpass,但未提供密码。将使用常规方式登录。" else USE_SSHPASS=true fi else echo "未检测到 sshpass,使用常规的密码提示方式。" fi # 开始打包 echo "开始打包..." npm run build > /dev/null 2>&1 check_success "前端打包失败" # 删除旧的 tar 文件 rm -f $LOCAL_TAR_FILE > /dev/null 2>&1 # 生成新的 tar 文件 tar -cvf $LOCAL_TAR_FILE dist > /dev/null 2>&1 check_success "打包 dist 目录失败" # 传输文件到服务器 echo "正在将文件传输到服务器..." if [ "$USE_SSHPASS" = true ]; then sshpass -p "$REMOTE_PASSWORD" scp -P $REMOTE_PORT $LOCAL_TAR_FILE $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR else scp -P $REMOTE_PORT $LOCAL_TAR_FILE $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR fi check_success "SCP 文件传输失败" # 定义在远程服务器上执行的脚本内容 REMOTE_SCRIPT=$(cat << EOF #!/bin/bash cd $REMOTE_DIR if [ ! -e "$LOCAL_TAR_FILE" ]; then echo "$LOCAL_TAR_FILE 不存在" exit 1 fi tar -xvf $LOCAL_TAR_FILE > /dev/null 2>&1 if [ $? -ne 0 ]; then echo "错误: $LOCAL_TAR_FILE 解压失败" exit 1 fi rm -rf html mv dist html # docker restart frontend_web EOF ) # 登录服务器并执行脚本 echo "文件传输完成,正在登录服务器并执行脚本..." if [ "$USE_SSHPASS" = true ]; then sshpass -p "$REMOTE_PASSWORD" ssh -p "$REMOTE_PORT" "$REMOTE_USER@$REMOTE_HOST" "bash -s" <<EOF $REMOTE_SCRIPT EOF else ssh -p "$REMOTE_PORT" "$REMOTE_USER@$REMOTE_HOST" "bash -s" <<EOF $REMOTE_SCRIPT EOF fi check_success "远程脚本执行失败" cd - > /dev/null 2>&1 || exit echo "脚本执行完毕!"

命令行使用方式:

sh publish.sh ssh-password

 

标签:脚本,shell,REMOTE,sshpass,TAR,前端,echo,FILE,服务器
From: https://www.cnblogs.com/timseng/p/18491962

相关文章

  • 前端代码从svn迁移到git
    JQuery,Vue框架,若依框架检查是否有待上传的代码,从SVN上下载对应版本的最新代码,然后打开项目,在终端运行以下命令:gitinitgitremoteaddoriginhttps://gitee.com/xxxxxxxxxxxx/xxxx-web.git删除本地文件夹的隐藏文件夹.svn添加git的忽略文件.gitignore(改文件中的qa-ui例,针对......
  • 【SHELL】sed 命令用法
    linux命令行查询grep用法信息sed--helpUsage:sed[OPTION]...{script-only-if-no-other-script}[input-file]...-n,--quiet,--silentsuppressautomaticprintingofpatternspace--debugannotateprogramexecution......
  • PowerShell的Runspace是一个用于执行PowerShell代码的环境。它提供了一个独立的上下文
    PowerShell的Runspace是一个用于执行PowerShell代码的环境。它提供了一个独立的上下文,允许你在其中运行命令、脚本和表达式。Runspace可以被认为是PowerShell会话的一个实例,可以在多线程环境中使用,允许你并发执行多个PowerShell任务。以下是关于PowerShellRunspace的一些关键点和......
  • linux后台运行python脚本
    一、使用sytemctl运行service准备需要运行的脚本HelloWorld.py,配置文件HelloWorld.servce十秒打印一次日志importtimeimportlogging#配置日志记录器logging.basicConfig(level=logging.INFO,format='%(asctime)s-%(message)s',datefmt='%Y-%m-%d%H:%M:%S')while......
  • 安装脚本遇到的问题
    安装狐狸工具箱发现的问题 起初想把我电脑的东西全部导入工作室的电脑,就在安装狐狸工具箱的时候,我发现一键卫星怎么也打不开,起初我怀疑是不是电脑的安全系统给杀掉了,后面我关了全部检测,发现还是运行不了,我随手便打开了sqlmap,发现运行得了(我电脑是完全没有问题的) 随后我......
  • 77.优美的鲜花网店网页 ​Web前端网页制作 大学生期末大作业 html+css+js
    目录一、前言二、网页文件三、网页效果四、代码展示1.HTML2.CSS3.JS五、更多推荐一、前言本实例以鲜花为主题设计,应用html+css+js,包括DIV布局、图片轮翻效果、菜单导航、二级三级菜单、留言板、搜索等,供大家参考。本网页支持如Dreamweaver、HBuilder、Text、Vscode......
  • 超详细介绍bash脚本相关细节
            Bash(BourneAgainSHell)是一种广泛使用的Unixshell和命令语言,它提供了一套强大的功能用于脚本编写和自动化任务。1.编写脚本方式和运行脚本方式sudovi名称.sh例如编写一个名称为a的脚本:运行方式1:先给权限再运行sudochmod+x文件名./文件名例......
  • 【SHELL】grep 命令用法
    linux命令行查询grep用法信息grep--helpUsage:grep[OPTION]...PATTERNS[FILE]...SearchforPATTERNSineachFILE.Example:grep-i'helloworld'menu.hmain.cPATTERNScancontainmultiplepatternsseparatedbynewlines.Patternselectionandinte......
  • shell与会话
    当您在命令行中运行一个脚本(如`./gotobin`)时,该脚本会在一个新的子Shell中执行。这意味着脚本中的所有命令(包括`cd`命令)都仅在这个子Shell的上下文中运行。一旦脚本执行完毕,子Shell就会关闭,并且您会返回到原始的交互式Shell会话中,该会话的工作目录保持不变。这是因为`......
  • 网站域名是https的,前端直接访问其他网站的http网址,为什么自动转成https的了
    当一个网站使用HTTPS(安全超文本传输协议)时,浏览器通常会自动将任何对HTTP(非安全超文本传输协议)网址的请求重定向到HTTPS版本。这种行为由多个因素引起,以下是一些可能的原因:1. HSTS(HTTPStrictTransportSecurity)HSTS是一种安全特性,允许网站声明被浏览器强制使用HTTPS。......