Java Docker容器,如何检查输出?

kgsdhlau  于 2023-05-28  发布在  Docker
关注(0)|答案(2)|浏览(189)

我们有一个GitLab Pipeline,其中包含以下作业,该作业在安装了Java的Docker容器中运行:

generate_openapi_server_code:
  image: java:17
  stage: validate
  tags:
    - test
  script:
    - "wget https://<artifactory-host-url>/artifactory/Maven-Central-remote-cache/org/openapitools/openapi-generator-cli/6.3.0/openapi-generator-cli-6.3.0.jar -O openapi-generator-cli.jar"
    - "java -jar openapi-generator-cli.jar generate -g spring -o out -i dispo.yaml | sed '/WARN/q1'"

正如您在第一步中看到的,它从我们的Maven Repo下载Java库,然后启动程序。为了验证程序的结果,我们尝试使用sed命令工具检查控制台输出。问题是sed在该映像中不可用,因此作业失败:sed: missing command
你知道如何在容器中检查Java的输出吗?你知道一个更好的集装箱,其中有所有的工具在手边,即。Java 17和sed?

uqjltbpv

uqjltbpv1#

奇怪,我刚刚在本地检查了amazoncorretto:17,它似乎有sed命令。但是,您可以构建自己的基于amazoncorretto:17的docker镜像(或任何镜像)并安装sed(即使我在本地检查时它已经存在)。您也可以使用"java -jar openapi-generator-cli.jar generate -g spring -o out -i dispo.yaml | grep -q 'WARN' && exit 1",它应该也可以做到这一点。(假设grep已经存在)

shyt4zoc

shyt4zoc2#

最后,图像至少安装了awk程序,因此我可以通过awk的帮助检查Java的输出,以获得特殊的字符序列,如果有匹配项,则立即退出程序,退出代码为1:

java -jar openapi-generator-cli.jar generate -g spring -o out -i dispo.yaml | awk '{ print; } $0 ~ "WARN" { exit 1; }'

相关问题