编写定时执行npm run build并将构建结果通过SSH复制到远程服务器的脚本
2024-01-09 21:52:14
在本文中,我们将介绍如何编写一个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
命令将构建结果复制到远程服务器上。
您需要根据您的实际情况修改上述脚本中的变量值,并确保已安装npm
和scp
工具。
第二步:安排定时任务
接下来,我们需要安排一个定时任务来每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免密登录。这可以通过以下步骤完成:
- 在本地服务器上,运行
ssh-keygen
命令生成一对SSH密钥。按照提示操作,您可以选择密钥的类型、长度和保存位置。如果您不确定如何选择,可以直接按回车键使用默认值。 - 运行
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
命令了。