首页 文章

通过HTTP API替换wildfly上的部署

提问于
浏览
6

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

http://blog.arungupta.me/2014/01/deploy-to-wildfly-using-curl-tech-tip-10/

有没有办法获得wildfly的HTTP API的完整界面文档

3 回答

  • 3

    我们写了一个小的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
    

    首先,旧的WAR-File将被删除 . 之后,新的存档被上传和部署 . 对我们来说,即使尚未部署任何内容,这仍然有效 . 在这种情况下,前两个调用将失败,但无论如何都将部署新内容 .

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

    希望有所帮助 . 干杯

  • 1

    请查看整个管理模型的文档

    http://wildscribe.github.io/

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

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

    所以你可以做的是删除部署,如果有的话,然后添加新部署 . 或者您可以使用新名称添加新部署,禁用旧部署并启用新部署 .

    你可以做很多选择 . 首先,我建议您通过在bin文件夹中启动 jboss-cli.sh|bat -c 来简单地连接到服务器上的默认实例来查看jboss-cli .

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

    关于这个主题的一些文档

    https://docs.jboss.org/author/display/WFLY8/CLI+Recipes

    https://docs.jboss.org/author/display/WFLY8/Management+API+reference

  • 11

    非常感谢@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
    

相关问题