在 Azure 应用服务和 Visual Studio 中自动化应用程序离线

问题描述 投票:0回答:1

我想使 App_Offline.htm 自定义且可更新,我正在使用 MSDeploy 以便从 Azure Pipeline 和 Visual Studio 2019 进行发布。Publish Works fins 在两者中。我的 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 azure-pipelines-release-pipeline webdeploy
1个回答
2
投票

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

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

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

并将 < EnableMSDeployAppOffline >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 发布管道中的使应用程序脱机:部署 Azure 应用服务任务

© www.soinside.com 2019 - 2024. All rights reserved.