变量值未注入 local.settings.json

Variable values are not injected into local.settings.json

我有一个 Azure Functions 项目。它包括 local.settings.json 配置文件和一些秘密。这些值由 xUnit 测试项目检索和使用。在 Visual Studio 上 运行 时一切正常,但在 Azure 构建管道中,未注入值,并且文件包含原始占位符值。 local.settings.json 文件将生成操作作为“内容”,并将复制到输出目录作为“如果更新则复制”。 在管道中,我使用文件转换任务来注入值。 这是我的管道的一部分:

        - task: FileTransform@1
        inputs:
          folderPath: '$(System.DefaultWorkingDirectory)/ProjectName'
          fileType: 'json'
          targetFiles: 'local.settings.json'
          
      - task: DotNetCoreCLI@2
        displayName: 'DotNet Build Projects'
        inputs:
          command: 'build'
          projects: '**/*.csproj'
          arguments: --configuration $(buildConfiguration)          
         
      - task: DotNetCoreCLI@2
        displayName: 'Run Unit Tests'
        inputs:
          command: 'test'
          projects: '**/ProjectName.Tests/*.csproj'
          arguments: '--configuration $(buildConfiguration) /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:CoverletOutput=$(Build.SourcesDirectory)/TestResults/Coverage/'
          publishTestResults: true          

我做错了什么?

不确定 json 文件的结构以及变量的定义方式。但是根据你的描述,变量值并没有注入local.settings.json。似乎变量定义不正确,或者在 运行 管道期间找不到 json 文件。

targetFiles 字段中直接或相对地提供 json 文件路径,因此如果您在第一个字段中给出的文件夹路径中有多个 appsettings 文件,那么给出相对路径将会看到所有设置 json 文件如下:'**/settings.json'.

File transform task 将根据与设置 json 文件中的字段匹配的变量名称从可用变量更新设置 json 文件中的字段。例如,将下面的 json 文件作为我们的应用程序设置 json 文件:

{
    "customFunctions": [],
    "importedLibraries": [],
    "firstResource": "",
    "groupOne": {
        "firstFieldInOne": "Test",
        "name": "DemoApp"
    },
    "groupTwo": {
        "nameTwo": "TestValue2",
        "idTwo": ""
    },
    "runtimeSettings": {
        "storage": "",
        "telemetry": {
            "instrumentationKey": ""
        }
    }
}

在这个 appsettings 文件中,如果你想替换 json 文件的父元素,那么你应该在 yaml 管道中添加变量,或者作为带有元素名称的管道变量——例如,要更新 'firstResource' 字段,您需要创建一个名称为 firstResource.

的变量

如果您想更新内部子元素,则必须创建变量,其路径值由点分隔 (.)。例如,要更新作为元素 groupOne 的子元素的 firstFieldInOne 字段,我们必须创建一个名称为 :groupOne.firstFieldInOne

的变量

因此,对于以上两个值更新,我们必须在 yaml 或管道变量中创建以下变量:

variables:
  firstResource: "firstResourceValue"
  groupOne.firstFieldInOne: "FirstField Value"