变量值未注入 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"
我有一个 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"