Git 后端

默认实现环境仓库使用Git后端,非常方便管理升级和物理环境,以及审计变更。 要更改仓库的位置,你可以设置Spring.cloud.config.server.git.uri配置服务器中的配置属性(例如在application.yml). 如果你用文件:前缀,它应该从本地仓库运行,这样你可以快速轻松地开始,无需服务器。但在这种情况下,服务器直接运行于本地仓库,不进行克隆(即使仓库不空也无关紧要,因为配置服务器从不对“远程”仓库做更改)。 为了扩大配置服务器并使其高度可用,你需要让服务器的所有实例指向同一个仓库,所以只有共享文件系统才能有效。 即使如此,最好还是使用SSH:共享文件系统仓库的协议,使服务器能够克隆该仓库并使用本地工作副本作为缓存。spring-doc.cadn.net.cn

该仓库实现映射了{标签}HTTP 资源的参数到 git 标签(提交 id、分支名或标签)。 如果 git 分支或标签名包含斜杠(),那么 HTTP URL 中的标签应用特殊字符串指定/({特殊字符串})(以避免与其他URL路径的歧义。) 例如,如果标签为福格/巴替换斜杠会得到以下标签:foo({special-string})bar. 特殊字符串的包含({特殊字符串})也可以应用于{应用}参数。 如果你使用命令行客户端如curl,请注意URL中的括号——你应该用单引号('')从shell中转义出来。spring-doc.cadn.net.cn

跳过SSL证书验证

配置服务器对Git服务器SSL证书的验证可以通过设置git.skipSslValidation属性到true(默认为false).spring-doc.cadn.net.cn

spring:
  cloud:
    config:
      server:
        git:
          uri: https://example.com/my/repo
          skipSslValidation: true

设置连接超时

你可以配置配置服务器等待获取HTTP或SSH连接的时间(以秒为单位)。使用该git.timeout属性(默认为5).spring-doc.cadn.net.cn

spring:
  cloud:
    config:
      server:
        git:
          uri: https://example.com/my/repo
          timeout: 4

Git URI 中的占位符

Spring Cloud 配置服务器支持带有占位符的 git 仓库 URL,{应用}{简介}(和{标签}如果你需要,但请记住标签本来就是作为 git 标签应用的)。 因此,您可以通过以下结构支持“每个应用一个仓库”的策略:spring-doc.cadn.net.cn

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/myorg/\{application}

你也可以支持“每个配置文件一个仓库”的策略,采用类似模式,但{简介}.spring-doc.cadn.net.cn

此外,使用特殊字符串({特殊字符串})在你的{应用}参数可以支持多个 如下例所示:spring-doc.cadn.net.cn

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/\{application}

哪里{应用}按需提供以下格式:organization({special-string})application.spring-doc.cadn.net.cn

模式匹配与多仓库

Spring Cloud 配置还支持更复杂的需求,并带有模式 申请和个人资料名称都匹配。 模式格式是一个逗号分隔的列表,包含{application}/{profile}带有万用符的名字(注意,以万能符开头的模式可能需要引用),如下例所示:spring-doc.cadn.net.cn

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/spring-cloud-samples/config-repo
          repos:
            simple: https://github.com/simple/config-repo
            special:
              pattern: special*/dev*,*special*/dev*
              uri: https://github.com/special/config-repo
            local:
              pattern: local*
              uri: file:/home/configsvc/config-repo

如果{application}/{profile}不匹配任何模式,它使用定义的默认URISpring.cloud.config.server.git.uri. 在上述例子中,对于“简单”仓库,模式为简单/*(它只匹配一个名为简单所有资料中都有)。“本地”仓库匹配所有以 开头的应用程序名称当地在所有配置文件中(后缀会自动添加到没有配置文件匹配器的图案上)。/*spring-doc.cadn.net.cn

“简单”示例中使用的“一行”快捷方式只有在唯一需要设置的属性是URI时才可以使用。 如果你需要设置其他内容(凭证、模式等),就必须使用完整表格。

模式仓库中的属性实际上是一个数组,所以你可以使用YAML数组(或者[0],[1],等等,属性文件中的后缀)用于绑定多个模式。 如果你打算运行多个配置文件的应用,可能需要这样做,如下示例所示:spring-doc.cadn.net.cn

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/spring-cloud-samples/config-repo
          repos:
            development:
              pattern:
                - '*/development'
                - '*/staging'
              uri: https://github.com/development/config-repo
            staging:
              pattern:
                - '*/qa'
                - '*/production'
              uri: https://github.com/staging/config-repo
