【问题标题】:Automatize App Offline in Azure App Service and Visual Studio在 Azure 应用服务和 Visual Studio 中自动化应用脱机
【发布时间】:2019-12-03 16:54:52
【问题描述】:

我想让 App_Offline.htm 自定义和可更新我正在使用 MSDeploy 以便从 Azure Pipeline 和 Visual Studio 2019 发布。在两者中发布 Works 鳍。我的 Web 项目在 .Net Core 2.2 上

我的问题是我想使用 MSDeploy 使应用程序脱机,在发布前和删除 app_offline.htm 在发布后。目前,我启用MSDeployAppOffline,它显示默认的“维护中”秒。直到 App_offline.htm 上传到应用服务中。然后我用 Kudu 在线删除它。

后来我决定使用 MSDeploy CMDLine 远程添加和删除文件 app_offline.htm、beforePublish 和 AfterPublish ...这也有效,我必须在发布管道和 Visual Studio 中以纯文本格式保存我的密码,以各种方式“批处理脚本,PowerShell 脚本......”。

我的发布资料

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>MSDeploy</WebPublishMethod>
    <PublishProvider>AzureWebSite</PublishProvider>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <SiteUrlToLaunchAfterPublish>mySiteUrl</SiteUrlToLaunchAfterPublish>
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
    <ExcludeApp_Data>False</ExcludeApp_Data>
    <ProjectGuid>GUID</ProjectGuid>
    <MSDeployServiceURL>myapp.scm.azurewebsites.net:443</MSDeployServiceURL>
    <DeployIisAppPath>increditing-preview</DeployIisAppPath>
    <RemoteSitePhysicalPath />
    <SkipExtraFilesOnServer>True</SkipExtraFilesOnServer>
    <MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>
    <EnableMSDeployBackup>True</EnableMSDeployBackup>
    <UserName>$myapp</UserName>
    <_SavePWD>True</_SavePWD>
    <_DestinationType>AzureWebSite</_DestinationType>
    <EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>
    <MSDeployUseChecksum>true</MSDeployUseChecksum>
    <MSDeployPath Condition="'$(MSDeployPath)'==''">
       $(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\IISExtensions\MSDeploy\3@InstallPath)</MSDeployPath>
    <MSDeployExe Condition=" '$(MSDeployExe)'=='' ">$(MSDeployPath)msdeploy.exe</MSDeployExe>
    <DeleteCMD>
      "$(MSDeployExe)" -verb:delete -dest:contentPath="$(DeployIisAppPath)/App_offline.htm",ComputerName="https://$(DeployIisAppPath).scm.azurewebsites.net/msdeploy.axd?site=$(DeployIisAppPath)",UserName="$(UserName)",Password="Password",IncludeAcls='False',AuthType='Basic'
    </DeleteCMD>
  </PropertyGroup>
  <Target Name="CustomActionsAfterPublish" AfterTargets="AfterPublish">
    <PropertyGroup>
    </PropertyGroup>
    <Message Text="Inside AfterPublish" Importance="high" />

    <!-- MSDeploy does not work  -->
    <!--<MSDeploy Verb="delete"
              Source="@(MsDeploySourceProviderSetting)"
              Destination="contentPath=myapp/App_Offline.htm,computername=$(MsDeployServiceUrl)"
              AllowUntrusted="$(AllowUntrustedCertificate)"
              UseChecksum="$(MSDeployUseChecksum)"
              UserAgent="$(_MSDeployUserAgent)"
              ExePath="$(MSDeployPath)" />-->
     <!-- Executing this command I have to use my Password in Pain Text   -->
    <Exec Command="$(DeleteCMD)" ></Exec>

   
  </Target>
</Project>

【问题讨论】:

    标签: .net-core azure-devops azure-web-app-service msdeploy azure-pipelines-release-pipeline


    【解决方案1】:

    https://github.com/projectkudu/kudu/issues/2949

    为了避免 Kudu 问题,我要做的就是:

    在我的 Azure 应用服务中添加应用程序设置

    并将 true 添加到我的发布配置文件中。

        <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
          <PropertyGroup>
            <WebPublishMethod>MSDeploy</WebPublishMethod>
            <PublishProvider>AzureWebSite</PublishProvider>
            <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
            <LastUsedPlatform>Any CPU</LastUsedPlatform>
            <SiteUrlToLaunchAfterPublish>mySiteUrl</SiteUrlToLaunchAfterPublish>
            <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
            <ExcludeApp_Data>False</ExcludeApp_Data>
            <ProjectGuid>GUID</ProjectGuid>
            <MSDeployServiceURL>myapp.scm.azurewebsites.net:443</MSDeployServiceURL>
            <DeployIisAppPath>increditing-preview</DeployIisAppPath>
            <RemoteSitePhysicalPath />
            <SkipExtraFilesOnServer>True</SkipExtraFilesOnServer>
            <MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>
            <EnableMSDeployBackup>True</EnableMSDeployBackup>
            <UserName>$myapp</UserName>
            <_SavePWD>True</_SavePWD>
            <_DestinationType>AzureWebSite</_DestinationType>
            /// EnableMSDeployAppOffline 
            <EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>
            <MSDeployUseChecksum>true</MSDeployUseChecksum>
    
    </Project>
    

    并在 Azure Release Pipeline 中勾选 Take App Offline: Deploy Azure App Service Task

    【讨论】:

    • 感谢您在这里分享您的解决方案,您可以接受它作为答案,这样可以帮助遇到相同问题的其他社区成员。祝您有美好的一天。
    • 我认为如果我想在azure应用服务部署之前执行其他部署步骤,我必须手动创建app_offline.htm? (如数据库更新)
    猜你喜欢
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多