2014-04-10 15 views

回答

9

我們寫了一個小

一些文檔shell腳本來實現這一目標:

#!/bin/bash 
echo "Undeploy old war" 
curl -S -H "content-Type: application/json" -d '{"operation":"undeploy", "address":[{"deployment":"old.war"}]}' --digest http://user:[email protected]:9990/management 
echo "" 

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

echo "Upload new war" 
bytes_value=`curl -F "[email protected]/path/to/new.war" --digest http://user:[email protected]$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:[email protected]:9990/management | perl -pe 's/^.*"outcome"\s*:\s*"(.*)".*$/$1/'` 
echo $result 

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

首先將刪除舊的WAR文件。之後,新的存檔被上傳和部署。 即使尚未部署任何內容,對我們來說也是如此。在這種情況下,前兩次調用將失敗,但新內容將被部署。

我們能夠從Wildfly Maven的插件切換到該腳本從約20到4分鐘縮短部署時間!

希望有所幫助。 乾杯

+0

您認爲使用此腳本會比使用.cli更快嗎?您認爲在每次部署之前重新啓動癱瘓服務器以確保重新部署正確發生會更好嗎? – Ievgen

3

的HTTP API的完整的接口文檔,在

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

+0

很好的參考文檔(:thumbsup:thanks),但沒有具體的使用示例。 – gkephorus

0

非常感謝@nioe的腳本!這是一個可配置的版本,其中更好的適用於CI腳本curl

#!/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:[email protected]: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 "[email protected]${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