返回

编写定时执行npm run build并将构建结果通过SSH复制到远程服务器的脚本

日志

在本文中,我们将介绍如何编写一个shell脚本,每5分钟执行一次,每次执行npm run build命令,并将构建结果通过SSH复制到指定的远程服务器上。

第一步:编写脚本

首先,我们需要编写一个shell脚本来完成上述任务。下面是一个简单的示例脚本:

#!/bin/bash

# 设置远程服务器的用户名、IP地址和目标目录
REMOTE_USER="your_remote_username"
REMOTE_IP="your_remote_ip"
REMOTE_PATH="/path/to/remote/folder"

# 运行npm build命令
npm run build

# 通过scp命令将构建结果复制到远程服务器
scp -r /path/to/build/folder $REMOTE_USER@$REMOTE_IP:$REMOTE_PATH

在上面的脚本中,我们首先定义了一些变量来设置远程服务器的用户名、IP地址和目标目录。然后,我们运行npm run build命令来执行构建操作。最后,我们使用scp命令将构建结果复制到远程服务器上。

您需要根据您的实际情况修改上述脚本中的变量值,并确保已安装npmscp工具。

第二步:安排定时任务

接下来,我们需要安排一个定时任务来每5分钟执行一次上面编写的脚本。这可以通过使用crontab命令来完成。

首先,您需要将上面编写的脚本保存为一个文件,例如build_and_deploy.sh,并使用chmod +x build_and_deploy.sh命令使其可执行。

然后,您可以使用crontab -e命令编辑crontab文件,并添加以下内容来安排每5分钟执行一次此脚本:

*/5 * * * * /path/to/build_and_deploy.sh

请注意,您需要根据您保存脚本文件的实际位置修改上述内容中的路径。

第三步:配置SSH免密登录

为了能够在脚本中使用SSH命令连接到远程服务器,我们需要在本地服务器和远程服务器之间配置SSH免密登录。这可以通过以下步骤完成:

  1. 在本地服务器上,运行ssh-keygen命令生成一对SSH密钥。按照提示操作,您可以选择密钥的类型、长度和保存位置。如果您不确定如何选择,可以直接按回车键使用默认值。
  2. 运行ssh-copy-id命令将公钥复制到远程服务器。例如,如果您的远程服务器用户名为your_remote_username,IP地址为your_remote_ip,则可以运行以下命令:
ssh-copy-id your_remote_username@your_remote_ip

按照提示输入远程服务器的密码即可。

完成上述步骤后,您就可以在不输入密码的情况下通过SSH连接到远程服务器了。这意味着,在运行上面给出的脚本时,就不再需要再次输入密码了。

第四步:使用密码连接远程服务器(可选)

如果您不希望配置SSH免密登录,而是希望在脚本中使用密码来连接远程服务器,可以使用sshpass工具。sshpass是一个用于非交互式SSH密码认证的工具,可以让您在脚本中使用密码连接远程服务器。

首先,您需要在本地服务器上安装sshpass工具。在Ubuntu服务器上,您可以使用以下命令安装:

sudo apt-get install sshpass

安装完成后,您可以在脚本中使用sshpass命令来运行scp命令。例如,如果您的远程服务器密码为your_remote_password,则可以将以下行:

scp -r /path/to/build/folder $REMOTE_USER@$REMOTE_IP:$REMOTE_PATH

替换为:

sshpass -p your_remote_password scp -r /path/to/build/folder $REMOTE_USER@$REMOTE_IP:$REMOTE_PATH

请注意,将密码直接写入脚本是不安全的做法,因为任何人都可以查看脚本内容并获取密码。因此,建议您使用SSH免密登录来避免在脚本中直接使用密码。

如果您使用的是macOS系统,则需要手动编译源代码来安装sshpass工具。首先,您需要安装Xcode命令行工具,以便能够编译源代码。您可以使用以下命令安装:

xcode-select --install

然后,您需要从官方网站下载sshpass的源代码,并解压缩:

curl -O -L http://sourceforge.net/projects/sshpass/files/sshpass/1.09/sshpass-1.09.tar.gz
tar xvzf sshpass-1.09.tar.gz
cd sshpass-1.09

接下来,您可以使用以下命令编译并安装sshpass工具:

./configure
make
sudo make install

完成上述步骤后,您就可以在macOS系统上使用sshpass命令了。