Curl 通过HTTP API替换wildfly上的部署

Curl 通过HTTP API替换wildfly上的部署,curl,deployment,jboss,wildfly,Curl,Deployment,Jboss,Wildfly,我们希望将app.war的现有部署替换为curl。下面的帖子提供了一个部署war文件的好方法。只要没有使用相同名称部署war文件,这种方法就可以正常工作。但是,如果已经存在部署,则会失败。我们有没有办法通过curl替换现有的部署 有没有办法获得wildfly的HTTP API的完整接口文档 没有任何直接操作可以取代部署 部署资源的可能属性/操作 所以,您可以做的是删除部署(如果有),然后添加新的部署。 或者您可以在新名称下添加新部署,禁用旧部署并启用新部署 你可以做很多选择。 首先,我建议您

我们希望将app.war的现有部署替换为curl。下面的帖子提供了一个部署war文件的好方法。只要没有使用相同名称部署war文件,这种方法就可以正常工作。但是,如果已经存在部署,则会失败。我们有没有办法通过curl替换现有的部署


有没有办法获得wildfly的HTTP API的完整接口文档

没有任何直接操作可以取代部署

部署资源的可能属性/操作

所以,您可以做的是删除部署(如果有),然后添加新的部署。 或者您可以在新名称下添加新部署,禁用旧部署并启用新部署

你可以做很多选择。 首先,我建议您看看JBossCLI 只需在bin文件夹中启动
jboss cli.sh | bat-c
即可连接到服务器上的默认实例

通过导航CLI,您还可以找到一整套可以操作的属性/操作/资源

关于这个话题的一些文档


我们编写了一个小Shell脚本来实现这一点:

首先,旧的WAR文件将被删除。在这之后,新的归档文件将被上传和部署。 对我们来说,即使还没有部署任何内容,这也能起作用。在这种情况下,前两个调用将失败,但无论如何都将部署新内容

通过从Wildfly Maven插件切换到此脚本,我们能够将部署时间从大约20分钟缩短到4分钟

希望有帮助。
干杯

非常感谢@nioe的剧本!下面是一个可配置的版本,它的静音
curl
更适合CI脚本编写:

#/bin/bash
#将给定的WAR部署到WildFly服务器,将WAR的完整路径作为参数传递
set-e
set-u
[[-f“$1”]|{>&2 echo“用法:$0 WAR文件名(“$1”不是文件)”;退出1;}
WILDFLY_管理_URL=http://username:password@主机名:9990
WAR_NAME=`basename$1`
WAR_PATH=`dirname$1`
echo“将“$WAR\u NAME”从“$WAR\u PATH”部署到“$WILDFLY\u MANAGEMENT\u URL”
回音'-------------'
回声“->解除旧战争”
curl-sS-H“内容类型:应用程序/json”-d'{“操作”:“取消部署”,“地址”:[{“部署”:“${WAR_NAME}”“}]}”--摘要${WILDFLY_MANAGEMENT_URL}/MANAGEMENT
回声“”
回声“->消除旧战争”
curl-sS-H“content Type:application/json”-d'{“operation”:“remove”,“address”:[{“deployment”:“${WAR_NAME}”“}]}”--摘要${WILDFLY_MANAGEMENT_URL}/MANAGEMENT
回声“”
回声“->上传新战争”
bytes_value=`curl-sF“file=@${WAR_PATH}/${WAR_NAME}”--摘要${WILDFLY_MANAGEMENT_URL}/MANAGEMENT/add content | perl-pe的s/^.*“bytes_value”\s*:\s*“(.*)”.$/$1/'`
echo$bytes\u值
json_string_start='{“content”:[{“hash”:{“BYTES_VALUE”:“'
json_string_end='“}}],“address”:[{“deployment”:“${WAR_NAME}”'“}],“operation”:“add”,“enabled”:“true”}
json_string=“$json_string_start$bytes_value$json_string_end”
回声“->部署新战争”
result=`curl-sS-H“内容类型:application/json”-d“$json_string”--摘要${WILDFLY_MANAGEMENT\u URL}/MANAGEMENT | perl-pe's/^.*“结果”\s*:\s*“(.*)”.$/$1/'`
echo$结果
如果[“$result”!=“success”];然后
出口-1
fi

很好的参考文档(:thumbsup:谢谢),但没有具体的用法示例。您认为使用此脚本比使用.cli快吗?您认为最好在每次部署之前重新启动wildfly服务器,以确保重新部署正确进行吗?
#!/bin/bash
echo "Undeploy old war"
curl -S -H "content-Type: application/json" -d '{"operation":"undeploy", "address":[{"deployment":"old.war"}]}' --digest http://user:password@hostname:9990/management
echo ""

echo "Remove old war"
curl -S -H "content-Type: application/json" -d '{"operation":"remove", "address":[{"deployment":"old.war"}]}' --digest http://user:password@hostname:9990/management
echo ""

echo "Upload new war"
bytes_value=`curl -F "file=@/path/to/new.war" --digest http://user:password@$hostname:9990/management/add-content | perl -pe 's/^.*"BYTES_VALUE"\s*:\s*"(.*)".*$/$1/'`
echo $bytes_value

json_string_start='{"content":[{"hash": {"BYTES_VALUE" : "'
json_string_end='"}}], "address": [{"deployment":"new.war"}], "operation":"add", "enabled":"true"}'
json_string="$json_string_start$bytes_value$json_string_end"

echo "Deploy new war"
result=`curl -S -H "Content-Type: application/json" -d "$json_string" --digest http://user:password@hostname:9990/management | perl -pe 's/^.*"outcome"\s*:\s*"(.*)".*$/$1/'`
echo $result

if [ "$result" != "success" ]; then
  exit -1
fi