检查应用程序是否已部署,如果在Jenkins中使用Bash部署,则取消部署

检查应用程序是否已部署,如果在Jenkins中使用Bash部署,则取消部署,jenkins,jakarta-ee,continuous-integration,glassfish-3,devops,Jenkins,Jakarta Ee,Continuous Integration,Glassfish 3,Devops,我正在使用Junkins中的作业来构建我的应用程序(.ear),然后在Glassfish中部署它。在部署我的应用程序(新版本)之前,我想执行asadmin undeploy myApp。问题在于第一次执行时没有部署应用程序,因此执行asadmin undeploy myApp会生成错误。任何处理这种情况的建议。任何提议都是最受欢迎的。谢谢 编辑: 如果我的方法错了,请纠正我,也许我做错了!这是建立母猪生产链的正确方式吗?我必须停止服务器并重新启动它吗?我从未使用过Glassfish,但在执行取

我正在使用Junkins中的作业来构建我的应用程序(.ear),然后在Glassfish中部署它。在部署我的应用程序(新版本)之前,我想执行asadmin undeploy myApp。问题在于第一次执行时没有部署应用程序,因此执行asadmin undeploy myApp会生成错误。任何处理这种情况的建议。任何提议都是最受欢迎的。谢谢


编辑:


如果我的方法错了,请纠正我,也许我做错了!这是建立母猪生产链的正确方式吗?我必须停止服务器并重新启动它吗?

我从未使用过Glassfish,但在执行取消部署之前,您可以检查您的应用程序是否已部署

如果您知道应用程序应该在哪个端口执行,只需使用netstat或lsof进行检查即可

编辑:

看看(示例2-3列出了应用程序),您似乎可以通过以下方式看到这一点:

list-applications --type web
关于这一点:

如果我的方法错了,请纠正我,也许我做错了!这是建立母猪生产链的正确方式吗?我必须停止服务器并重新启动它吗


我认为正确的答案是,这取决于您使用的web服务器(例如Glassfish提供的)。但总的来说,这种方法是有效的

在看了一些关于Bash的视频后,在戴维德·帕蒂的帮助下,我想出了如何做到这一点

知道我使用了大卫·帕蒂的答案,并感谢他的帮助,我选择写我自己的答案,原因很简单:帕蒂的答案不起作用

为了测试应用程序是否已部署,并在部署时取消部署,我使用了以下适用于我的Bash代码:

apps=`asadmin list-applications -t --user=admin --passwordfile=password.txt`

for app in $apps
do
    if [ $app = "the_name_of_your_app" ]
    then
        asadmin --user=admin --passwordfile=password.txt undeploy the_name_of_your_app
    fi
done;

PS:password.txt的内容只有一行:
AS_ADMIN_password=ADMIN

谢谢您的回复,但我认为这在我的情况下不起作用,因为我的应用程序运行在端口8080上,该端口与glassfish相同。如果我可以在
asadmin undeploy myApp
中添加一个参数,说
undeploy If exist
,我现在正在以这种方式搜索。确实,这可能是一个解决方案的开始,但我很难在Jenkins中使用它。我将使用条件构建。我正在努力寻找如何编写一个条件,以获取应用程序列表并检查我的应用程序是否处于状态。@ziMtyth您如何在同一端口上运行2个应用程序??它不应该允许您这样做,因为他们将监听同一个端口,这将引发问题……其次,上述方法是正确的……列出glassFish上的所有应用程序(如果您的应用程序在那里),然后删除it@ziMtyth其实很简单。看看这个答案:您需要创建一个脚本(我建议使用bash)并插入这个检查。最后是一个if语句,用于解析命令的输出。如果从输出中看不到应用程序,请不要执行任何操作。否则,您可以执行取消部署。@ziMtyth这是一个示例,但请小心,因为此脚本将取消部署(如果有)所有已部署的应用程序。我在回答的开头写道,我从未使用glassfish。当然,我不会仅仅为了解决你的问题就这么做。你要求一个提议/建议。您不能期望解决方案的确切代码(即使是因为堆栈溢出没有以这种方式工作)。如果你认为我的回答没有帮助你解决这个问题,你最好不要接受它。@DavidePatti事实上你的回答帮助了很多,我为此感谢你,我相信你不必解释任何事情。我感谢你的帮助