Gitlab CI/CD 如何在管道中捕获 curl 响应

Gitlab CI/CD how to catch curl response in pipline

我有 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:

我在这里围绕您的用例做了一些假设,如果它们不正确,请告诉我。我假设:

  • 您正在远程启动 java 应用程序(即,您的管道正在将其部署到云提供商或 non-CI/CD 服务器)
  • 您的服务器 运行正在 CI/CD 可以通过互联网访问该应用程序

如果是这样,假设您希望您的工作在服务不可访问时失败,您可以使用 -f 标志简单地 curl 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 returns 在收到 >= 400 错误代码并使用 -f 标志时退出代码 22:

现在,如果您尝试 运行 您 CI/CD 中的应用程序(这就是您在问题中提到 127.0.0.1 的原因),那么您可以t 运行 该应用程序在一项工作中本地化,在另一项工作中进行测试。该作业将仅存在并且 运行 在 运行 容器的上下文中,而 test 位于单独的容器中,因为它是一个单独的作业。如果您尝试在 CI/CD 的上下文中 运行 您的应用程序并对其进行测试,您有两种选择:

  1. 您可以 运行 在启动应用程序的同一个作业中进行测试(您可能需要 运行 使用 nohup 的应用程序到 运行 它在背景)
  2. 您可以将您的应用程序打包到 docker 容器中,然后 运行 它作为 service 在您的测试作业中。