Spring Cloud猜测,包含不以该模式结尾的轮廓的图案,意味着你实际上想匹配以该图案开头的轮廓列表(所以**/分期是 的捷径[“*/舞台”,“*/舞台,*”],依此类推)。 这种情况很常见,比如你需要在本地运行“开发”配置文件,同时远程运行“云”配置文件。

每个仓库还可以选择将配置文件存储在子目录中,搜索这些目录的模式可以指定为搜索路径. 以下示例展示了顶层的一个配置文件:spring-doc.cadn.net.cn

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/spring-cloud-samples/config-repo
          search-paths:
            - foo
            - bar*

在前面的例子中,服务器在顶层和福/子目录以及任何名称以酒吧.spring-doc.cadn.net.cn

默认情况下,服务器在配置时会克隆远程仓库 首先请求。 服务器可在启动时配置克隆这些仓库,如下顶层示例所示:spring-doc.cadn.net.cn

spring:
  cloud:
    config:
      server:
        git:
          uri: https://git/common/config-repo.git
          repos:
            team-a:
                pattern: team-a-*
                cloneOnStart: true
                uri: https://git/team-a/config-repo.git
            team-b:
                pattern: team-b-*
                cloneOnStart: false
                uri: https://git/team-b/config-repo.git
            team-c:
                pattern: team-c-*
                uri: https://git/team-a/config-repo.git

在前面的例子中,服务器在启动时克隆了team-a的config-repo,在它之前 接受任何请求。 所有其他仓库在请求仓库配置前不会被克隆。spring-doc.cadn.net.cn

在配置服务器启动时设置库被克隆,有助于在配置服务器启动时快速识别配置错误的配置源(如仓库URI无效)。 跟cloneOnStart如果配置源未启用,配置服务器可能成功启动时配置源配置错误或无效,直到应用程序请求该配置源配置时才会检测到错误。

认证

要在远程仓库上使用 HTTP 基础认证,请添加用户名密码属性分别(不在URL中),如下示例所示:spring-doc.cadn.net.cn

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/spring-cloud-samples/config-repo
          username: trolley
          password: strongpassword

如果你不使用 HTTPS 和用户凭证,SSH 在默认目录中存储密钥时也能正常使用 (~/.嘘URI指向SSH位置,例如[email protected]:configuration/cloud-configuration. 重要的是,Git 服务器的条目必须存在于~/.嘘/known_hosts文件,并且它已经在SSH-RSA格式。 其他格式(如ECDSA-SHA2-NISTP256)不被支持。 为避免意外,应确保known_hostsGit服务器的文件,并且它与你提供给配置服务器的URL匹配。 如果你在URL中使用主机名,你希望在known_hosts文件。 仓库是通过JGit访问的,所以你找到的任何相关文档都应该适用。 HTTPS代理设置可以在~/.git/config或者(与其他JVM进程相同)用 系统属性(-Dhttps.proxyHost-Dhttps.proxyPort).spring-doc.cadn.net.cn

如果你不知道你在哪里~/.git目录是,使用git config --global作设置(例如,git config --global http.sslVerify false).

JGit 需要 PEM 格式的 RSA 密钥。下面是一个示例 ssh-keygen(来自 openssh)命令,它将生成一个 corect 格式的密钥:spring-doc.cadn.net.cn

ssh-keygen -m PEM -t rsa -b 4096 -f ~/config_server_deploy_key.rsa

使用 SSH 密钥时,预期的 ssh 私钥必须以 开头-----开始RSA私钥-----.如果密钥以-----开始开启私钥-----那么当 Spring-Cloud-Config 服务器启动时,RSA 密钥将无法加载。错误看起来是:spring-doc.cadn.net.cn

- Error in object 'spring.cloud.config.server.git': codes [PrivateKeyIsValid.spring.cloud.config.server.git,PrivateKeyIsValid]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [spring.cloud.config.server.git.,]; arguments []; default message []]; default message [Property 'spring.cloud.config.server.git.privateKey' is not a valid private key]

要纠正上述错误,必须将RSA密钥转换为PEM格式。上文提供了一个使用openssh生成合适格式新键的示例。spring-doc.cadn.net.cn

使用 AWS CodeCommit 进行认证

