我可以让 JBoss CLI 工具报告导致我的部署失败的异常吗?
Posted
技术标签:
【中文标题】我可以让 JBoss CLI 工具报告导致我的部署失败的异常吗?【英文标题】:Can I get the JBoss CLI tool to report the exception that caused my deployment to fail? 【发布时间】:2014-03-23 15:05:57 【问题描述】:我正在使用 JBoss 7.1.3.Final。使用 CLI 工具部署时,是否还可以输出日志中导致部署失败的异常?我们运行自动化的夜间部署,我希望能够在电子邮件中报告异常,而不是强迫人们登录机器并查看服务器日志。这是我目前正在做的事情……
$ $JBOSS_HOME/bin/jboss-cli.sh --file=/tmp/my.cli
其中“my.cli”的内容是
connect
deploy --force /tmp/my.war
但是,现在在通用线上报告的是
"JBAS014653: Composite operation failed and was rolled back. Steps that failed:" => "Operation step-2" => "JBAS014671: Failed services" => "jboss.web.deployment.default-host./my" => "org.jboss.msc.service.StartException in service jboss.web.deployment.default-host./my: JBAS018040: Failed to start context","JBAS014771: Services with missing/unavailable dependencies" => ["jboss.deployment.unit.\"my.war\".jboss.security.jacc Missing[JBAS014861: <one or more transitive dependencies>]"]
【问题讨论】:
【参考方案1】:虽然您可以使用 Jboss 的邮件服务(here 和here),但我不知道您如何从jboss-cli
合并。所以我的偏好是发送邮件并由您负责!
我假设您的jboss
正在linux
服务器上运行:
当您运行部署命令时,将输出放入一个 shell 变量(如果它返回的话)。例如:
deploy_response = $( $JBOSS_HOME/bin/jboss-cli.sh --file=/tmp/my.cli )
或者,如果将日志写入日志文件,则将最后几行(您知道发生错误时通常会写入多少行)读入变量。
## readling last 3 lines and joining them into one line
deploy_response = $( tail -n3 /your/log/file.log | tr "\\n" " ")
现在,您已经掌握了部署响应。检查那里的错误消息。通常 Jboss 错误使用这种格式JBASxxxxxx
。所以这对于检测 jboss 错误很有用。
## if [[ $deploy_response == *Composite operation failed* ]]
if [[ $deploy_response =~ JBAS\d\d\d\d\d\d ]]
then
## assuming you have send mail is configured.
echo $deploy_response | mail -s "jboss deployment error" admins@localdomain.com
fi
【讨论】:
关于从日志文件中获取行,获取最后 3 行是不行的。有时,导致部署失败的错误不仅仅是最后 3 行。 明白你的意思。这种情况下,您可以轮换日志文件。我的意思是当你运行部署时,每次都将旧日志移动到存档并创建新的日志文件。然后读取整个文件的错误消息(cat file.log
)。
因为我正在尝试使整个事情自动化,所以不能选择读取潜在的数千兆字节文件以查找错误。我很好奇我是否可以从 CLI 工具中获得导致失败的错误消息,如果没有,是否有其他自动解决方法。【参考方案2】:
如果您使用Maven Wildfly Deployment,它会将错误输出到日志中。然后你可以简单地让你的 CI 工具通过电子邮件发送失败日志。
【讨论】:
以上是关于我可以让 JBoss CLI 工具报告导致我的部署失败的异常吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Java 代码使用 jboss-cli 命令将 EAR 文件部署到 wildfly-17.0.1 服务器
在 JBoss 上热部署 - 我如何让 JBoss “看到”变化?