前端项目一键部署至Windows服务器

📘 开发记录 · 2024-09-18 · 119 人浏览

在公司中,我负责管理前后端代码的部署。随着项目数量的增加,我发现手动部署过程不仅耗时,而且容易出错。为了解决这个问题,我决定寻找一个自动化部署工具。经过一番搜索,我发现了 deploy-cli-service,但它主要支持Linux服务器。由于我们公司使用的是Windows服务器,我决定自行修改源码以适应Windows环境。

以下是我修改和部署的详细步骤:

步骤1:评估现有工具

  • 我发现 deploy-cli-service 工具不支持Windows服务器,因此决定对其进行修改。

步骤2:修改源码

  • 主要问题集中在SFTP操作和文件路径处理上,因为Windows和Linux在这些方面存在差异。

步骤3:编写备份和部署脚本

  • 我编写了一个函数 backupRemoteFile 来处理备份、删除和解压的过程。
const backupRemoteFile = async (config, index) => {
  try {
    const { windowsPath, bakDir } = config;
    const dirName = 'dist';
    const zipFileName = `${dirName}_${dayjs().format('YYYY-MM-DD_HH-mm-ss')}.zip`;
    console.log(`(${index}) 备份远程文件 ${underline(windowsPath)}`);
    const path = 'D:\\soft\\nginx-1.23.4\\nginx-1.23.4\\html';
    const destination = `${bakDir}\\${zipFileName}`;
    await ssh.execCommand(`cmd /c "cd /d ${windowsPath} && powershell -command "Compress-Archive -Path '${windowsPath}\\*' -DestinationPath '${destination}'; Get-ChildItem -Path . -Exclude 'dist.zip' | Remove-Item -Recurse -Force; Expand-Archive -Path 'dist.zip' -DestinationPath .; Remove-Item -Path 'dist.zip' -Force""`);
    succeed('备份成功');
    console.log(`备份成功,备份至 ${underline(`${bakDir}\\${zipFileName}`)},且原文件已被删除`);
  } catch (e) {
    console.error(e);
    process.exit(1);
  }
};

步骤4:测试修改

  • 在本地环境和测试服务器上测试修改后的脚本,确保其按预期工作。

步骤5:打包和上传项目

  • 将整个项目打包,并上传到npm,以便其他开发者可以使用。

资源链接

结语

通过这些步骤,我不仅提高了部署效率,还学习到了如何跨平台修改和优化工具。我希望我的经验能够帮助其他面临类似挑战的开发者。如果你对这个过程有任何疑问或建议,请随时联系我。

windows
Under CC BY NC-SA License.
Powered by Typecho | Theme by Jasmine
您是第 14405 位访客