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 管道?

为合并请求触发的管道运行应用 GitLab CI/CD 管道更改

在 Gitlab CI/CD 管道脚本中使用 shell 变量?

在哪里指定 GitLab ci/cd 管道的存储库凭据?

触发 Gitlab CI/CD 管道以部署存储库的特定部分

GitLab CI/CD 管道在构建 Debian 包时找不到 GCC