代码之家  ›  专栏  ›  技术社区  ›  Sam

AzureRmWebAppDeployment任务中的Azure:appsettings.json变量替换

  •  0
  • Sam  · 技术社区  · 6 年前

    1. My appsettings文件使用标记值定义变量

       {
        "AzureAd": {
        "Instance": "__AAD_Instance__",
        "Domain": "__AAD_Domain__",
        "TenantId": "__AAD_TenantId__",
        "ClientId": "__AAD_AuthorPortalApi_ClientId__"
       }
      
    2. 在版本中,定义了管道变量

    enter image description here

    1. 标记器任务在发布管道的开头运行,并用正确的值替换标记。

    请注意,一些变量在不同的应用程序中是相似的 . 例如,上面我有两个应用程序(AuthorPortalApi和FileApi),它们都有AzureAD ClientId,因此我必须在令牌中包含应用程序的名称,以便用正确的值替换它。

    这一切都非常有效,但现在我正在改用YAML发布管道。唯一的区别是,现在变量在专用YAML文件中定义:

      variables:
         - name: AAD_FilesApi_ClientId
         value: some value
    

    我可以保持这样。但是我注意到部署azure webapp的任务 AzureRmWebAppDeployment

      - task: AzureRmWebAppDeployment@4
      displayName: 'Deploy my api'
      inputs:
        azureSubscription: 'my sub'
        WebAppName: 'my-api'
        packageForLinux: '$(workFolder)/my-api.zip'
        JSONFiles: '**/appsettings.json'
    

    variables:
    - name: AzureAd.ClientId
    value: some value
    

    这是可行的,但正如我上面所说的,如果两个应用程序在appsettings.json中具有相同的json结构,那么如何区分它们以用正确的值替换?

    documentation ,但它没有显示如何在YAML模板中定义变量。

    0 回复  |  直到 6 年前
        1
  •  1
  •   Leo Liu    6 年前

    如果两个应用程序在appsettings.json中具有相同的json结构,那么如何区分它们以用正确的值替换?

    我们可以创造两个 工作 具有不同变量的管道的模板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 :

    enter image description here

    enter image description here

    更新:

    如果上述方法都不适合您,那么我可以想到的方法是使用模板参数,但这种方法需要我们找到一个条件,将不同的参数传递给模板:

    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

        2
  •  0
  •   Sam    6 年前

    最后,我决定在library选项卡中使用变量组:

    enter image description here

    然后在我的Yaml管道中,我只是根据正在运行的阶段引用了正确的组:

    variables: 
    - group: 'dev'