我们有一个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?
2条答案
按热度按时间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
已经存在)shyt4zoc2#
最后,图像至少安装了
awk
程序,因此我可以通过awk
的帮助检查Java的输出,以获得特殊的字符序列,如果有匹配项,则立即退出程序,退出代码为1: