如何通过脚本部署模块/提供程序/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 文件。有推荐的路径吗?

【问题讨论】:

您能否添加更多&lt;providers/&gt; 标签所在的部分或链接到某些文档?您很可能可以通过 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?的主要内容,如果未能解决你的问题,请参考以下文章

使用Capistrano 3部署git子模块

带有外部 Jar 的 Keycloak 自定义 SPI 部署

如何使用Ansible自动化部署Docker镜像

如何通过 cloudformation 部署 opsworks 应用程序?

如何通过Ansible来管理上千台服务器??

如何使用一个 terraform 脚本和不同的变量值管理多个不同环境的部署