如何使用 Octopus Deploy 删除 Azure App Service 网站上的文件夹

How to delete a folder on an Azure App Service website using Octopus Deploy

我正在使用 TeamCity 和 Octopus Deploy(3.3.6 版)为 Sitecore 网站设置自动部署项目。

在使用 "Deploy an Azure Web App" 步骤部署到应用服务之前,我想删除该站点上的一个文件夹(/site/wwwroot/App_Config/Include 或 D:\home\site\wwwroot\App_Config\Include)。

Octopus 是否有内置机制来执行此操作?我曾尝试使用 Powershell 脚本,但 运行s 在服务器上,而不是在 Azure 上。有没有办法在部署时在 Azure 上 运行 Powershell 脚本? 或者我可以使用 "Run an Azure Powershell Script" 在 App Service 网站上进行文件操作而无需进行身份验证(因为 Octopus 正在进行身份验证)?

或者是否有任何 other/better 解决方案来解决此问题而无需将凭据保存在构建服务器上的文件中?

如果可能的话,我不想为此使用 FTP。

我会这样做:

  1. 在 Azure 中创建一个按需 webjob 并上传一个 powershell 脚本,该脚本可以清理文件夹到您的 Webapp。尽量保持此 ps 脚本简单,使用基本 cmdlet 命令,并非所有 ps 模块都会 运行 天蓝色。 如何:https://blogs.msdn.microsoft.com/nicktrog/2014/01/22/running-powershell-web-jobs-on-azure-websites/

  2. 您仍然需要您的 teamcity 或章鱼到 运行 一个 powershell 行来启动网络作业。这样,工作负载就不再在章鱼服务器上了,但您仍然需要对 powershell 行执行相同的 azure 身份验证过程。 如何:http://www.nullfactory.net/2015/05/start-azure-webjobs-on-demand/

"Run an Azure Powershell Script" 在 octopus helps 中加载 Azure Powershell 模块并执行 Azure 订阅技巧,因此您不需要在脚本中包含库或重新验证。它在本地仍然 运行,但第 2 步非常适合。

希望对您有所帮助。

最后还是决定用FTP。虽然我很喜欢赵凯的建议,但我更愿意把所有与自动化部署相关的东西都放在部署服务器上,而不是在不同的地方放置和维护脚本。

我使用了以下 Powershell FTP 客户端模块并将其安装在我们的构建服务器上:https://gallery.technet.microsoft.com/scriptcenter/PowerShell-FTP-Client-db6fe0cb

我使用这个脚本来进行实际的删除,运行它作为 Octopus 中的一个步骤:

$AzureAppService is a variable in Octopus which changes depending on the environment.

Import-Module PSFTP 
$username = $AzureAppService
$password = ConvertTo-SecureString "************" -AsPlainText -Force
$cred = new-object -typename System.Management.Automation.PSCredential `
         -argumentlist $username, $password
$ftpserver = "***url_to_your_ftp_server**"
$folderToDelete = "/site/wwwroot/App_Config/Include"
Set-FTPConnection -Credentials $cred -Server $ftpserver -Session MyFTPSession -UsePassive 
$Session = Get-FTPConnection -Session MyFTPSession
Try
{
    Remove-FTPItem -Session $Session -Path $folderToDelete -Recurse 
}
Catch
{
    Write-Warning "There was an error while trying to remove the folder:"
    Write-Warning $_.Exception.Message
    Write-Warning $_.Exception.ItemName
}