【问题标题】:Visual Studio Online / Azure stopping and starting web applications using PowershellVisual Studio Online / Azure 使用 Powershell 停止和启动 Web 应用程序
【发布时间】:2016-01-30 02:16:48
【问题描述】:

我正在使用 Visual Studio Online 的构建工具从单个解决方案部署 Web 应用程序。我偶尔会遇到文件锁定问题。

错误:Web 部署无法修改目标上的文件“Microsoft.CodeAnalysis.CSharp.dll”,因为它已被外部进程锁定。

经过一番谷歌搜索,我相信“修复”是在部署到 Azure 之前停止 Web 应用程序,然后再启动它。听起来很合法。

但是,似乎没有直接在 VSO 的构建定义上执行此操作的直接方法。我创建了一个“Azure Powershell”构建任务,但它需要来自存储库的 PS1 文件。它似乎不允许我从这里运行 Azure Powershell 命令(例如 Stop-AzureWebsite)。我的团队创建了一个解决方法,其中我们有一个“run.ps1”,它只执行您作为参数传递的命令,但我们都不满意。

我们缺少什么?必须有一种更简单的方法来执行此操作,而无需将 PS1 脚本签入源代码管理。

【问题讨论】:

    标签: powershell azure azure-devops


    【解决方案1】:

    您是否使用了为您的包设置正确 msbuild 参数的构建部署模板?你可以看看here。我会使用该模板创建一个构建,看看你是否有同样的问题。如果是这样,请在 Twitter @DonovanBrown 上联系我,我会看看我是否能弄清楚发生了什么。

    【讨论】:

    • 是的,但是最近这个项目在 Azure deploys 上遇到了这个错误:##[error]Web Deploy cannot modify the file 'Microsoft.CodeAnalysis.CSharp.dll' on the destination because it is被外部进程锁定。为了使发布操作成功,您可能需要重新启动应用程序以释放锁定,或者在下次尝试发布时为 .Net 应用程序使用 AppOffline 规则处理程序。 ##[错误] 了解更多信息:go.microsoft.com/fwlink/?LinkId=221672#ERROR_FILE_IN_USE
    • 附带说明,我真的不想在项目的源代码控制中检查 Azure 部署信息(以 Grunt 脚本或其他形式)。我宁愿将其与我的构建定义隔离开来。
    • 我还发现了这个关于 AppOffline 规则的链接 (iis.net/learn/publish/deploying-application-packages/…)。这是我可以在 Azure Web 应用部署/附加参数步骤中传递的内容吗?
    • 我会确保我们的 Build PM 知道。
    • 太棒了,谢谢!我也在尝试在 Azure 部署步骤中添加 -DoNotDelete 标志。我不认为这是这个标志的意图,或者即使它会产生影响,但是,嘿,这是可以尝试的。由于问题有些随机,如果问题仍然存在,我会在这里再次发布。
    【解决方案2】:

    作为一项规则,最好将部署软件所需的任何脚本或命令作为构建的一部分检查到源代码管理中。然后,它们可以轻松地重复运行,只需在构建级别进行少量配置。这提供了一致性和透明度。

    更好的是在构建过程中输出部署脚本并使用发布管理工具来控制实际部署。

    尽管将配置作为代码是所有开发和运营团队都应该遵守的准则。

    【讨论】:

    • 这当然是一种观点 =)
    【解决方案3】:

    检查您是否在“Web Deploy Package”路径上使用“/”而不是“\”作为文件夹分隔符。

    即改变

    $(System.DefaultWorkingDirectory)/My Project/drop/MyFolder/MyFile.zip
    

    $(System.DefaultWorkingDirectory)\My Project\drop\MyFolder\MyFile.zip
    

    我注意到这是我收到错误的那个和其他错误之间的唯一区别(我添加的重新启动步骤没有帮助)。一旦我修改了路径,我就让它工作了。

    听起来很糟糕,但解决了我的问题。

    【讨论】:

      【解决方案4】:

      我通过从 Visual Studio Marketplace 安装 Azure App Services - Start and Stop extension 解决了这个问题。
      安装后,它将允许您使用Azure AppServices StopAzure AppServices Start 任务将Deploy Website to Azure 任务包装在您的发布定义中,从而有效地消除锁定问题。

      【讨论】:

      • 不幸的是,我无法轻松验证这一点,因为我们已迁移到 Jenkins 服务器 =/。不过,这看起来是合法的,所以我会将此标记为已回答。当我看的时候,扩展只有 3/5 星,但它看起来也很新。希望问题能尽快解决。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-16
      • 1970-01-01
      • 2019-11-03
      • 2010-11-02
      • 2015-11-26
      • 1970-01-01
      相关资源
      最近更新 更多