spring-cloud-config-server——Environment Repository(Git Backend)

參考資料:html

  https://cloud.spring.io/spring-cloud-static/spring-cloud-config/1.4.0.RELEASE/single/spring-cloud-config.htmlgit

  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 spring.cloud.config.server.git.ignoreLocalSshSettingsnot inside a repository definition.

privateKey

Valid SSH private key. Must be set if ignoreLocalSshSettings is true and Git URI is SSH format

hostKey

Valid SSH host key. Must be set if hostKeyAlgorithm is also set

hostKeyAlgorithm

One of ssh-dss, ssh-rsa, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384 ,ecdsa-sha2-nistp521. Must be set if hostKey is also set

strictHostKeyChecking

true or false. If false, ignore errors with host key

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 publickey method.

    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

相關文章
相關標籤/搜索