參考資料:
http://cloud.spring.io/spring-cloud-static/Camden.SR7/#_environment_repository
Git Backend——Git後端
EnvironmentRespository的預設實現使用Git後端,這對於管理升級和環境檢查以及稽核更改非常方便。
要更改儲存庫的位置,可以在配置伺服器中設定"spring.cloud.config.server.git.uri"配置屬性(例如,在applicaton.yml中)
如果使用 file: 字首進行設定,則應該從本地儲存執行,這樣就可以在沒有伺服器的情況下快速輕鬆的工作,但是這種情況下,伺服器會直接在本地儲存庫上執行而不克隆它(不要緊,因為配置伺服器永遠不會更改"remote"儲存庫)。
要擴充套件配置伺服器並使其高度可用,需要將服務的所有例項指向同一個儲存庫,因此只有共享檔案系統才能工作。即使在這種情況下,對共享檔案系統儲存庫使用ssh: 協議更好,以便伺服器可以克隆它並且使用本地工作服務作為快取。
該儲存庫實現將HTTP資源的{label}引數隱射到git標籤(commit id,分支名稱或標籤)。
如果git分支或標籤名稱包含斜線("/"),則應該使用特殊字串 "(_)"來指定HTTP URL中標籤(以避免與其他URL路徑混淆)。例如,如果標籤為 foo/bar ,則提換斜槓將導致標籤看起來像 foo(_)bar。
包含特殊字串"(\_)"也可以應用於{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