部署命令
部署和删除应用程序时,用于托管域的相同 CLI 命令也适用于独立服务器:
[standalone@localhost:9990 /] deploy ~/Desktop/test-application.war
'test-application.war' deployed successfully.
[standalone@localhost:9990 /] undeploy test-application.war
Successfully undeployed test-application.war.
使用部署扫描器进行部署
部署内容(例如,war、ear、jar 和 sar 文件)可以放置在 WildFly 发行版的standalone/deployments 目录中,以便自动部署到服务器运行时中。为此,deployment-scanner
子系统必须存在。扫描器定期检查部署目录的内容,并通过更新服务器来对更改做出反应。
鼓励用户使用 WildFly 管理 API 上传和部署部署内容,而不是依赖定期扫描目录的部署扫描器,特别是在运行生产系统时。 |
部署扫描器模式
WildFly 文件系统部署扫描器以两种不同模式之一运行,具体取决于它是否直接监视部署内容以决定部署或重新部署它。
自动部署模式:
扫描器将直接监控部署内容,自动部署新内容并重新部署时间戳已更改的内容。这与以前的 AS 版本的行为类似,尽管存在差异:
-
分解部署中任何文件的更改都会触发重新部署。由于 EE 6+ 应用程序不需要部署描述符,
因此不会尝试监视部署描述符,并且仅在部署描述符更改时重新部署。 -
扫描程序将在此目录中放置标记文件,以指示其尝试部署或取消部署内容的状态。下面详细介绍这些内容。
手动部署模式:
扫描器不会尝试直接监视部署内容并决定最终用户是否或何时希望部署内容。相反,扫描器依赖于标记文件系统,用户添加或删除标记文件充当一种命令,告诉扫描器部署、取消部署或重新部署内容。
对于压缩部署内容和分解部署内容,可以独立配置自动部署模式和手动部署模式。这是通过standalone.xml 配置文件中的deployment-scanner 元素上的“auto-deploy”属性完成的:
<deployment-scanner scan-interval="5000" relative-to="jboss.server.base.dir"
path="deployments" auto-deploy-zipped="true" auto-deploy-exploded="false"/>
默认情况下,启用压缩内容的自动部署,并禁用分解内容的自动部署。强烈建议对分解内容使用手动部署模式,因为分解内容本身很容易受到尝试自动部署部分复制内容的扫描程序的影响。
标记文件
标记文件始终与其相关的部署内容具有相同的名称,但附加了一个附加文件后缀。例如,指示应部署 example.war 文件的标记文件名为 example.war.dodeploy。不同的标记文件后缀具有不同的含义。
相关的标记文件类型有:
文件 | 目的 |
---|---|
.dodeploy | 由用户放置,以指示给定内容应部署到运行时中(如果已部署在运行时中,则重新部署。) |
.skipdeploy | 只要文件存在,就禁用内容的自动部署。对于允许更新分解内容最有用,而无需扫描程序在更新中间启动重新部署。也可以与压缩内容一起使用,尽管扫描程序将检测对压缩内容进行的更改并等待更改完成。 |
.isdeploying | 由部署扫描器服务放置,表示它已注意到 .dodeploy 文件或新的或更新的自动部署模式内容,并且正在部署该内容。部署过程完成后,此标记文件将被删除。 |
.deployed | 由部署扫描器服务放置,以指示给定内容已部署到运行时中。如果最终用户删除此文件,则内容将被取消部署。 |
.failed | 由部署扫描器服务放置,以指示给定内容未能部署到运行时。文件的内容将包括一些有关故障原因的信息。请注意,在自动部署模式下,删除此文件将使部署再次符合部署条件。 |
.isundeploying | 由部署扫描器服务放置,表示它已注意到 .deployed 文件已被删除并且内容正在取消部署。取消部署过程完成后,该标记文件将被删除。 |
.undeployed | 由部署扫描器服务放置,以指示给定内容已从运行时取消部署。如果最终用户删除该文件,则不会产生任何影响。 |
.pending | 由部署扫描器服务放置,表示它已注意到需要部署内容,但尚未指示服务器部署它。如果扫描程序检测到某些自动部署内容仍在复制过程中或者存在阻止自动部署的问题,则会创建此文件。只要此条件成立,扫描器就不会指示服务器部署或取消部署任何内容(不仅仅是直接受影响的内容)。 |
基本工作流程:
所有示例均假设变量 $JBOSS_HOME 指向 WildFly 发行版的根目录。
-
添加新的压缩内容并部署它:
-
cp target/example.war/$JBOSS_HOME/standalone/deployments
-
(仅限手动模式)touch $JBOSS_HOME/standalone/deployments/example.war.dodeploy
-
-
添加新的解压内容并部署它:
-
cp -r target/example.war/ $JBOSS_HOME/standalone/deployments
-
(仅限手动模式)touch $JBOSS_HOME/standalone/deployments/example.war.dodeploy
-
-
取消部署当前部署的内容:
-
rm $JBOSS_HOME/standalone/deployments/example.war.deployed
-
-
仅自动部署模式:取消部署当前部署的内容:
-
rm $JBOSS_HOME/standalone/deployments/example.war
-
-
将当前部署的压缩内容替换为新版本并部署它:
-
cp target/example.war/$JBOSS_HOME/standalone/deployments
-
(仅限手动模式)touch $JBOSS_HOME/standalone/deployments/example.war.dodeploy
-
-
仅手动模式:用新版本替换当前部署的解压内容并部署它:
-
rm $JBOSS_HOME/standalone/deployments/example.war.deployed
-
等待 $JBOSS_HOME/standalone/deployments/example.war.undeployed 文件出现
-
cp -r target/example.war/ $JBOSS_HOME/standalone/deployments
-
touch $JBOSS_HOME/standalone/deployments/example.war.dodeploy
-
-
仅自动部署模式:用新版本替换当前部署的解压内容并部署它:
-
touch $JBOSS_HOME/standalone/deployments/example.war.skipdeploy
-
cp -r target/example.war/ $JBOSS_HOME/standalone/deployments
-
rm $JBOSS_HOME/standalone/deployments/example.war.skipdeploy
-
-
仅手动模式:实时替换当前部署的解压缩内容的部分内容,而无需重新部署:
-
cp -r target/example.war/foo.html $JBOSS_HOME/standalone/deployments/example.war
-
-
仅自动部署模式:实时替换当前部署的解压缩内容的部分内容,而无需重新部署:
-
touch $JBOSS_HOME/standalone/deployments/example.war.skipdeploy
-
cp -r target/example.war/foo.html $JBOSS_HOME/standalone/deployments/example.war
-
-
手动或自动部署模式:重新部署当前部署的内容(即弹回而不更改内容):
-
touch $JBOSS_HOME/standalone/deployments/example.war.dodeploy
-
-
仅自动部署模式:重新部署当前部署的内容(即弹回它而不更改内容):
-
touch $JBOSS_HOME/standalone/deployments/example.war
-