在公司中,我负责管理前后端代码的部署。随着项目数量的增加,我发现手动部署过程不仅耗时,而且容易出错。为了解决这个问题,我决定寻找一个自动化部署工具。经过一番搜索,我发现了 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,以便其他开发者可以使用。
资源链接
- npm包地址:deploy-cli-win-service
- GitHub仓库:lovisnd/deploy-cli-win-service
结语
通过这些步骤,我不仅提高了部署效率,还学习到了如何跨平台修改和优化工具。我希望我的经验能够帮助其他面临类似挑战的开发者。如果你对这个过程有任何疑问或建议,请随时联系我。