【发布时间】:2014-02-02 07:32:11
【问题描述】:
我通过执行一系列 shell 命令在 Jenkins(Jenkins 是一个开源的持续集成工具)中运行工作。其中一个命令是运行一个 Java 程序来进行一些数据验证。如果遇到无效日期,Java 程序将以非零退出代码退出,以便 Jenkins 可以发现这次构建失败。
不幸的是,Java 程序向 stdout 和 stderr 打印了太多日志,只有少数有用。由于无法修改 Java 程序,我决定使用 grep 过滤输出。所以我把shell写成:
java -cp $CLASSPATH MetaValidatorMain | grep -v "useless keyword1"| grep -v "useless keyword2"
但问题是,在执行完这行shell后,父进程(Jenkins)得到了grep的退出代码,而java却死了,所以Jenkins无法确定构建是否成功。
我也试过这个:
(java -cp $CLASSPATH MetaValidatorMain || exit 1) | grep -v "useless keyword1"| grep -v "useless keyword2"
也没有用。
谁能告诉我如何编写shell行来过滤输出并同时获得正确的退出代码。
谢谢
【问题讨论】:
标签: java linux bash shell jenkins