Spring Cloud 配置服务器还支持 AWS CodeCommit 认证。 AWS CodeCommit 在命令行使用 Git 时使用认证助手。 该辅助工具不与 JGit 库一起使用,因此如果 Git URI 与 AWS CodeCommit 模式匹配,则会创建 AWS CodeCommit 的 JGit CredentialProvider。 AWS CodeCommit URI 遵循以下模式:spring-doc.cadn.net.cn

https://git-codecommit.${AWS_REGION}.amazonaws.com/v1/repos/${repo}

如果你在 AWS CodeCommit URI 中提供用户名和密码,必须是提供访问仓库的 AWS accessKeyId 和 secretAccessKey。 如果您未指定用户名和密码,accessKeyId和secretAccessKey将通过默认凭证提供者链(Default Credential Provider Chain)获取。spring-doc.cadn.net.cn

如果你的 Git URI 与 CodeCommit URI 模式(如前所述)匹配,你必须在用户名和密码中或默认凭证链支持的某个位置提供有效的 AWS 凭证。 AWS EC2 实例可能会为 EC2 实例使用 IAM 角色spring-doc.cadn.net.cn

Software.amazon.AWSSDK:authJAR是一个可选的依赖。 如果Software.amazon.AWSSDK:authjar 不在你的类路径上,AWS 代码提交凭证提供者也不会被创建,无论 git 服务器的 URI 是什么。

使用 Google Cloud Source 进行身份验证

Spring Cloud 配置服务器还支持针对 Google Cloud Source 仓库进行身份验证。spring-doc.cadn.net.cn

如果你的 Git URI 使用httphttps协议,域名为source.developers.google.com,将使用Google Cloud Source凭证提供商。Google Cloud Source 仓库的 URI 格式为source.developers.google.com/p/${GCP_PROJECT}/r/${REPO}.要获取仓库的URI,请在Google Cloud Source界面中点击“克隆”,选择“手动生成凭证”。不要生成任何凭据,只需复制显示的URI。spring-doc.cadn.net.cn

Google Cloud Source 的凭证提供商将使用 Google Cloud Platform 应用的默认凭证。请参阅 Google Cloud SDK 关于如何为系统创建应用默认凭证的文档。这种方法适用于开发环境中的用户账户和生产环境中的服务账户。spring-doc.cadn.net.cn

com.google.auth:google-auth-library-oauth2-http是一个可选的依赖。 如果谷歌认证库-OUs2-HTTPjar 不在你的类路径上,Google Cloud Source 凭证提供者也不会被创建,无论 git 服务器的 URI 是多少。

使用属性进行 Git SSH 配置

