如何通过脚本部署模块/提供程序/spi?
Posted
技术标签:
【中文标题】如何通过脚本部署模块/提供程序/spi?【英文标题】:How to deploy a module/provider/spi via scripting? 【发布时间】:2020-01-27 22:45:22 【问题描述】:有没有办法通过脚本将模块部署到 Wildfly(例如,无需手动修改 XML 文件)?我知道jboss-cli.sh
命令到add module
,但是有没有办法直接修改我的standalone.xml
/domain.xml
或者做一些等效的事情来告诉Wildfly 加载模块?
换个说法……
我发现了两种部署模块的方法:
1) 通过将 jar 复制到 $KEYCLOAK_HOME/standalone/deployments
直接热部署
(根据该目录中的自述文件,此方法不推荐用于生产部署但之后无需任何手动操作即可工作。)
2) 运行jboss-cli.sh --command="module add --name=com.example.MySpi"
,然后手动编辑standalone.xml
(或domain.xml
),让您的模块出现在“提供者”列表中,如下所示:
<subsystem xmlns="urn:jboss:domain:keycloak-server:1.1">
<web-context>auth</web-context>
<providers>
...
<provider>module:com.example.MySpi</provider>
</providers>
...
</subsystem>
...最后重启服务器。
我想使用推荐的方式,但无需手动编辑 XML 文件。有推荐的路径吗?
【问题讨论】:
您能否添加更多<providers/>
标签所在的部分或链接到某些文档?您很可能可以通过 CLI 使用管理操作添加它,但我不熟悉它的位置。
【参考方案1】:
你可以这样做
jboss-cli.sh --command="/subsystem=keycloak-server:list-add(name=providers, value=module:com.example.MySpi)"
基本上,您可以使用 jboss-cli 编写standalone.xml 中的所有内容。要了解更多内部配置的外观,您可以在 jboss-cli 中尝试/subsystem=keycloak-server:read-resource(recursive=true)
。
【讨论】:
此命令应自动更新standalone.xml,因此在重新启动后仍然有效。【参考方案2】:抱歉,还不能添加 cmets,所以我在这里添加。
我必须在上面的命令中添加--connect
选项,否则它会抱怨no connection to the controller
。
那么整个命令将是:
jboss-cli.sh --connect --command="/subsystem=keycloak-server:list-add(name=providers, value=module:com.example.MySpi)"
【讨论】:
欢迎来到 Stack Overflow,@ieggel,感谢您的加入!希望这个问题也对您有所帮助! 绝对帮助了我,因为我也在寻找一种自动化方式来注册提供程序模块,而不是手动修改 XML 文件。谢谢!。 如果您不想启动服务器,您可以使用embedded wildfly server 编辑standalone.xml
而无需启动keycloak。只需运行embed-server --server-config=standalone.xml
好像在docker版本中被屏蔽了。以上是关于如何通过脚本部署模块/提供程序/spi?的主要内容,如果未能解决你的问题,请参考以下文章
带有外部 Jar 的 Keycloak 自定义 SPI 部署