从管道构建发布部署向 Blazor WebAssembly 传递参数

时间:2021-04-12 22:36:59

标签: azure-devops blazor-webassembly blazor-client-side azure-pipelines-yaml

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

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

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

我需要一种在部署之前修改 appSetting.json 文件的方法,或者像在“UseEnvironmentVariables()”中那样覆盖它...

我可以在 dockerizing 客户端时解决我的问题,比如

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'

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

感谢任何想提供帮助的人。

1 个答案:

答案 0 :(得分:0)

<块引用>

我需要一种在部署之前修改 appSetting.json 文件的方法,或者像在“UseEnvironmentVariables()”中那样覆盖它...

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

更新 1

感谢安德里亚的分享。

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