3.6.7. 使用 Git 管理配置数据

自 JBoss EAP 7.3 起,您可以使用 Git 来管理和持久保留您的服务器配置数据、属性文件和部署。这不仅允许您管理这些文件的版本历史记录,还允许您使用一个或多个 Git 存储库在多个服务器和节点间共享服务器和应用配置。此功能仅适用于使用默认配置目录布局的单机服务器。

您可以选择在本地 Git 存储库中使用配置数据 ,也可以从远程 Git 存储库中提取数据。Git 存储库在 jboss.server.base.dir 目录中配置,这是单机服务器内容的基础目录。在 jboss.server.base.dir 目录配置为使用 Git 后,JBoss EAP 将自动通过管理 CLI 或管理控制台提交每次更新到配置的更新。通过手动编辑配置文件在服务器外进行的任何更改都不会提交或保留,但您可以使用 Git CLI 添加和提交手动更改。您还可以使用 Git CLI 查看提交历史记录,管理分支和管理内容。

要使用此功能,在您启动服务器时在命令行中传递一个或多个参数。

表 3.4. Git 配置管理的服务器启动参数

参数描述

--git-repo

用于管理和持久服务器配置数据的 Git 存储库的位置。如果要在本地存储 或者远程存储库的 URL,这可能是本地的。

--git-branch

Git 存储库中要使用的分支或标签名称。此参数应命名现有的分支或标签名称,因为如果不存在,则不会创建该分支或标签名称。如果使用标签名称,请将存储库置于分离的 HEAD 状态,这意味着以后的提交不会附加到任何分支。标签名称为只读,通常在多个节点之间复制配置时使用。

--git-auth

指向 Elytron 配置文件的 URL,该文件包含连接远程 Git 存储库时要使用的凭据。如果您的远程 Git 存储库需要身份验证,则需要此参数。虽然 Git 支持 SSH 身份验证,但 Elytron 不支持;因此,目前只能指定要通过 HTTP 或 HTTPS 进行身份验证的凭据,而不是通过 SSH 进行身份验证。此参数不与 本地存储库 一起使用。

使用本地 Git 存储库

要使用本地 Git 存储库,请使用 --git-repo=local 参数启动服务器。您还可以在启动服务器时添加 --git-branch=GIT_BRANCH_NAME 参数,在远程存储库中指定可选分支或标签名称。此参数应命名现有的分支或标签名称,因为如果不存在,则不会 创建该分支或标签名称。如果使用标签名称,请将存储库置于分离的 HEAD 状态,这意味着以后的提交不会附加到任何分支。

以下是使用 本地存储库1.0.x 分支启动服务器的命令示例:

$ EAP_HOME/bin/standalone.sh --git-repo=local --git-branch=1.0.x

如果您使用 参数启动服务器以使用 本地 Git 存储库,JBoss EAP 将检查 jboss.server.base.dir 目录是否已针对 Git 进行了配置。否则,JBoss EAP 会利用现有配置内容在 jboss.server.base.dir 目录中创建并初始化 Git 存储库。JBoss EAP 检查由 --git-branch 参数传递的分支名称。如果未传递该参数,它将检查 master 分支。初始化后,您应该会看到单机服务器内容的基础目录中的 a .git/ 目录和 a.gitignore 文件。

使用远程 Git 存储库

要使用远程 Git 存储库,请使用 --git-repo=REMOTE_REPO 参数启动服务器。参数的值可以是您手动添加到本地 Git 配置的 URL 或远程别名。

您还可以在启动服务器时添加 --git-branch=GIT_BRANCH_NAME 参数,在远程存储库中指定可选分支或标签名称。此参数应命名现有的分支或标签名称,因为如果不存在,则不会创建该分支或标签名称。如果使用标签名称,请将存储库置于分离的 HEAD 状态,这意味着以后的提交不会附加到任何分支。

