Azure Pipelines:使用 Azure App Service Deploy 排除文件夹
Azure Pipelines: Exclude folders using Azure App Service Deploy
我有一个 Azure DevOps Pipeline,其中包括一个 Azure App Service Deploy 任务 (AzureRmWebAppDeployment
),用于部署 ASP.NET核心3.1项目:
- task: AzureRmWebAppDeployment@4
inputs:
ConnectionType: 'AzureRM'
azureSubscription: 'Azure Subscription(01234567-89ab-cdef-0123-456789abcdef)'
appType: 'webApp'
WebAppName: 'MyStagingSite'
packageForLinux: '$(Build.ArtifactStagingDirectory)/**/*.zip'
enableCustomDeployment: true
DeploymentType: 'webDeploy'
enableXmlTransform: false
enableXmlVariableSubstitution: true
RemoveAdditionalFilesFlag: false
但是,Azure App Service 目标包含几个预先建立的文件夹中的文件,这些文件夹的管理独立于持续交付过程。我们想使用 Remove additional files at destination 标志 (RemoveAdditionalFilesFlag
),同时保留这些文件夹不变。
Disclaimer: I don't consider this a best practice and, in the future, we will be moving these files off to a separate storage location. Until then, I'd like to find a solution that will work resolve this.
在 Visual Studio 2019 中,我们通过使用 csproj
文件中的 MsDeploySkipRules
从发布过程中排除这些文件来实现此目的:
<Project Sdk="Microsoft.NET.Sdk.Web">
…
<ItemGroup>
<MsDeploySkipRules Include="CustomSkipFolder">
<ObjectName>dirPath</ObjectName>
<AbsolutePath>wwwroot\Uploads</AbsolutePath>
</MsDeploySkipRules>
</ItemGroup>
</Project>
这种方法适用于 Visual Studio,并以其 Web 部署发布过程而著称。 AzureRmWebAppDeployment
任务似乎不遵守这些规则,但是,即使使用 "Web Deploy" 部署方法 (DeploymentType
)。
有没有办法在使用 AzureRmWebAppDeployment
任务时兑现 MsDeploySkipRules
?如果没有,是否有办法提供在部署过程中应跳过或忽略的文件夹列表?或者,如果有另一个任务在发布到 Azure 应用服务时允许这些选项之一?
Note: I also posted this to the DevOps Beta, but as the site hasn't reached critical mass yet, I'm cross-posting it here.
Is there a way to honor the MsDeploySkipRules when using the AzureRmWebAppDeployment task?
不确定是否有应用 MsDeploySkipRules 的方法,但在部署过程中有跳过特定文件的现有方法。
详细信息请查看VSTS Build and release中的Exclude/Skip文件
.
按照上述主题中的建议,将 additional arguments
添加到您的任务以跳过特定文件。
在跳过参数中填写您的文件路径。有关语法的更多信息,请参见 Azure App Service Deploy task (press Ctrl+ F to search for additional arguments
) and Web Deploy Operation Settings。
请试一试,希望对您有所帮助。
正如@yang-shen-msft 在 中指出的那样,似乎没有办法遵守csproj
文件中定义的MSDeploySkipRules
。相反,可以通过定义 Azure App Service Deploy(AzureRmWebAppDeployment
) 任务。
由于 -skip
规则似乎没有任何官方文档,并且 the MSDeploy.exe
documentation that Azure Pipelines references 已过时,下面提供更多详细信息。
翻译 csproj
格式
首先,认识到当您通过 Visual Studio 部署项目时,它只是获取 csproj
文件中配置的 MSDeploySkipRules
并将它们添加到其内部调用msdeploy.exe
作为 -skip
规则。因此,给定 csproj
中定义的以下规则:
<Project Sdk="Microsoft.NET.Sdk.Web">
…
<ItemGroup>
<MsDeploySkipRules Include="CustomSkipFolder">
<ObjectName>dirPath</ObjectName>
<AbsolutePath>wwwroot\Uploads</AbsolutePath>
</MsDeploySkipRules>
</ItemGroup>
</Project>
-skip
规则解释为:
msdeploy.exe -skip:objectName=dirPath,absolutePath=wwwroot\Uploads
将其转换为 Azure App Service Deploy (AzureRmWebAppDeployment
) 任务,生成的 yml
可能如下所示:
- task: AzureRmWebAppDeployment@4
inputs:
ConnectionType: 'AzureRM'
azureSubscription: 'Azure Subscription'
appType: 'webApp'
WebAppName: 'MyStagingSite'
packageForLinux: '$(Build.ArtifactStagingDirectory)/**/*.zip'
enableCustomDeployment: true
DeploymentType: 'webDeploy'
enableXmlTransform: false
enableXmlVariableSubstitution: true
RemoveAdditionalFilesFlag: true
AdditionalArguments: '-skip:objectName=dirPath,absolutePath=wwwroot\Uploads'
请注意,可以在同一个 msdeploy.exe
调用中定义多个 -skip
规则。
AdditionalArguments: '-skip:objectName=dirPath,absolutePath=wwwroot\Uploads -skip:objectName=dirPath,absolutePath=wwwroot\Downloads'
-skip
规则文档
不幸的是,如上所述,似乎 没有关于 msdeploy.exe
的 -skip
规则的任何官方第一方文档。 2014 documentation acknowledges them, and provides two examples, but doesn't expand on the options. That said, way back in 2012, @richard-szalay wrote a useful article, "Demystifying MSDeploy skip rules”,它为需要额外控制的任何人提供了大量详细信息。
补充说明
ObjectName
指的是Web Deploy Provider,可用于更新的不仅仅是文件系统。
我正在将 ObjectName
设置为 dirPath
Web 部署提供程序,这样我就可以跳过整个 目录 。如果您想跳过 个文件 ,请改用 filePath
。
dirPath
和 filePath
都接受 正则表达式 在 AbsolutePath
中,可能允许遵循一致的重复规则要合并的模式。
AbsolutePath
实际上是相对于您的 发布根 ——例如,D:\home\site\wwwroot
在 Azure 应用服务上。
当我发布一个 ASP.NET 核心站点时,按照惯例,我的静态文件位于一个嵌套的 wwwroot
文件夹中,因此我的设置是:
absolutePath=wwwroot\Uploads
实际映射到:
D:\home\site\wwwroot\wwwroot\Uploads
我有一个 Azure DevOps Pipeline,其中包括一个 Azure App Service Deploy 任务 (AzureRmWebAppDeployment
),用于部署 ASP.NET核心3.1项目:
- task: AzureRmWebAppDeployment@4
inputs:
ConnectionType: 'AzureRM'
azureSubscription: 'Azure Subscription(01234567-89ab-cdef-0123-456789abcdef)'
appType: 'webApp'
WebAppName: 'MyStagingSite'
packageForLinux: '$(Build.ArtifactStagingDirectory)/**/*.zip'
enableCustomDeployment: true
DeploymentType: 'webDeploy'
enableXmlTransform: false
enableXmlVariableSubstitution: true
RemoveAdditionalFilesFlag: false
但是,Azure App Service 目标包含几个预先建立的文件夹中的文件,这些文件夹的管理独立于持续交付过程。我们想使用 Remove additional files at destination 标志 (RemoveAdditionalFilesFlag
),同时保留这些文件夹不变。
Disclaimer: I don't consider this a best practice and, in the future, we will be moving these files off to a separate storage location. Until then, I'd like to find a solution that will work resolve this.
在 Visual Studio 2019 中,我们通过使用 csproj
文件中的 MsDeploySkipRules
从发布过程中排除这些文件来实现此目的:
<Project Sdk="Microsoft.NET.Sdk.Web">
…
<ItemGroup>
<MsDeploySkipRules Include="CustomSkipFolder">
<ObjectName>dirPath</ObjectName>
<AbsolutePath>wwwroot\Uploads</AbsolutePath>
</MsDeploySkipRules>
</ItemGroup>
</Project>
这种方法适用于 Visual Studio,并以其 Web 部署发布过程而著称。 AzureRmWebAppDeployment
任务似乎不遵守这些规则,但是,即使使用 "Web Deploy" 部署方法 (DeploymentType
)。
有没有办法在使用 AzureRmWebAppDeployment
任务时兑现 MsDeploySkipRules
?如果没有,是否有办法提供在部署过程中应跳过或忽略的文件夹列表?或者,如果有另一个任务在发布到 Azure 应用服务时允许这些选项之一?
Note: I also posted this to the DevOps Beta, but as the site hasn't reached critical mass yet, I'm cross-posting it here.
Is there a way to honor the MsDeploySkipRules when using the AzureRmWebAppDeployment task?
不确定是否有应用 MsDeploySkipRules 的方法,但在部署过程中有跳过特定文件的现有方法。
详细信息请查看VSTS Build and release中的Exclude/Skip文件 .
按照上述主题中的建议,将 additional arguments
添加到您的任务以跳过特定文件。
在跳过参数中填写您的文件路径。有关语法的更多信息,请参见 Azure App Service Deploy task (press Ctrl+ F to search for additional arguments
) and Web Deploy Operation Settings。
请试一试,希望对您有所帮助。
正如@yang-shen-msft 在csproj
文件中定义的MSDeploySkipRules
。相反,可以通过定义 Azure App Service Deploy(AzureRmWebAppDeployment
) 任务。
由于 -skip
规则似乎没有任何官方文档,并且 the MSDeploy.exe
documentation that Azure Pipelines references 已过时,下面提供更多详细信息。
翻译 csproj
格式
首先,认识到当您通过 Visual Studio 部署项目时,它只是获取 csproj
文件中配置的 MSDeploySkipRules
并将它们添加到其内部调用msdeploy.exe
作为 -skip
规则。因此,给定 csproj
中定义的以下规则:
<Project Sdk="Microsoft.NET.Sdk.Web">
…
<ItemGroup>
<MsDeploySkipRules Include="CustomSkipFolder">
<ObjectName>dirPath</ObjectName>
<AbsolutePath>wwwroot\Uploads</AbsolutePath>
</MsDeploySkipRules>
</ItemGroup>
</Project>
-skip
规则解释为:
msdeploy.exe -skip:objectName=dirPath,absolutePath=wwwroot\Uploads
将其转换为 Azure App Service Deploy (AzureRmWebAppDeployment
) 任务,生成的 yml
可能如下所示:
- task: AzureRmWebAppDeployment@4
inputs:
ConnectionType: 'AzureRM'
azureSubscription: 'Azure Subscription'
appType: 'webApp'
WebAppName: 'MyStagingSite'
packageForLinux: '$(Build.ArtifactStagingDirectory)/**/*.zip'
enableCustomDeployment: true
DeploymentType: 'webDeploy'
enableXmlTransform: false
enableXmlVariableSubstitution: true
RemoveAdditionalFilesFlag: true
AdditionalArguments: '-skip:objectName=dirPath,absolutePath=wwwroot\Uploads'
请注意,可以在同一个 msdeploy.exe
调用中定义多个 -skip
规则。
AdditionalArguments: '-skip:objectName=dirPath,absolutePath=wwwroot\Uploads -skip:objectName=dirPath,absolutePath=wwwroot\Downloads'
-skip
规则文档
不幸的是,如上所述,似乎 没有关于 msdeploy.exe
的 -skip
规则的任何官方第一方文档。 2014 documentation acknowledges them, and provides two examples, but doesn't expand on the options. That said, way back in 2012, @richard-szalay wrote a useful article, "Demystifying MSDeploy skip rules”,它为需要额外控制的任何人提供了大量详细信息。
补充说明
ObjectName
指的是Web Deploy Provider,可用于更新的不仅仅是文件系统。我正在将
ObjectName
设置为dirPath
Web 部署提供程序,这样我就可以跳过整个 目录 。如果您想跳过 个文件 ,请改用filePath
。dirPath
和filePath
都接受 正则表达式 在AbsolutePath
中,可能允许遵循一致的重复规则要合并的模式。AbsolutePath
实际上是相对于您的 发布根 ——例如,D:\home\site\wwwroot
在 Azure 应用服务上。当我发布一个 ASP.NET 核心站点时,按照惯例,我的静态文件位于一个嵌套的
wwwroot
文件夹中,因此我的设置是:absolutePath=wwwroot\Uploads
实际映射到:
D:\home\site\wwwroot\wwwroot\Uploads