使用策略不适用于 AzureRmWebAppDeployment@4
using strategy does not work for AzureRmWebAppDeployment@4
我开始使用策略 runonce yaml 架构,因此我可以将环境标签添加到我的发布中并添加批准步骤。 https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=azure-devops&tabs=schema
但是这样做 AzureRmWebAppDeployment@4 步以下面的格式部署整个文件
/site/wwwroot/mywebApi/Content/D_C/a/1/s/src/mywebApi/obj/Release/Package/PackageTmp/
而不是将包解压到 /site/wwwroot/mywebApi/
这曾经在我不使用策略时有效
这曾经有效
jobs:
- job: Deploy
variables:
vmImage: 'windows-latest'
pool:
vmImage: $(vmImage)
displayName: 'Deploy ${{ parameters.project }} ${{ parameters.envName }}'
continueOnError: "false"
steps:
- task: DownloadBuildArtifacts@0
inputs:
buildType: 'current'
downloadType: 'single'
artifactName: '${{ parameters.project }}${{ parameters.envName }}'
downloadPath: '$(build.artifactStagingDirectory)'
- task: AzureRmWebAppDeployment@4
inputs:
ConnectionType: 'AzureRM'
azureSubscription: '****Azure'
appType: 'webApp'
WebAppName: '${{ parameters.webAppName }}'
deployToSlotOrASE: true
ResourceGroupName: '****'
SlotName: '${{ parameters.slotName }}'
VirtualApplication: '${{ parameters.virtualApplication }}'
packageForLinux: '$(build.artifactStagingDirectory)/**/*.zip'
这不起作用,但这是我想要使用环境标记发布的内容
jobs:
# track deployments on the environment
- deployment: DeployWeb
displayName: deploy paystub Web App
environment: ${{ parameters.envName }}
variables:
vmImage: 'windows-latest'
pool:
vmImage: $(vmImage)
continueOnError: "false"
strategy:
runOnce:
deploy:
steps:
- task: DownloadBuildArtifacts@0
inputs:
buildType: 'current'
downloadType: 'single'
artifactName: '${{ parameters.project }}${{ parameters.envName }}'
downloadPath: '$(build.artifactStagingDirectory)'
- task: AzureRmWebAppDeployment@4
inputs:
ConnectionType: 'AzureRM'
azureSubscription: '***Azure'
appType: 'webApp'
WebAppName: '${{ parameters.webAppName }}'
deployToSlotOrASE: true
ResourceGroupName: '*****'
SlotName: '${{ parameters.slotName }}'
VirtualApplication: '${{ parameters.virtualApplication }}'
packageForLinux: '$(build.artifactStagingDirectory)/**/*.zip'
我希望新步骤也将代码部署到
这个文件夹
打包到 /site/wwwroot/mywebApi/
而不是做一些 kudu 复制到
/site/wwwroot/mywebApi/Content/D_C/a/1/s/src/mywebApi/obj/Release/Package/PackageTmp/
我能够重现相同的场景。不幸的是,我没有找到通过配置任务 AzureRmWebAppDeployment 来修复它的方法。该任务似乎自动使用 kudu 将文件复制到 Azure App 服务,而 msdeploy 用于在非策略管道中部署文件。您可以报告此问题 here。
我通过更改 vsbuild 任务的 msbuild 参数并添加 zip 存档任务找到了解决方法。检查以下内容:
使用 /t: publish
将构建发布到 $(build.artifactstagingdirectory)\publish
文件夹,以便在 ArchiveFiles
任务中压缩。
- task: VSBuild@1
displayName: 'Build solution **\*.sln'
inputs:
msbuildArgs: '/t:publish /p:outputpath="$(build.artifactstagingdirectory)\"'
platform: '$(BuildPlatform)'
configuration: '$(BuildConfiguration)'
clean: true
restoreNugetPackages: true
使用 archiveFiles
任务压缩上述步骤中 \publish
文件夹中的所有文件。
- task: ArchiveFiles@2
inputs:
rootFolderOrFile: '$(Build.ArtifactStagingDirectory)\publish\*'
includeRootFolder: true
archiveType: 'zip'
archiveFile: '$(Build.ArtifactStagingDirectory)/package/$(Build.BuildId).zip'
replaceExistingArchive: true
使用 PublishBuildArtifacts
任务发布上述步骤
创建的 zip 文件
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: drop'
inputs:
pathtoPublish: '$(Build.ArtifactStagingDirectory)\package\'
artifactName: 'strategy'
通过上述步骤,在 Deploy 阶段下载的 zip 文件将只包含已部署的代码。
希望以上步骤对您有所帮助。
我开始使用策略 runonce yaml 架构,因此我可以将环境标签添加到我的发布中并添加批准步骤。 https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=azure-devops&tabs=schema
但是这样做 AzureRmWebAppDeployment@4 步以下面的格式部署整个文件
/site/wwwroot/mywebApi/Content/D_C/a/1/s/src/mywebApi/obj/Release/Package/PackageTmp/
而不是将包解压到 /site/wwwroot/mywebApi/
这曾经在我不使用策略时有效
这曾经有效
jobs:
- job: Deploy
variables:
vmImage: 'windows-latest'
pool:
vmImage: $(vmImage)
displayName: 'Deploy ${{ parameters.project }} ${{ parameters.envName }}'
continueOnError: "false"
steps:
- task: DownloadBuildArtifacts@0
inputs:
buildType: 'current'
downloadType: 'single'
artifactName: '${{ parameters.project }}${{ parameters.envName }}'
downloadPath: '$(build.artifactStagingDirectory)'
- task: AzureRmWebAppDeployment@4
inputs:
ConnectionType: 'AzureRM'
azureSubscription: '****Azure'
appType: 'webApp'
WebAppName: '${{ parameters.webAppName }}'
deployToSlotOrASE: true
ResourceGroupName: '****'
SlotName: '${{ parameters.slotName }}'
VirtualApplication: '${{ parameters.virtualApplication }}'
packageForLinux: '$(build.artifactStagingDirectory)/**/*.zip'
这不起作用,但这是我想要使用环境标记发布的内容
jobs:
# track deployments on the environment
- deployment: DeployWeb
displayName: deploy paystub Web App
environment: ${{ parameters.envName }}
variables:
vmImage: 'windows-latest'
pool:
vmImage: $(vmImage)
continueOnError: "false"
strategy:
runOnce:
deploy:
steps:
- task: DownloadBuildArtifacts@0
inputs:
buildType: 'current'
downloadType: 'single'
artifactName: '${{ parameters.project }}${{ parameters.envName }}'
downloadPath: '$(build.artifactStagingDirectory)'
- task: AzureRmWebAppDeployment@4
inputs:
ConnectionType: 'AzureRM'
azureSubscription: '***Azure'
appType: 'webApp'
WebAppName: '${{ parameters.webAppName }}'
deployToSlotOrASE: true
ResourceGroupName: '*****'
SlotName: '${{ parameters.slotName }}'
VirtualApplication: '${{ parameters.virtualApplication }}'
packageForLinux: '$(build.artifactStagingDirectory)/**/*.zip'
我希望新步骤也将代码部署到 这个文件夹 打包到 /site/wwwroot/mywebApi/
而不是做一些 kudu 复制到
/site/wwwroot/mywebApi/Content/D_C/a/1/s/src/mywebApi/obj/Release/Package/PackageTmp/
我能够重现相同的场景。不幸的是,我没有找到通过配置任务 AzureRmWebAppDeployment 来修复它的方法。该任务似乎自动使用 kudu 将文件复制到 Azure App 服务,而 msdeploy 用于在非策略管道中部署文件。您可以报告此问题 here。
我通过更改 vsbuild 任务的 msbuild 参数并添加 zip 存档任务找到了解决方法。检查以下内容:
使用 /t: publish
将构建发布到 $(build.artifactstagingdirectory)\publish
文件夹,以便在 ArchiveFiles
任务中压缩。
- task: VSBuild@1
displayName: 'Build solution **\*.sln'
inputs:
msbuildArgs: '/t:publish /p:outputpath="$(build.artifactstagingdirectory)\"'
platform: '$(BuildPlatform)'
configuration: '$(BuildConfiguration)'
clean: true
restoreNugetPackages: true
使用 archiveFiles
任务压缩上述步骤中 \publish
文件夹中的所有文件。
- task: ArchiveFiles@2
inputs:
rootFolderOrFile: '$(Build.ArtifactStagingDirectory)\publish\*'
includeRootFolder: true
archiveType: 'zip'
archiveFile: '$(Build.ArtifactStagingDirectory)/package/$(Build.BuildId).zip'
replaceExistingArchive: true
使用 PublishBuildArtifacts
任务发布上述步骤
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: drop'
inputs:
pathtoPublish: '$(Build.ArtifactStagingDirectory)\package\'
artifactName: 'strategy'
通过上述步骤,在 Deploy 阶段下载的 zip 文件将只包含已部署的代码。
希望以上步骤对您有所帮助。