如果您的 Git 存储库需要身份验证,那么在启动服务器时,还必须添加 --git-auth=AUTH_FILE_URL 参数。此参数应当是 Elytron 配置文件的 URL,其中包含连接 Git 存储库所需的凭据。以下是可用于身份验证的 Elytron 配置文件的示例:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <authentication-client xmlns="urn:elytron:client:1.2">
    <authentication-rules>
      <rule use-configuration="test-login">
      </rule>
    </authentication-rules>
    <authentication-configurations>
      <configuration name="test-login">
        <sasl-mechanism-selector selector="BASIC" />
        <set-user-name name="eap-user" />
        <credentials>
          <clear-password password="my_api_key" />
        </credentials>
        <set-mechanism-realm name="testRealm" />
      </configuration>
    </authentication-configurations>
  </authentication-client>
</configuration>
注意

虽然 Git 支持 SSH 身份验证,但 Elytron 不支持;因此,目前只能指定要通过 HTTP 或 HTTPS 进行身份验证的凭据,而不是通过 SSH 进行身份验证。

以下是使用 full 配置文件启动服务器的命令示例,它使用远程 eap-configuration 存储库的 1.0.x 分支,并将 URL 传递到包含身份验证凭据的 Elytron 配置文件。

$ EAP_HOME/bin/standalone.sh --git-repo=https://github.com/MY_GIT_ID/eap-configuration.git --git-branch=1.0.x --git-auth=file:///home/USER_NAME/github-wildfly-config.xml --server-config=standalone-full.xml

如果您使用 参数启动服务器以使用远程 Git 存储库,JBoss EAP 会检查 jboss.server.base.dir 目录是否已针对 Git 进行了配置。否则,JBoss EAP 将删除 jboss.server.base.dir 目录中的现有配置文件,并将它们替换为远程 Git 配置数据。JBoss EAP 检查由 --git-branch 参数传递的分支名称。如果未传递该参数,它将检查 master 分支。这个过程完成后,您应该会在单机服务器内容的基础目录中看到 a .git/ 目录和 a.gitignore 文件。

警告

如果您稍后启动服务器传递与最初使用的 --git-repo URL 或 --git-branch 名称不同的服务器,您将在尝试启动服务器时看到错误消息 java.lang.RuntimeException: WFLYSRV0268: Failed to pull repository GIT_REPO_NAME。这是因为 JBoss EAP 尝试从与 jboss.server.base.dir 目录中当前配置的仓库和分支不同的存储库和分支中提取配置数据,而 Git 拉取会导致冲突。

使用 Git 时发布远程配置数据

您可以使用管理 CLI 发布配置 操作将您的 Git 存储库更改推送到远程存储库。由于当您启动服务器时,JBoss EAP 会在启动过程中从远程 Git 存储库提取配置,这允许您在多个服务器之间共享配置数据。您只能将此操作用于远程存储库。它不适用于本地存储库。

以下管理 CLI 操作将配置数据发布到远程 eap-configuration 存储库:

:publish-configuration(location="=https://github.com/MY_GIT_ID/eap-configuration.git")
{"outcome" => "success"}
通过 Git 使用快照

除了使用 Git 提交历史记录来跟踪配置更改外,您还可以生成快照以在特定时间点保留配置。您可以列出快照并删除快照。

使用 Git 时生成快照

快照作为标签存储在 Git 中。您可以在 take-snapshot 操作上将快照标签名称和提交消息指定为参数。

以下管理 CLI 操作将拍摄快照,并将其命名为"snapshot-01"标签。

:take-snapshot(name="snapshot-01", comment="1st snapshot")
{
    "outcome" => "success",
    "result" => "1st snapshot"
}
使用 Git 列出快照

您可以使用 list-snapshots 操作列出所有快照标签。

以下管理 CLI 操作列出了快照标签:

:list-snapshots
{
    "outcome" => "success",
    "result" => {
        "directory" => "",
        "names" => [
            "snapshot : 1st snapshot",
            "refs/tags/snapshot-01",
            "snapshot2 : 2nd snapshot",
            "refs/tags/snapshot-02"
        ]
    }
}
使用 Git 删除快照

您可以通过在 delete-snapshot 操作上传递标签名称来删除特定的快照。

以下管理 CLI 操作将使用标签名称 "snapshot-01" 删除快照。

:delete-snapshot(name="snapshot-01")
{"outcome" => "success"}