使用Appveyor在部署后擦除目标部署文件夹中的所有内容并重新启动应用程序的最佳实践

60次阅读
没有评论

问题描述

使用Appveyor进行部署,并希望在部署之前擦除目标文件夹中的所有内容,并在部署完成后重新启动应用程序。用户想知道在Appveyor中如何实现这个需求。目前用户认为可能的解决方案是使用PowerShell脚本通过SSH连接并清空文件夹,但不确定如何在脚本中实现重新启动应用程序。用户希望听到一些有经验的用户对这个解决方案的建议。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

在Appveyor中,可以使用before_deployafter_deploy脚本来实现在部署前擦除文件夹和部署后重新启动应用程序的需求。以下是具体步骤:
1. 首先,从Appveyor项目的设置页面获取SSH公钥,并将其添加到Ubuntu服务器上的authorized_keys文件中,以便从Appveyor登录。
2. 在Appveyor的配置文件中,使用以下命令来在部署之前擦除目标文件夹:

before_deploy:
  - ssh user@host -t "rm -r -v /pathtofolder/*;exit; bash --login"

这个命令将通过SSH连接到服务器,并使用rm命令擦除目标文件夹中的所有内容。
3. 关于重新启动应用程序,你可以尝试在after_deploy脚本中使用以下命令:

after_deploy:
  - ssh user@host -t "systemctl restart myapp"

这个命令将通过SSH连接到服务器,并使用systemctl restart命令重新启动应用程序。然而,需要注意的是,after_deploy脚本会在部署完成后立即执行,而不会等待上传完成。但根据用户的描述,似乎在文件被替换或重新加载后,应用程序会自动重新启动。
请注意,为了安全起见,建议在存储服务器凭据时使用安全变量。

方案2

使用脚本或工具来管理部署过程可能会增加复杂性,并且需要确保脚本中的命令正确执行。
另一种方法是编写脚本或使用工具来控制部署过程。你可以使用SSH连接来远程执行命令。以下是一个简单的示例脚本,可以在部署之前擦除目标文件夹并重新启动应用程序:

#!/bin/bash
# 清空目标文件夹
ssh user@host "rm -r -v /pathtofolder/*"
# 重新启动应用程序
ssh user@host "systemctl restart myapp"

在这个示例中,我们使用SSH连接来执行命令。首先,使用rm命令擦除目标文件夹中的所有内容,然后使用systemctl restart命令重新启动应用程序。
请注意,使用脚本或工具来管理部署过程可能会增加复杂性,并且需要确保脚本中的命令正确执行。

正文完