默认情况下,Spring Cloud 配置服务器使用的 JGit 库使用 SSH 配置文件,例如~/.嘘/known_hosts/等等/嘘/ssh_config当通过SSH URI连接到Git仓库时, 在云环境中,如 Cloud Foundry,本地文件系统可能是短暂的或不易访问的。 在这种情况下,可以通过 Java 属性设置 SSH 配置。 为了激活基于属性的SSH配置,spring.cloud.config.server.git.ignoreLocalSshSettings属性必须设置为true如下例所示:spring-doc.cadn.net.cn

  spring:
    cloud:
      config:
        server:
          git:
            uri: [email protected]:team/repo1.git
            ignoreLocalSshSettings: true
            hostKey: someHostKey
            hostKeyAlgorithm: ssh-rsa
            privateKey: |
                         -----BEGIN RSA PRIVATE KEY-----
                         MIIEpgIBAAKCAQEAx4UbaDzY5xjW6hc9jwN0mX33XpTDVW9WqHp5AKaRbtAC3DqX
                         IXFMPgw3K45jxRb93f8tv9vL3rD9CUG1Gv4FM+o7ds7FRES5RTjv2RT/JVNJCoqF
                         ol8+ngLqRZCyBtQN7zYByWMRirPGoDUqdPYrj2yq+ObBBNhg5N+hOwKjjpzdj2Ud
                         1l7R+wxIqmJo1IYyy16xS8WsjyQuyC0lL456qkd5BDZ0Ag8j2X9H9D5220Ln7s9i
                         oezTipXipS7p7Jekf3Ywx6abJwOmB0rX79dV4qiNcGgzATnG1PkXxqt76VhcGa0W
                         DDVHEEYGbSQ6hIGSh0I7BQun0aLRZojfE3gqHQIDAQABAoIBAQCZmGrk8BK6tXCd
                         fY6yTiKxFzwb38IQP0ojIUWNrq0+9Xt+NsypviLHkXfXXCKKU4zUHeIGVRq5MN9b
                         BO56/RrcQHHOoJdUWuOV2qMqJvPUtC0CpGkD+valhfD75MxoXU7s3FK7yjxy3rsG
                         EmfA6tHV8/4a5umo5TqSd2YTm5B19AhRqiuUVI1wTB41DjULUGiMYrnYrhzQlVvj
                         5MjnKTlYu3V8PoYDfv1GmxPPh6vlpafXEeEYN8VB97e5x3DGHjZ5UrurAmTLTdO8
                         +AahyoKsIY612TkkQthJlt7FJAwnCGMgY6podzzvzICLFmmTXYiZ/28I4BX/mOSe
                         pZVnfRixAoGBAO6Uiwt40/PKs53mCEWngslSCsh9oGAaLTf/XdvMns5VmuyyAyKG
                         ti8Ol5wqBMi4GIUzjbgUvSUt+IowIrG3f5tN85wpjQ1UGVcpTnl5Qo9xaS1PFScQ
                         xrtWZ9eNj2TsIAMp/svJsyGG3OibxfnuAIpSXNQiJPwRlW3irzpGgVx/AoGBANYW
                         dnhshUcEHMJi3aXwR12OTDnaLoanVGLwLnkqLSYUZA7ZegpKq90UAuBdcEfgdpyi
                         PhKpeaeIiAaNnFo8m9aoTKr+7I6/uMTlwrVnfrsVTZv3orxjwQV20YIBCVRKD1uX
                         VhE0ozPZxwwKSPAFocpyWpGHGreGF1AIYBE9UBtjAoGBAI8bfPgJpyFyMiGBjO6z
                         FwlJc/xlFqDusrcHL7abW5qq0L4v3R+FrJw3ZYufzLTVcKfdj6GelwJJO+8wBm+R
                         gTKYJItEhT48duLIfTDyIpHGVm9+I1MGhh5zKuCqIhxIYr9jHloBB7kRm0rPvYY4
                         VAykcNgyDvtAVODP+4m6JvhjAoGBALbtTqErKN47V0+JJpapLnF0KxGrqeGIjIRV
                         cYA6V4WYGr7NeIfesecfOC356PyhgPfpcVyEztwlvwTKb3RzIT1TZN8fH4YBr6Ee
                         KTbTjefRFhVUjQqnucAvfGi29f+9oE3Ei9f7wA+H35ocF6JvTYUsHNMIO/3gZ38N
                         CPjyCMa9AoGBAMhsITNe3QcbsXAbdUR00dDsIFVROzyFJ2m40i4KCRM35bC/BIBs
                         q0TY3we+ERB40U8Z2BvU61QuwaunJ2+uGadHo58VSVdggqAo0BSkH58innKKt96J
                         69pcVH/4rmLbXdcmNYGm6iu+MlPQk4BUZknHSmVHIFdJ0EPupVaQ8RHT
                         -----END RSA PRIVATE KEY-----

下表描述了SSH的配置属性。spring-doc.cadn.net.cn

表1。SSH 配置属性
物业名称 言论

ignoreLocalSshSettingsspring-doc.cadn.net.cn

如果true,使用基于属性而非文件的SSH配置。必须设置为spring.cloud.config.server.git.ignoreLocalSshSettings而不是在仓库定义内。spring-doc.cadn.net.cn

私钥spring-doc.cadn.net.cn

有效的SSH私钥。必须设置为ignoreLocalSshSettings是真的,Git URI是SSH格式。spring-doc.cadn.net.cn

hostKeyspring-doc.cadn.net.cn

有效的SSH主机密钥。必须设置为hostKeyAlgorithm也已设定。spring-doc.cadn.net.cn

hostKeyAlgorithmspring-doc.cadn.net.cn

其中之一SSH-DSS、SSH-RSA、SSH-ED25519、ECDSA-SHA2-NISTP256、ECDSA-SHA2-NISTP384,或ECDSA-SHA2-NISTP521.必须设置为hostKey也已设定。spring-doc.cadn.net.cn

严格HostKeyCheckingspring-doc.cadn.net.cn

truefalse.如果为假,则忽略带有主密钥的错误。spring-doc.cadn.net.cn

