if-statement - 如何解析 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 响应并基于此失败或通过作业谢谢您的所有帮助。
解决方案
最好的方法是安装一些工具来解析 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))"
推荐阅读
- android - 如何知道页面正在加载?这样我就可以在加载之前使用我的动画控制器
- hyperledger-fabric - 哪个是供应链应用织物或锯齿的最佳解决方案?
- angular - 服务通知的组件
- php - 删除查询不起作用(没有错误/语法错误)
- java - Java 单维数组
- javascript - 单击菜单链接时关闭单页网站上的全屏 JS 菜单
- php - 在PHP中如何每次都创建一个新目录?
- react-navigation - tabBarOnPress 停止工作 react-navigation 3.3.2
- windows - 需要帮助发送带有附件的 Windows 平台电子邮件(UWP react-native-windows)
- python - 在python中,如何从任何列中存在特定字符串的数据框中获取行(字符串值)