参考资料:html
http://cloud.spring.io/spring-cloud-static/Camden.SR7/#_environment_repositorygithub
Git Backend——Git后端spring
EnvironmentRespository的默认实现使用Git后端,这对于管理升级和环境检查以及审核更改很是方便。shell
要更改存储库的位置,能够在配置服务器中设置"spring.cloud.config.server.git.uri"配置属性(例如,在applicaton.yml中)后端
若是使用 file: 前缀进行设置,则应该从本地存储运行,这样就能够在没有服务器的状况下快速轻松的工做,可是这种状况下,服务器会直接在本地存储库上运行而不克隆它(没关系,由于配置服务器永远不会更改"remote"存储库)。数组
要扩展配置服务器并使其高度可用,须要将服务的全部实例指向同一个存储库,所以只有共享文件系统才能工做。即便在这种状况下,对共享文件系统存储库使用ssh: 协议更好,以便服务器能够克隆它而且使用本地工做服务做为缓存。缓存
该存储库实现将HTTP资源的{label}参数隐射到git标签(commit id,分支名称或标签)。服务器
若是git分支或标签名称包含斜线("/"),则应该使用特殊字符串 "(_)"来指定HTTP URL中标签(以免与其余URL路径混淆)。例如,若是标签为 foo/bar ,则提换斜杠将致使标签看起来像 foo(_)bar。app
包含特殊字符串"(\_)"也能够应用于{application}参数。
若是使用像curl这样的命令行客户端(例如使用引号将其从shell中转出来),请当心URL中的方括号。
Placeholders in Git URI——Git URI中的占位符
Spring Cloud Config Server支持一个带有 {application} 和 {profile} (以及{label},若是须要的话。可是请记住,标签不管如何是做为一个git标签来应用的)的占位符的git仓库URL。
所以,你能够轻松支持使用"一个应用程序一个repo"策略,例如:
spring: cloud: config: server: git: uri: https://github.com/myorg/{application}
或者使用类型模式可是使用{profile}的"每个profile一个repo"策略。
另外,在{application}参数中使用特殊字符串“(\_)”能够启用对多个组织的支持,例如:
spring: cloud: config: server: git: uri: https://github.com/{application}
其中,{application}在请求时以"organization(\_)application"格式提供。
Pattern Matching and Multiple Repositories——模式匹配和多个存储库
模式格式是带有通配符的{application} 和{profile}名称的逗号分割列表(可能须要引用以通配符开始的模式)。例如:
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}与任何模式都不匹配,它将使用在"spring.cloud.config.server.git.uri"下定义的默认值。
在上面的例子中,对于"simple"存储库,匹配模式是"simple/*"(即,全部的配置文件中只匹配一个名为"simple"的应用程序)。"local"存储库与全部配置文件中以"local"开头的全部应用程序名称匹配("/*"后缀自动添加到没有配置文件匹配器的任何模式中)。
note:在上述“simple”示例中使用的“one-liner”快捷方式只能在惟一要设置的属性为URI的状况下使用。若是您须要设置其余任何内容(凭据,模式等),则须要使用完整的表单.
repo中pattern属性其实是一个数组,所以你可使用YAML数组(或属性文件中的[0],[1]等后缀)绑定到多个模式。若是要运行具备多个配置文件的应用程序,则可能须要执行此操做。例如:
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
note:Spring Cloud将会猜想,包含不以"*"结尾的配置文件的模式意味着你实际上想要匹配以此模式开始的配置文件列表(因此*/staging
是["*/staging","*/staging,*"]
的快捷方式).
每一个存储库还能够将配置文件存储在子目录中,而且能够将搜索这些目录的模式指定为 searchPaths。例如在顶层:
spring: cloud: config: server: git: uri: https://github.com/spring-cloud-samples/config-repo searchPaths: foo,bar*
在此例中,服务在顶层和"foo/"子目录以及名称以"bar"开头的任何子目录中搜索配置文件。
默认状况下,服务器首次请求配置时克隆远程存储库。能够将服务器配置为在启动时克隆存储库。例如在顶层:
spring: cloud: config: server: git: uri: https://git/common/config-repo.git repos: team-a: pattern: team-a-* cloneOnStart: true uri: http://git/team-a/config-repo.git team-b: pattern: team-b-* cloneOnStart: false uri: http://git/team-b/config-repo.git team-c: pattern: team-c-* uri: http://git/team-a/config-repo.git
在这个例子中,服务其在接受任何请求以前,在启动时克隆 team-a的config-repo。全部其余存储库将不会被克隆,知道从存储库请求配置时。
note:设置当配置服务器在启动时克隆存储库能够帮助在配置服务器启动时快速识别出错误的配置源(例如,无效的存储库URI)。配置源未启用cloneOnStart时,配置服务器可能会启动成功 配置错误或无效的 配置源,并无检测到错误,直到应用程序从该配置源请求配置为止。
Authentication——认证
要在远程存储库上使用HTTP基本认证,请单独添加"username"和"password"属性(不在URL中)。例如:
spring: cloud: config: server: git: uri: https://github.com/spring-cloud-samples/config-repo username: trolley password: strongpassword
若是不使用HTTPS和用户凭证,那么当你将密钥存储在默认目录(~/.ssh)而且uri指向SSH位置时,SSH也应该开箱即用。例如:"git@github.com:configuration/cloud-configuration"
在 ~/.ssh/know_hosts文件中存在Git服务器条目,而且是 ssh-rsa格式,这一点很重要。其余格式(例如: ecdsa-sha2-nistp256
)不支持。
为了不意外,你应该确保在Git服务器的know_hosts
文件中只有一个条目,而且与你提供给配置服务器的URL匹配。
若是你在URL中使用了一个主机名,那么在know_hosts
文件中使用主机名,而不是IP。
使用jGit能够访问存储库,所以你找到的任何文档都应该适用。
HTTPS代理设置能够在~/.git/config中设置,也能够经过系统属性(-Dhttps.proxyHost
和-Dhttps.proxyPort
)以与其余任何JVM进程相同的方式设置HTTPS代理设置。
note:若是你不知道你的~/.git目录在哪,使用git config --global
来操做设置 (例如:git config --global http.sslVerify false
)
Git SSH configuration using properties——使用属性Git SSH配置
默认状况下,当使用SSH URI链接到Git存储库时,Spring Cloud Config使用的JGit库使用SSH配置文件,例如:~/.ssh/known_hosts and /etc/ssh/ssh_config.
在Cloud Foundry等云环境中,本地文件系统多是短暂的或不可访问的。对于这种状况,可使用Java属性来设置SSH配置。为了激活基于属性的SSH配置,必须将spring.cloud.config.server.git.ignoreLocalSshSettings
属性设置为True。例如:
spring: cloud: config: server: git: uri: git@gitserver.com: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配置属性:
Property Name | Remarks |
---|---|
ignoreLocalSshSettings |
If true, use property based SSH config instead of file based. Must be set at as |
privateKey |
Valid SSH private key. Must be set if |
hostKey |
Valid SSH host key. Must be set if |
hostKeyAlgorithm |
One of |
strictHostKeyChecking |
|
knownHostsFile |
Location of custom .known_hosts file |
preferredAuthentications |
Override server authentication method order. This should allow evade login prompts if server has keyboard-interactive authentication before |
Placeholders in Git Search Paths——Git搜索路径中的占位符
Spring Cloud Config Server还支持使用{application}和{profile}(以及{label},若是须要)占位符的搜索路径。例如:
spring: cloud: config: server: git: uri: https://github.com/spring-cloud-samples/config-repo searchPaths: '{application}'
在存储库中搜索与目录同名的文件(以及顶层).通配符在带占位符的搜索路径中也是有效的(搜索中包含任何匹配的目录)
Force pull int Git Repositories——强制拉入Git仓库
如前所述,Spring Cloud Config Server对远程git存储库进行了克隆,若是本地副本不知怎么变脏(例如,文件夹内容由操做系统进程更改),则Spring Cloud Config Server没法从远程存储库更新本地副本。
为了解决这个问题,若是本地副本是脏的,就会有一个强制拉取属性force-pull,使Spring Cloud Config Server从远程存储库强制拉取。例如:
spring: cloud: config: server: git: uri: https://github.com/spring-cloud-samples/config-repo force-pull: true
若是您有多个存储库配置,则能够配置每一个存储库的强制拉取属性force-pull。例如:
spring: cloud: config: server: git: uri: https://git/common/config-repo.git force-pull: true repos: team-a: pattern: team-a-* uri: http://git/team-a/config-repo.git force-pull: true team-b: pattern: team-b-* uri: http://git/team-b/config-repo.git force-pull: true team-c: pattern: team-c-* uri: http://git/team-a/config-repo.git
note:强制拉取属性force-pull的默认值为false