Json 如何使用jq从Jenkins构建url上的curl中提取userId?

Json 如何使用jq从Jenkins构建url上的curl中提取userId?,json,curl,jenkins,jq,Json,Curl,Jenkins,Jq,我从curling Jenkins$BUILD\u URL/api/json获得以下输出: itai@Itais-MBP ~ - $ curl -s --insecure -u itaig:password https://ip.us-west-2.compute.amazonaws.com/job/Company-Analytics-Prod-Deploy_New/24/api/json | jq -r '.actions[]' { "_class": "hudson.model

我从
curl
ing Jenkins$BUILD\u URL/api/json获得以下输出:

itai@Itais-MBP ~ -  $ curl -s --insecure -u itaig:password  https://ip.us-west-2.compute.amazonaws.com/job/Company-Analytics-Prod-Deploy_New/24/api/json |
   jq -r '.actions[]'
{
  "_class": "hudson.model.CauseAction",
  "causes": [
    {
      "_class": "hudson.model.Cause$UserIdCause",
      "shortDescription": "Started by user Itai Ganot",
      "userId": "itaig",
      "userName": "Itai Ganot"
    }
  ]
}
{
  "_class": "hudson.model.CauseAction",
  "causes": [
    {
      "_class": "com.sonyericsson.rebuild.RebuildCause",
      "shortDescription": "Rebuilds build #23",
      "upstreamBuild": 23,
      "upstreamProject": "Company-Analytics-Prod-Deploy_New",
      "upstreamUrl": "view/Prod-US%20Deploy/job/Company-Analytics-Prod-Deploy_New/"
    }
  ]
}
{
  "_class": "hudson.model.ParametersAction",
  "parameters": [
    {
      "_class": "eu.markov.jenkins.plugin.mvnmeta.MavenMetadataParameterValue",
      "name": "Version"
    },
    {
      "_class": "hudson.model.StringParameterValue",
      "name": "region",
      "value": "us-east-1"
    },
    {
      "_class": "hudson.model.StringParameterValue",
      "name": "StackName",
      "value": "Company-Prd-21"
    },
    {
      "_class": "hudson.model.StringParameterValue",
      "name": "autostart",
      "value": "No"
    }
  ]
}
{}
{}
{
  "_class": "hudson.plugins.git.util.BuildData",
  "buildsByBranchName": {
    "refs/remotes/origin/master": {
      "_class": "hudson.plugins.git.util.Build",
      "buildNumber": 24,
      "buildResult": null,
      "marked": {
        "SHA1": "0e71efeac11c9909838453f4f103457ec3b04d27",
        "branch": [
          {
            "SHA1": "0e71efeac11c9909838453f4f103457ec3b04d27",
            "name": "refs/remotes/origin/master"
          }
        ]
      },
      "revision": {
        "SHA1": "0e71efeac11c9909838453f4f103457ec3b04d27",
        "branch": [
          {
            "SHA1": "0e71efeac11c9909838453f4f103457ec3b04d27",
            "name": "refs/remotes/origin/master"
          }
        ]
      }
    }
  },
  "lastBuiltRevision": {
    "SHA1": "0e71efeac11c9909838453f4f103457ec3b04d27",
    "branch": [
      {
        "SHA1": "0e71efeac11c9909838453f4f103457ec3b04d27",
        "name": "refs/remotes/origin/master"
      }
    ]
  },
  "remoteUrls": [
    "git@git.assembla.com:company.ci.git"
  ],
  "scmName": ""
}
{
  "_class": "hudson.plugins.git.GitTagAction"
}
{}
{}
{}
{}
{}
itai@Itais-MBP ~ -  $
我正试图提取开始构建工作的“userId”,因为当前可用的Jenkins插件由于某些原因不起作用

这是我尝试过的,但它给了我一个错误:

itai@Itais-MBP ~ -  $ curl -s --insecure -u itaig:password  https://ip.us-west-2.compute.amazonaws.com/job/Company-Analytics-Prod-Deploy_New/24/api/json |
 jq -r '.actions[].causes[] | .userId'
itaig
null
jq: error (at <stdin>:0): Cannot iterate over null (null)
itai@Itais-MBP ~ -  $
itai@Itais-MBP~-$curl-s—不安全-u itaig:密码https://ip.us-west-2.compute.amazonaws.com/job/Company-Analytics-Prod-Deploy_New/24/api/json |
jq-r'.操作[]。原因[]|.userId'
伊泰格
无效的
jq:错误(位于:0):无法迭代null(null)
itai@Itais-MBP~-$

我认为这与某些“.actions[]”块中没有“.causes[]”这一事实有关,如果是这样,是否可以提取“userId”?

Jenkins有自己的api语法,允许您过滤api输出。您可以使用xml版本并指定xpath。在您的情况下,以下url应该为您获取用户ID

curl -g https://ip.us-west-2.compute.amazonaws.com/job/Company-Analytics-Prod-Deploy_New/24/api/xml?xpath=//*/action[1]/cause/userId

使用jq,您可以使用post fix“?”操作符防止不存在,例如,在您的情况下:

.actions[].causes[]?.userId? | select(.)

如何对输出进行重新调整和修剪:

$ curl -s --insecure -u itaig:password  https://ip.us-west-2.compute.amazonaws.com/job/Company-Analytics-Prod-Deploy_New/24/api/json |
   jq -r '.actions[]' | grep userId | cut -d ":" -f2 | tr -d '"," '

我知道如何使用cut/awk,但我更喜欢学习如何使用jq,谢谢。实际上我也更喜欢:),只是觉得添加“旧时尚”解决方案也合适。