如何在使用 jq 命令 grep json 输出时摆脱空输出?

问题描述 投票:0回答:1

我使用下面的 curl 命令从上次成功的 jenkins 构建中获取修订 ID,从 json 输出我使用 jq 来 grep 修订 ID。

这是 curl 命令的 json 输出

    "actions": [
      {
        "_class": "hudson.model.CauseAction",
        "causes": [
          {
            "_class": "hudson.triggers.SCMTrigger$SCMTriggerCause",
            "shortDescription": "Started by an SCM change"
          }
        ]
      },
      {},
      {
        "_class": "jenkins.metrics.impl.TimeInQueueAction",
        "blockedDurationMillis": 0,
        "blockedTimeMillis": 0,
        "buildableDurationMillis": 0,
        "buildableTimeMillis": 0,
        "buildingDurationMillis": 499235,
        "executingTimeMillis": 499235,
        "executorUtilization": 1,
        "subTaskCount": 0,
        "waitingDurationMillis": 6006,
        "waitingTimeMillis": 6006
      },
      {},
      {},
      {
        "_class": "hudson.plugins.git.util.BuildData",
        "buildsByBranchName": {
          "refs/remotes/origin/<branch name>": {
            "_class": "hudson.plugins.git.util.Build",
            "buildNumber": 6,
            "buildResult": null,
            "marked": {
              "SHA1": "4bvdcaeacjd652d9abb85",
              "branch": [
                {
                  "SHA1": "4bvdcaeacjd652d9abb85",
                  "name": "refs/remotes/origin/<branch name>"
                }
              ]
            },
            "revision": {
              "SHA1": "4bvdcaeacjd652d9abb85",
              "branch": [
                {
                  "SHA1": "4bvdcaeacjd652d9abb85",
                  "name": "refs/remotes/origin/<branch name>"
                }
              ]
            }
          }
        },
        "lastBuiltRevision": {
          "SHA1": "4bvdcaeacjd652d9abb85",
          "branch": [
            {
              "SHA1": "4bvdcaeacjd652d9abb85",
              "name": "refs/remotes/origin/<branch name>"
            }
          ]
        },
        "remoteUrls": [
          "<remote git url>"
        ],
        "scmName": ""
      },
      {},
      {
        "_class": "hudson.maven.reporters.MavenAggregatedArtifactRecord"
      },
      {},
      {
        "_class": "hudson.plugins.jira.JiraBuildAction"
      },
      {},
      {
        "_class": "org.jenkinsci.plugins.buildenvironment.actions.BuildEnvironmentBuildAction"
      },
      {
        "_class": "hudson.plugins.disk_usage.BuildDiskUsageAction"
      },
      {},
      {
        "_class": "org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction"
      }
    ]

这是我使用 curl 从 jenkins 获取详细信息并从 curl 输出(上面提到的原始 curl 输出)中获取修订 ID 的命令。

curl --user <user name>:<user token> -s "<jenkins url>/jenkins/job/<job name>/<build number>/api/json | jq -r '.actions[].lastBuiltRevision.branch.SHA1'

下面是我得到的输出

null
null
null
null
null
4bvdcaeacjd652d9abb85
null
null
null
null
null
null
null
null
null

curl 命令需要 5 秒才能从 jenkins 获取 json 输出,我如何摆脱这个空输出。

因为我想在其他步骤上使用修订版 ID 值。

jenkins curl jq jenkins-cli
1个回答
0
投票

给定输入,实现所需输出的一种方法是:

.actions[]
| select(.lastBuiltRevision)
| .lastBuiltRevision.branch[].SHA1

另一个是:

.actions[] | try .lastBuiltRevision.branch[] | .SHA1

还有很多其他的可能性。您选择哪种可能取决于您的稳健性要求。

© www.soinside.com 2019 - 2024. All rights reserved.