【问题标题】:Access to the object’s property created from the JSON in the Github actions访问从 Github 操作中的 JSON 创建的对象的属性
【发布时间】:2021-07-28 09:08:51
【问题描述】:

有人能解释一下如何在动作中访问对象的属性吗? object.property 或 $object.property 或 ${object.property} 或 ${{object.property}} 不起作用。

我使用 fromJson() 方法从 JSON 文件中的数据创建了一个对象:

  - name: "Get env data"
    id: get_env_data
    run: |
      JSON=$(jq --arg inputEnv "${{ github.event.inputs.env_to_deploy }}" 'map(. | select(.deployEnv==$inputEnv) ) | .[0]' .github/workflows/test.json)
      JSON="${JSON//$'\n'/''}"
      JSON="${JSON//$'\r'/''}"
      JSON="${JSON//$'\s+'/''}"
      echo "JSON=$JSON"
      echo "::set-output name=deployment_env::$JSON"
    
  - name: "Set env data"
    run: |
      env_data=${{ fromJson(steps.get_env_data.outputs.deployment_env) }}
      echo "env_data=$env_data"
      echo $env_data.port

JSON文件是这样的:

[
    {
        "env":"dev",
        "port":"8000",
        "db_host":"DEV_DB_HOST"
    },
    {
        "env":"dev2",
        "port":"8002",
        "db_host":"DEV2_DB_HOST"
    },
    {
        "env":"dev3",
        "port":"8003",
        "db_host":"DEV3_DB_HOST"
    }
]

【问题讨论】:

  • 看起来很像this question。您是否尝试直接使用:echo "${{fromJson(steps.get_env_data.outputs.deployment_env)}}" 来查看是否正确检索了 json?似乎也可以直接使用这样的东西:echo "${{fromJson(steps.get_env_data.outputs.deployment_env).[0].port}}"(因为它是一个列表,我认为您将无法在不通知位置的情况下直接访问该端口)。
  • 结果,我收到了有效的 JSON 作为对象而不是数组(| .[0] 完成了这项工作)。 echo "JSON=$JSON" 输出正确的 JSON。 echo $env_data.port - Object.port
  • 如果您直接使用echo "${{fromJson(steps.get_env_data.outputs.deployment_env).port}}" 作为Set env data 步骤的第一个命令。有用吗?
  • 是的,它显示了正确的端口号。
  • 我认为不可能在 GHA 上以这种方式获取整个对象,而是每次仅从 JSON 中提取一个字段值。一种解决方法是提取不同 env 变量中的所有字段以便之后访问它们,但显然这不是最好的解决方案。

标签: json github-actions


【解决方案1】:

很遗憾,我无法正确解决此问题。我按照@GuiFalourd 的建议和我看到的许多示例选择了这种方式从 JSON 中获取属性:

PORT=${{fromJson(steps.get_env_data.outputs.deployment_env).port}}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    相关资源
    最近更新 更多