我正在使用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。
答案 0 :(得分: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/
你仍然需要你的团队城市或章鱼来运行一个PowerShell线来启动webjob。这样,工作负载不再在章鱼服务器上了,但是你仍然需要对powershell系列进行相同的azure认证过程。 方法:http://www.nullfactory.net/2015/05/start-azure-webjobs-on-demand/
希望这可以帮到你。
答案 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
}