从管道 build-publish-deployment 将参数传递给 Blazor WebAssembly

Pass arguments to Blazor WebAssembly from pipeline build-publish-deployment

我知道我可以使用环境变量在我的客户端 Blazor WebAssembly 项目中创建(和使用)不同的 appSettings.json 文件。

我想实施一个更通用、更灵活的解决方案,我可以在其中开始管道部署,例如传递一个在整个部署过程中使用的后缀,以完全自定义它。

因此,例如,如果我有一个后端和 blazor webassembly 客户端的简单案例,将“31”作为参数传递将生成一个 web api 'api-31' 和一个客户端'blazor-client-31' 知道他必须连接到 'api-31'。

我需要一种在部署前修改 appSetting.json 文件的方法,或者像 'UseEnvironmentVariables()'...

中那样覆盖它

我可以在对客户端进行 docker 化时解决我的问题,比如

FROM base AS final
ARG apiprefix
WORKDIR /usr/share/nginx/html
COPY --from=build /src/publish/wwwroot/ .
COPY /WebApps/WebBlazor/nginx.conf .
RUN echo "{  \"apiprefix\": \"$apiprefixval\" }" > ExecutionContext.json

然后在客户端读取 json 文件。也许它不漂亮,但它很简单,而且很有效。

直接从管道发布和部署时,是否有类似的东西(如果不是更好的话)?如何在我用来托管 Blazor WebAssembly 的 Web 应用程序中编写 json 文件(可能包含一些 PowerShell 代码)?

实际上我使用这些步骤来发布和部署:

- task: DotNetCoreCLI@2
  displayName: 'Publish BlazorAssemblyClient'
  inputs:
    command: publish
    projects: '**/BlazorAssemblyClient.csproj'
    arguments: '--configuration $(buildConfiguration) --runtime win-x64 --output $(System.ArtifactsDirectory)/tempBlazorAssemblyClient'
    modifyOutputPath: true
    zipAfterPublish: true

- task: AzureRmWebAppDeployment@4
  displayName: 'Deploy BlazorAssemblyClient'
  inputs:
    ConnectionType: 'AzureRM'
    azureSubscription: '...'
    appType: 'webApp'
    WebAppName: $(blazorAppName)
    packageForLinux: '$(System.ArtifactsDirectory)/tempBlazorAssemblyClient/**/*.zip'

而且我看不出如何在此过程中插入任何自定义内容。

感谢任何愿意提供帮助的人。

I would need a way to modify the appSetting.json file before deployment, or override it like in 'UseEnvironmentVariables()'...

我们可以安装扩展 Replace Tokens,添加变量并将变量设置为机密,然后添加任务 Replace Tokens 来替换 appSetting.json 变量并在 Azure DevOps 管道中使用它。

更新1

感谢 Andrea 的分享。

有一种标准方法,仅使用部署步骤,其中包括转换功能,我们可以参考此doc了解更多详细信息。