我们希望用curl替换现有的app.war部署。下面的文章为部署war文件提供了一种很好的方法。只要没有部署相同名称的war文件,它就能正常工作。但是,如果已经有了部署,它就失败了。我们是否可以通过curl替换现有的部署?
http://blog.arungupta.me/2014/01/deploy-to-wildfly-using-curl-tech-tip-10/
是否有方法获取通配符的HTTP的完整接口文档
发布于 2014-04-11 01:56:20
为了实现这一点,我们编写了一个小Shell脚本:
#!/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
首先,旧的战争档案将被移除。在此之后,新的存档将被上传和部署。对于我们来说,即使还没有部署任何内容,这也是可行的。在这种情况下,前两个调用将失败,但是无论如何,新的内容都将被部署。
我们能够将部署时间从大约20分钟缩短到4分钟,方法是从Wildfly Maven插件切换到这个脚本!
希望这能有所帮助。干杯
发布于 2016-09-19 11:54:33
非常感谢@nioe的剧本!下面是一个带有静音curl
的可配置版本,它更适合CI脚本编写:
#!/bin/bash
# Deploys given WAR to WildFly server, pass full path to WAR as argument
set -e
set -u
[[ -f "$1" ]] || { >&2 echo "Usage: $0 WAR-filename ('$1' is not a file)"; exit 1; }
WILDFLY_MANAGEMENT_URL=http://username:password@hostname:9990
WAR_NAME=`basename $1`
WAR_PATH=`dirname $1`
echo "Deploying '$WAR_NAME' from '$WAR_PATH' to '$WILDFLY_MANAGEMENT_URL'"
echo '-------------------'
echo "-> Undeploy old war"
curl -sS -H "content-Type: application/json" -d '{"operation":"undeploy", "address":[{"deployment":"'"${WAR_NAME}"'"}]}' --digest ${WILDFLY_MANAGEMENT_URL}/management
echo ""
echo "-> Remove old war"
curl -sS -H "content-Type: application/json" -d '{"operation":"remove", "address":[{"deployment":"'"${WAR_NAME}"'"}]}' --digest ${WILDFLY_MANAGEMENT_URL}/management
echo ""
echo "-> Upload new war"
bytes_value=`curl -sF "file=@${WAR_PATH}/${WAR_NAME}" --digest ${WILDFLY_MANAGEMENT_URL}/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":"'"${WAR_NAME}"'"}], "operation":"add", "enabled":"true"}'
json_string="$json_string_start$bytes_value$json_string_end"
echo "-> Deploy new war"
result=`curl -sS -H "Content-Type: application/json" -d "$json_string" --digest ${WILDFLY_MANAGEMENT_URL}/management | perl -pe 's/^.*"outcome"\s*:\s*"(.*)".*$/$1/'`
echo $result
if [ "$result" != "success" ]; then
exit -1
fi
发布于 2014-04-10 15:03:43
查看整个管理模型的文档
没有可取代部署的直接行动。
部署资源的看见可能的属性/操作
因此,您可以做的是删除部署,如果有,然后添加新的部署。或者您可以在新名称下添加新部署,禁用旧部署并启用新部署。
你可以做很多选择。对于start,我建议您通过在bin文件夹中启动jboss-cli.sh|bat -c
来简单地连接到服务器上的默认实例来查看jboss。
通过导航CLI,您还可以找到可以操作的一整套属性/操作/资源。
一些关于这个主题的文档
https://docs.jboss.org/author/display/WFLY8/CLI+Recipes
https://docs.jboss.org/author/display/WFLY8/Management+API+reference
https://stackoverflow.com/questions/22981199
复制