已知HostsFilespring-doc.cadn.net.cn

习俗所在地.known_hosts文件。spring-doc.cadn.net.cn

优先认证spring-doc.cadn.net.cn

覆盖服务器认证方法顺序。如果服务器在公钥方法。spring-doc.cadn.net.cn

Git 搜索路径中的占位符

Spring Cloud 配置服务器还支持带有占位符的搜索路径{应用}{简介}(和{标签}如果 你需要它),如下示例所示:spring-doc.cadn.net.cn

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/spring-cloud-samples/config-repo
          search-paths: '\{application}'

上述列表会在仓库中搜索与目录同名的文件(以及顶层)。 万用符在带有占位符的搜索路径中也有效(任何匹配的目录都包含在搜索中)。spring-doc.cadn.net.cn

在 Git 仓库中的强制拉取

如前所述,Spring Cloud 配置服务器会克隆远程git仓库,以防本地副本脏了(例如, 通过作系统进程更改文件夹内容),导致 Spring Cloud 配置服务器无法从远程仓库更新本地副本。spring-doc.cadn.net.cn

为了解决这个问题,有一种方法力拉该属性使 Spring Cloud 配置服务器在本地副本脏时强制从远程仓库拉取,如下示例所示:spring-doc.cadn.net.cn

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/spring-cloud-samples/config-repo
          force-pull: true

如果你有多个仓库配置,可以配置力拉每个仓库的属性,如下示例所示:spring-doc.cadn.net.cn

spring:
  cloud:
    config:
      server:
        git:
          uri: https://git/common/config-repo.git
          force-pull: true
          repos:
            team-a:
                pattern: team-a-*
                uri: https://git/team-a/config-repo.git
                force-pull: true
            team-b:
                pattern: team-b-*
                uri: https://git/team-b/config-repo.git
                force-pull: true
            team-c:
                pattern: team-c-*
                uri: https://git/team-a/config-repo.git
默认值力拉财产是false.

删除 Git 仓库中未追踪的分支

因为 Spring Cloud 配置服务器有远程 git 仓库的克隆版 在将分支检查到本地仓库(例如通过标签获取属性)后,它会保留该分支 永远或者直到下一次服务器重启(那时会创建新的本地仓库)。 所以可能存在远程分支被删除但本地副本仍可供取用的情况。 如果 Spring Cloud 配置服务器客户端服务以--spring.cloud.config.label=deletedRemoteBranch,master它会从中获取属性deletedRemoteBranch本地分支,但不是来自主人.spring-doc.cadn.net.cn

为了保持本地仓库分支的清洁并支持远程——deleteUntrackedBranches属性可以被设置。 它会让 Spring Cloud 配置服务器强制删除本地仓库中未被追踪的分支。 例:spring-doc.cadn.net.cn

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/spring-cloud-samples/config-repo
          deleteUntrackedBranches: true
默认值deleteUntrackedBranches财产是false.

Git 刷新率

你可以控制配置服务器获取更新配置数据的频率 通过使用spring.cloud.config.server.git.refreshRate.这 该性质的值以秒为单位。默认值为0,意味着 配置服务器每次都会从Git仓库获取更新后的配置 请求。如果值为负数,刷新不会发生。spring-doc.cadn.net.cn

默认标签

Git 的默认标签是主要.如果你不设置spring.cloud.config.server.git.defaultLabel以及一个名为主要不存在,配置服务器默认也会尝试借用一个名为主人.如果 你想禁用可以设置的 Refback Branch 行为spring.cloud.config.server.git.tryMasterBranchfalse.spring-doc.cadn.net.cn

在容器中使用 Git 运行配置服务器

如果你正在获得一个java.io.IOException当配置服务器在类似于以下容器中运行时:spring-doc.cadn.net.cn

2022-01-03 20:04:02,892 [tributeWriter-2] ERROR org.eclipse.jgit.util.FS$FileStoreAttributes.saveToConfig - Cannot save config file 'FileBasedConfig[/.config/jgit/config]'
java.io.IOException: Creating directories for /.config/jgit failed

您必须以下其中之一:spring-doc.cadn.net.cn

  1. 在容器内为用户提供一个可写的主目录。spring-doc.cadn.net.cn

  2. 设置环境变量XDG_CONFIG_HOME在容器内部指向一个 Java 进程拥有写权限的目录。spring-doc.cadn.net.cn