2017-12-22 39 views
1

I持ってcurl INGのジェンキンス$ BUILD_URL/API/JSONからの次の出力:私がすることになっている現在利用可能ジェンキンスプラグインとしてビルドジョブを開始した「はuserId」を抽出しようとしているjqを使ってJenkinsのビルドURLでcurlからuserIdを抽出するには?

[email protected] ~ - $ 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": [ 
    "[email protected]:company.ci.git" 
    ], 
    "scmName": "" 
} 
{ 
    "_class": "hudson.plugins.git.GitTagAction" 
} 
{} 
{} 
{} 
{} 
{} 
[email protected] ~ - $ 

それは何らかの理由でうまくいかないのですか?

これは私が試したものですが、それは私にエラーを与える:

[email protected] ~ - $ 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) 
[email protected] ~ - $ 

私はそれが「.ACTIONS []」ブロックの一部には「.causes []」はありませんという事実に関連すると思いますその場合、「userId」を抽出することは可能ですか?

答えて

2

jqを使用すると、修正後の "?"オペレータ、例えば。あなたのケースで:出力をgerppingとトリミングについて

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

Jenkinsには、API出力をフィルタリングできる独自のAPI構文があります。 xmlバージョンを使用して、xpathを指定することができます。あなたの場合、次のURLはあなたにuserIdを与えるべきです。

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

何:

$ 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 '"," ' 
+0

私は、カット/ AWKでそれを行う方法を知っているが、私は、JQと感謝をそれを行う方法を学ぶことを好みます。 –

+0

実際に私はあまりにも好きです:)、ちょうどそれも '古いファッション'ソリューションを追加するのが適切だろうと思う。 – chenchuk

関連する問題