首页 > 解决方案 > 如何解析 Http json 响应并基于此失败或传递作业?

问题描述

我有一个 gitlab ci yaml 文件。和 2 个工作。我的 .gitlab-ci.yaml 文件是:

variables:
  MSBUILD_PATH: 'C:\Program Files (x86)\MSBuild\14.0\Bin\msbuild.exe'
  SOLUTION_PATH: 'Source/NewProject.sln'

stages:
  - build
  - trigger_IT_service

build_job:
  stage: build
  script:
    - '& "$env:MSBUILD_PATH" "$env:SOLUTION_PATH" /nologo /t:Rebuild /p:Configuration=Debug'

trigger_IT_service_job:
  stage: trigger_IT_service
  script:
    - 'curl http://webapps.xxx.com.tr/dataBus/runTransfer/ctDigiTransfer'

这是我的 trigger_IT_service 工作报告:

Running on DIGITALIZATION...
00:00
Fetching changes with git depth set to 50...
00:05
 Reinitialized existing Git repository in D:/GitLab-Runner/builds/c11pExsu/0/personalname/newproject/.git/
 Checking out 24be087a as master...
 Removing Output/
 git-lfs/2.5.2 (GitHub; windows amd64; go 1.10.3; git 8e3c5c93)
 Skipping Git submodules setup
$ curl http://webapps.xxx.com.tr/dataBus/runTransfer/ctDigiTransfer
00:02
 StatusCode        : 200
 StatusDescription : 200
 Content           : {"status":200,"message":"SAP transfer started. Please 
                     check in db","errorCode":0,"timestamp":"2020-03-25T13:53:05
                     .722+0300","responseObject":null}
 RawContent        : HTTP/1.1 200 200
                     Keep-Alive: timeout=10
                     Connection: Keep-Alive
                     Transfer-Encoding: chunked
                     Content-Type: application/json;charset=UTF-8
                     Date: Wed, 25 Mar 2020 10:53:05 GMT
                     Server: Apache

我必须在 gitlab ci yaml 中控制此报告的“内容”部分如果“消息”是“SAP 传输开始。请检查数据库”管道应该通过,否则必须失败。实际上我的问题是:如何解析 Http json 响应并基于此失败或通过作业谢谢您的所有帮助。

标签: if-statementtriggerscontinuous-integrationgitlabyaml

解决方案


最好的方法是安装一些工具来解析 json 并使用它,这里有不同的例子

给定评论中的 json 示例:

{
  "status": 200,
  "message": "SAP transfer started. Please check in db",
  "errorCode": 0,
  "timestamp": "2020-03-25T17:06:43.430+0300",
  "responseObject": null
}

如果你可以在你的跑步者上安装 python3,你可以用脚本来实现它:

import requests; # note this might require additional install with pip install requests

message = requests.get('http://webapps.xxx.com.tr/dataBus/runTransfer/ctDigiTransfer').json()['message']
if message != 'SAP transfer started. Please check in db':
    print('Invalid message: ' + message)
    exit(1)
else:
    print('Message ok')

因此trigger_IT_service,您的 yaml 中的阶段将是:

trigger_IT_service_job:
  stage: trigger_IT_service
  script: >
    python -c "import requests; message = requests.get('http://webapps.xxx.com.tr/dataBus/runTransfer/ctDigiTransfer').json()['message']; (print('Invalid message: ' + message), exit(1)) if message != 'SAP transfer started. Please check in db' else (print('Message ok'), exit(0))"

推荐阅读