Gitlab CI/CD 如何在管道中捕获 curl 响应
Posted
技术标签:
【中文标题】Gitlab CI/CD 如何在管道中捕获 curl 响应【英文标题】:Gitlab CI/CD how to catch curl response in pipeline 【发布时间】:2022-01-09 01:48:30 【问题描述】:我有pipeline
启动一些maven/java
应用程序,现在我想添加test
阶段,我检查应用程序是否成功启动,例如当构建阶段完成时,我检查curl
,我的意思是curl 127.0.0.1:8080
如果响应 200
ok ,否则失败。
如何用Gitlab pipline?
创建
stages:
- build
- deploy
- test
build:
stage: build
script:
- echo Build Stage 1
tags:
- java-run
deploy:
stage: deploy
tags:
- java-run
script:
- "some script"
test:
stage: test
tags:
- java-run
script:
【问题讨论】:
【参考方案1】:我在这里围绕您的用例做出一些假设,如果它们不正确,请告诉我。我假设:
您正在远程启动 Java 应用程序(即,您的管道将其部署到云提供商或非 CI/CD 服务器) 运行 CI/CD 的服务器可以通过 Internet 访问应用程序如果是这样,假设您希望您的工作在服务不可访问时失败,您可以使用-f
标志简单地卷曲 url,如果收到 404 错误,它将失败。例子:
test:
image: alpine:latest
script:
- apk add curl
- curl -o /dev/null -s -w "%http_code\n" https://httpstat.us/404 -f
上述作业将失败,因为 curl 在收到 >= 400 错误代码并使用 -f 标志时返回退出代码 22:
现在,如果您尝试在 CI/CD 中运行该应用程序(这就是您在问题中提到 127.0.0.1
的原因),那么您无法在一项工作中本地运行该应用程序并进行测试在另一个。该作业只会在运行它的容器的上下文中存在和运行,而test
位于一个单独的容器中,因为它是一个单独的作业。如果您尝试在 CI/CD 的上下文中运行您的应用并对其进行测试,您有两种选择:
-
您可以在启动应用的同一作业中运行测试(您可能需要使用
nohup
运行应用才能在后台运行)
您可以将应用打包到 docker 容器中,然后在您的测试作业中将其作为 service
运行。
【讨论】:
感谢工作,太棒了。你能帮忙完成这个任务吗? ***.com/questions/70245298/…以上是关于Gitlab CI/CD 如何在管道中捕获 curl 响应的主要内容,如果未能解决你的问题,请参考以下文章
为合并请求触发的管道运行应用 GitLab CI/CD 管道更改