0

我有pipeline哪个启动一些maven/java应用程序,现在我想添加test阶段,我检查应用程序是否启动成功,例如当构建阶段完成时,我检查,我的意思是如果响应正常则curlcurl ,否则失败。如何创建127.0.0.1:8080200Gitlab 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:
4

1 回答 1

1

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

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

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

工作失败

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

  1. 您可以在启动应用程序的同一作业中运行测试(您可能需要运行应用程序nohup才能在后台运行它)
  2. 您可以将您的应用程序打包到一个 docker 容器中,然后service在您的测试作业中运行它。
于 2021-12-04T17:11:07.410 回答