从管道 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了解更多详细信息。
我知道我可以使用环境变量在我的客户端 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了解更多详细信息。