在我的azure管道中,我曾经用以下方式替换appsettings.json文件中的变量:
我的appsettings文件定义了带有令牌值的变量
MyClass.java
在此版本中,定义了管道变量
请注意,某些变量在不同的应用程序之间是相似的。例如,在上面的示例中,我有两个应用程序(AuthorPortalApi和FileApi)都具有AzureAD ClientId,因此我必须在令牌中包括应用程序的名称,以便用正确的值替换它。
这一切都很好,但是现在我要更改为使用YAML发布管道。唯一的区别是,现在变量是在专用的YAML文件中定义的:
{
"AzureAd": {
"Instance": "__AAD_Instance__",
"Domain": "__AAD_Domain__",
"TenantId": "__AAD_TenantId__",
"ClientId": "__AAD_AuthorPortalApi_ClientId__"
}
我可以这样保存。但是我已经注意到,部署azure webapp variables:
- name: AAD_FilesApi_ClientId
value: some value
的任务提供了一种在appsettings.json中进行变量替换的方法:
AzureRmWebAppDeployment
在一个变量yaml文件中,我定义了这样的变量:
- task: AzureRmWebAppDeployment@4
displayName: 'Deploy my api'
inputs:
azureSubscription: 'my sub'
WebAppName: 'my-api'
packageForLinux: '$(workFolder)/my-api.zip'
JSONFiles: '**/appsettings.json'
它可以工作,但是就像我上面说的那样,如果两个应用程序在appsettings.json中具有相同的json结构,那么如何区分它们以替换为正确的值?
我已经看过documentation,但是它没有显示如何在YAML模板中定义变量。
答案 0 :(得分:1)
如果两个应用程序在appsettings.json中具有相同的json结构,那么如何区分它们以替换为正确的值?
我们可以为管道使用不同的变量创建两个 job 模板yaml。
模板AuthorPortalApi.yml
:
jobs:
- job: AuthorPortalApi
variables:
AAD_AuthorPortalApi_ClientId: xxx
模板FilesApi.yml
:
jobs:
- job: FilesApi
variables:
AAD_FilesApi_ClientId: xxx
您可以查看文档Define variables:Variable scopes了解更多详细信息。
另一方面,我们也可以仅将一个任务模板与Runtime parameters一起使用:
parameters:
- name: ClientId
displayName: AzureAd.ClientId
type: string
default: Vlaue_AAD_AuthorPortalApi_ClientId
values:
- Value_AAD_FilesApi_ClientId
- Value_OhterThings_ClientId
jobs:
- job: build
displayName: build
pool:
vmImage: ubuntu-latest
steps:
- script: echo The value is ${{ parameters.ClientId }}
在将管道排队或使用默认值Vlaue_AAD_AuthorPortalApi_ClientId
时选择该值:
测试结果:
更新:
如果以上方法都不适合您,那么我可以想到的方法是使用模板参数,但是此方法要求我们找到条件以将不同的参数传递给模板:
jobs:
- template: ClientId.yml
parameters:
ClientId: AAD_AuthorPortalApi_ClientId
condition: and(succeeded(), eq(variables['xx.xx'], 'xx'))
- template: ClientId.yml
parameters:
ClientId: AAD_FilesApi_ClientId
condition: and(succeeded(), eq(variables['yy.yy'], 'yy'))
请查看此文档Job, stage, and step templates with parameters,以了解更多详细信息。
答案 1 :(得分:0)