将值从json文件传递到Azure管道变量

xriantvc  于 2022-12-20  发布在  其他
关注(0)|答案(1)|浏览(145)

我在Azure中有一个管道,它是由仓库中特定文件夹上的提交触发的。在这个文件夹中有一个file.json,其中包含示例值:

{
    "example": {
        "vaule1": "one",
        "vaule2": "two",
}
}

如何将这些值传递给pipeline并将其设置为全局变量或参数

name: "test"

trigger: none

variables: 
  value1: ''
  value2: ''
  
jobs:

  - job: example_job
    displayName: 'example_job'
    condition: eq('${{ variables.value1}}', 'false')

    steps:
    - checkout: self
fykwrbwg

fykwrbwg1#

必须在触发管道之前设置全局管道变量和参数。不能在运行时设置它们。
作为一种解决方案,您可以尝试如下:
1.将一个作业设置为管道的第一个作业,在这个作业中,您可以尝试解析Json文件以获取值,并将值设置为管道的输出变量。
1.将其他作业设置为依赖于第一个作业,以便它们可以使用第一个作业中生成的输出变量。
有关详细信息,请参阅有关“输出变量"的文档。
下面是一个例子作为参考。

jobs:
- job: A
  displayName: 'Job A'
  pool:
    vmImage: windows-latest
  steps:
  - task: Bash@3
    displayName: 'Get Json values and set output variables'
    name: setOutput
    inputs:
      targetType: inline
      script: |
# Parse the Json file and get the values.
        vaule1=$(cat file.json | jq -r '.example.value1')
        vaule2=$(cat file.json | jq -r '.example.value2')
# Set the values as output variables.
        echo "##vso[task.setvariable variable=vaule1;isoutput=true]$vaule1"
        echo "##vso[task.setvariable variable=vaule2;isoutput=true]$vaule2"

- job: B
  displayName: 'Job B'
  dependsOn: A
  variables:
# Map the output variables as job level variables. 
    vaule1: $[ dependencies.A.outputs['setOutput.vaule1'] ]
    vaule2: $[ dependencies.A.outputs['setOutput.vaule2'] ]
  pool:
    vmImage: windows-latest
  steps:
  - task: Bash@3
    displayName: 'Print variables'
    inputs:
      targetType: inline
      script: |
        echo "vaule1 = $(vaule1)"
        echo "vaule2 = $(vaule2)"

相关问题