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

时间:2016-04-14 17:06:32

标签: powershell azure azure-web-sites octopus-deploy

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

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

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

或者还有其他/更好的解决方案可以解决这个问题,而无需在构建服务器上的文件中保存凭据吗?

如果可能的话,我宁愿不使用FTP。

2 个答案:

答案 0 :(得分:1)

我会这样做:

  1. 在Azure中创建一个按需webjob并上传一个powershell脚本,该脚本可以清理Webapp的文件夹。尝试保持这个ps脚本简单,使用基本cmdlet命令,并非所有ps模块都将在azure中运行。 方法:https://blogs.msdn.microsoft.com/nicktrog/2014/01/22/running-powershell-web-jobs-on-azure-websites/

  2. 你仍然需要你的团队城市或章鱼来运行一个PowerShell线来启动webjob。这样,工作负载不再在章鱼服务器上了,但是你仍然需要对powershell系列进行相同的azure认证过程。 方法:http://www.nullfactory.net/2015/05/start-azure-webjobs-on-demand/

  3. 章鱼中的“运行Azure Powershell脚本”可帮助您加载Azure Powershell模块并执行Azure-Subscription技巧,因此您无需在脚本中包含库或重新进行身份验证。它仍然在本地运行,但第二步很适合。

    希望这可以帮到你。

答案 1 :(得分:0)

最后我决定使用FTP。虽然我非常喜欢Kai Zhao的建议,但我更倾向于在部署服务器上保留与自动部署相关的所有内容,而不必在不同的位置放置和维护脚本。

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

我使用此脚本进行实际删除并将其作为Octopus中的一个步骤运行:

  

$ AzureAppService是Octopus中的一个变量,它根据不同而变化   环境。

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
}