參考資料: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