Blazor 网络的 CI/CD

问题描述

我想为 Blazor Web 客户端应用程序项目设置 CI/CD,以将内容复制到 Azure blob 存储。以下是 CI 任务

- task: VSBuild@1
  displayName: 'Build MyBlazor Web'
  inputs:
    solution: ./MyBlazorWeb/MyBlazorWeb.sln
    vsversion: 16.0
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)"'
    configuration: Release
    restoreNugetPackages: true


- task: DotNetCoreCLI@2
  displayName: 'Publishing MyBlazor Web...'
  inputs:
    command: publish
    publishWebProjects: true
    projects: ./MyBlazorWeb/MyBlazorWeb/MyBlazorWeb.csproj
    arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)/drop/MyBlazorWeb'
    artifactName: MyBlazor
    zipAfterPublish: false

- publish: $(Build.ArtifactStagingDirectory)
  artifact: drop

下面是我的CD任务

- task: AzureFilecopy@2
  displayName: 'copy MyBlazorWeb to Static Web Site'
  inputs:
    SourcePath: '$(build.artifactStagingDirectory)/drop/MyBlazorWeb'
    azureSubscription: '$(subscription)'
    Destination: AzureBlob
    storage: '$(storage-account-name)'
    ContainerName: '$web'

AZcopy 抛出以下错误

解析源位置“D:\a\1\a\drop\MyBlazorWeb”时出错:无法枚举目录 D:\a\1\a\drop\MyBlazorWeb\ 文件模式 *。 该系统找不到指定的路径。 (来自 HRESULT 的异常:0x80070003)有关详细信息,请键入“Azcopy /?:Source”或使用详细选项 /V。

我是否遗漏了任何其他任务或没有使用正确的源路径?如果这些任务/步骤不正确,我如何在 Azure 存储中托管 Blazor webassembly?

解决方法

您可以在 AzureFileCopy 任务的 fn register<F>(&mut self,cb: F) where F: for<'b> FnMut(&'b T) + 'a { self.callback = Box::new(cb); } 参数中指定 System.ArtifactsDirectory 变量。

SourcePath

- task: AzureFileCopy@2 displayName: 'Copy MyBlazorWeb to Static Web Site' inputs: SourcePath: '$(System.ArtifactsDirectory)/drop/MyBlazorWeb' azureSubscription: '$(subscription)' Destination: AzureBlob storage: '$(storage-account-name)' ContainerName: '$web' :发布部署期间工件下载到的目录。如果需要将工件下载到代理,则在每次部署之前清除该目录。与 Agent.ReleaseDirectory 和 System.DefaultWorkingDirectory 相同。 示例:System.ArtifactsDirectory

C:\agent\_work\r1\a 是代理范围的变量,因此您不能在发布管道中使用它。