如果 Gitlab 作業 ID 包含工件,我需要 jq 語法方面的幫助。JSON 輸出看起來像這樣(從中洗掉了很多不相關的資訊并添加了[...]):
[{
"id": 3219589880,
"status": "success",
"stage": "test",
"name": "job_with_no_artifact",
"ref": "main",
"tag": false,
"coverage": null,
"allow_failure": false,
"created_at": "2022-10-24T18:21:25.119Z",
"started_at": "2022-10-24T18:21:25.986Z",
"finished_at": "2022-10-24T18:21:38.464Z",
"duration": 12.478682,
"queued_duration": 0.499786,
"user": {
"id": 123456789,
[...]
},
"commit": {
"id": "5e0e1f287d20daf2036a3ca71c656dce55999265",
[...]
"pipeline": {
"id": 123456789,
[...]
"project": {
"ci_job_token_scope_enabled": false
},
"artifacts": [],
"runner": {
"id": 12270859,
[...]
},
"artifacts_expire_at": null,
"tag_list": []
}, {
"id": 3219589878,
"status": "success",
"stage": "test",
"name": "create_artifact_job_2",
"ref": "main",
"tag": false,
"coverage": null,
"allow_failure": false,
"created_at": "2022-10-24T18:21:25.111Z",
"started_at": "2022-10-24T18:21:25.922Z",
"finished_at": "2022-10-24T18:21:39.090Z",
"duration": 13.168405,
"queued_duration": 0.464364,
"user": {
"id": 123456789,
[...]
},
"commit": {
"id": "5e0e1f287d20daf2036a3ca71c656dce55999265",
[...]
},
"pipeline": {
"id": 675641982,
[...],
"project": {
"ci_job_token_scope_enabled": false
},
"artifacts_file": {
"filename": "artifacts.zip",
"size": 223
},
"artifacts": [{
"file_type": "archive",
"size": 223,
"filename": "artifacts.zip",
"file_format": "zip"
}, {
"file_type": "metadata",
"size": 153,
"filename": "metadata.gz",
"file_format": "gzip"
}],
"runner": {
"id": 12270845,
[...]
},
"artifacts_expire_at": "2022-10-25T18:21:35.859Z",
"tag_list": []
}, {
"id": 3219589876,
"status": "success",
"stage": "test",
"name": "create_artifact_job_1",
"ref": "main",
"tag": false,
"coverage": null,
"allow_failure": false,
"created_at": "2022-10-24T18:21:25.103Z",
"started_at": "2022-10-24T18:21:25.503Z",
"finished_at": "2022-10-24T18:21:41.407Z",
"duration": 15.904028,
"queued_duration": 0.098837,
"user": {
"id": 123456789,
[...]
},
"commit": {
"id": "5e0e1f287d20daf2036a3ca71c656dce55999265",
[...]
},
"pipeline": {
"id": 123456789,
[...]
},
"web_url": "WEB_URL",
"project": {
"ci_job_token_scope_enabled": false
},
"artifacts_file": {
"filename": "artifacts.zip",
"size": 217
},
"artifacts": [{
"file_type": "archive",
"size": 217,
"filename": "artifacts.zip",
"file_format": "zip"
}, {
"file_type": "metadata",
"size": 152,
"filename": "metadata.gz",
"file_format": "gzip"
}],
"runner": {
"id": 12270857,
},
"artifacts_expire_at": "2022-10-25T18:21:37.808Z",
"tag_list": []
}]
我一直在嘗試使用 jQ 執行以下任一操作:
任何一個:
檢查
artifacts_file每次迭代中是否存在 key 以及是否回傳 (job) id (so.[].id)檢查
artifacts每次迭代中陣列是否為空,如果為空,則回傳(作業)ID。
在這兩種情況下,我都能完成第一部分,但我不確定如何回傳.id密鑰。
我一直在嘗試利用并適應我的案例的相關 stackoverflow 問題:
- jq - 如果長度不為空,則回傳陣列值
- 如何在迭代值之前檢查 jq 中是否存在“鍵”
到目前為止我所擁有的:jq '[.[].artifacts[]|select(length > 0)] | .[]'它回傳找到的所有工件(但它不包含.id作業的)。
uj5u.com熱心網友回復:
使用檢查欄位的存在has:
.[] | select(has("artifacts_file")).id
3219589878
3219589876
演示
通過將欄位與以下內容進行比較來檢查欄位是否為空陣列[]:
.[] | select(.artifacts == []).id
3219589880
演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/519951.html
上一篇:如何在mongo中約束我的查詢,我需要對結果進行條件連接
下一篇:JToken中的空值傳播
