なぜ春のCloud Config Serverは良いCI/CDパイプラインにとって重要である( PT 1 )



導入


私は大規模なエンタープライズレベルのソフトウェアを開発する前に、私は完全に統合テスト、自動ビルドプロセスや共有ライブラリのようなものの値を理解していない.
小さなアプリケーションのために私は私の間に構築coding bootcamp , 私のフロントエンドアプリケーションはバックエンドのカウンターパートとそのデータベースに話をすることができました.
私は2つの環境を持っていました:私が私のプロジェクト・ポートフォリオを主催した私のラップトップと私のAWSプロダクション環境の私のローカル開発環境、そして、それはかなり単純でした.そして、完全に手動で、プロセス(良い試行錯誤を伴う)が接続されたパズルの断片を得るために処理しました.
13のマイクロサービスによって支持されたアプリケーションを維持して、改善することの私のソフトウェア工学仕事への速い数ヵ月前.いいえ、冗談ではありません.はい、すべての13は、このアプリケーションの作業に重要です.
私は私のチームのtest driven development (TDD) , アジャイルプロセスはまた、新しい機能が生産にそれを作る前に、4つの異なる開発環境を持っていますか?EYP :ローカル開発スペース、QAスペース、Q 1スペース、受け入れスペース、最終的に我々の生産スペース.
それで、それについて考えてください:彼らが生産への彼らの方法で開発プロセスを通って動くので、手動でこれらのサービスの一人一人を更新しなければならないのは、意味がありますか?もちろんありません.
あなたは、これらの環境変数を更新する自動化方法を集中し、簡単にする必要があります.これは、クラウド構成サーバーが輝くことができます.
簡単な概要を与えるために、クラウドコンフィグサーバは以下のように設計されています.

“Provide server and client-side support for externalized configuration in a distributed system. With the Config Server you have a central place to manage external properties for applications across all environments.”

- Spring Cloud Config


基本的に、コンフィグサーバーでは、アプリケーションがLifeCycleに関係なく、すべての環境で実行する必要がある変数を外部に格納することができます.

見よ、春の雲.
私が導入された最初の設定サーバはSpring Cloud Config 私のチームは、多くのJava Spring Boot Backend MicroServiceとJavaScriptノードで構成された完全なスタックアプリケーションを担当しています.JSフロントエンドマイクロサービス.

設定サーバの設定


設定サーバーの設定は実際にはかなり簡単です.
始めるには、あなたはSpring Initializr site , 追加Config Server プロジェクトへの依存として、ブラウザで「プロジェクトを生成」ボタンをクリックします.

I’ll also add that, at least at the time I’m writing this, the Spring Cloud Config Server is not compatible with Spring Boot version 2 (I found this out the hard way), so choose the highest Spring Boot version 1 snapshot you can.



これはあなたのSpring Cloud Config Serverを走らせるために必要です.スプリングブートのバージョンは1.5.14で、2.0.2ではありません.
したら、プロジェクトをダウンロードして選択のあなたのIDEでそれを開いてIntelliJ ), メインのアプリケーションファイルに直接行くことができます@EnableConfigServer and @SpringBootApplication 春のブートの注釈、あなたはほとんど行く準備が整いました.
以下は私の実際のメインメソッドファイルです.
package com.myExampleConfigServer; 
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer; 

@EnableConfigServer
@SpringBootApplication

public class MyExampleConfigServerApplication {  
  public static void main(String[] args) {
    SpringApplication.run(MyExampleConfigServerApplication.class, args); 
    }
}
設定する必要のある他のファイルはapplication.yml あなたのファイルresources/ フォルダ.このファイルは、クラウド設定サーバのGithubへのアクセスを設定し、アプリケーション構成変数を提供するためのGithubファイルを設定します.
あなたが見ることができるように、あなたのgithub URL(私は1分で戻ってくる)、ユーザー名とパスワードのための場所があります.
我々のアプリケーションが主催されるのでPivotal Cloud Foundry , 私たちはいわゆるVCAP services ( VMwareのクラウド・アプリケーション・プラットフォームである).PCF内のそのスペースにアクセスできる人々(およびアプリケーション)だけがアクセスすることができる環境変数が格納されるサービスを言うファンシーな方法です.これにより、サービスアカウントやパスワードのような機密情報をどこかに設定します.
はい、こちらapplication.yml . これらの2つのファイルを設定し、サーバーをホストするクラウドプラットフォームを使用すると、設定サーバーを使用して起動する準備が整いました.
アプリケーション.気象研
server:  
  port:
    8888

spring:  
  application:    
    name: myexample-config-server  

cloud:    
  config:      
    server:        
      git:          
        uri: ${vcap.services.config-service.credentials.url}
        username: ${vcap.services.config-service.credentials.user}          
        password: ${vcap.services.config-service.credentials.token}
あなたがコンフィグサーバーアプリの例を見たいと思うならば、私はスタータープロジェクトを置きましたhere in GitHub .
OKなので、設定サーバを持っています.大丈夫、今すぐあなたのconfigサーバーのプロパティを設定する時間- configサーバーは実際にあなたのプロジェクトの環境変数をプルにアクセスします.

設定サーバープロパティの設定


この部分は皮肉です.Githubで完全に空の新しいREPOを作成し、次の命名規則を使用して新しいファイルを作成します.
[application name]-[life cycle profile].yml

ex. my-app-to-config-QA.yml
このYAMLファイル内で、アプリケーションの設定プロパティを追加できます.あなたがYAMLに含めるかもしれない若干のサンプル情報は、ここにあります.
設定QAへの私のアプリ.気象研
configurations:
  featureToggleFlag: true
  my-custom-flag: false
  sampleCronJob: "0 0 1 * * *"
  sampleUrl: http://google.com
このファイルをgithub repoにコミットし、そのレポURLをコピーし、設定サーバのapplication.yml . 今、サーバーはどこに使用する設定ファイルのGithubを見て知っている.
configプロパティの例を見ることができますhere in GitHub .

Java Spring Bootアプリケーションの設定


サーバーにプロジェクトを提供したい設定サーバーとプロパティを使用すると、春のブートサービスが起動したときにこれらのプロパティを取得できるプロジェクトが必要です.
再び、この作業を得るために多くのオーバーヘッドがありません.にbuild.gradle これらの設定サーバ値を必要とするアプリケーションのファイルには、以下の依存関係が必要です.
ビルド.グラグラ
compile group: 'org.springframework.cloud', name: 'spring-cloud-starter-config', version:'1.3.3.RELEASE'
compile group: 'org.springframework.boot', name: 'spring-boot-configuration-processor', version: "${springBootVersion}"
それから、あなたはbootstrap.yml あなたのそばに住むファイルapplication.yml あなたのファイルsrc/main/resources/ そして、どこにそれがホストされているかについて、コンフィグサーバーの位置を指し示す情報を含みます.次のようになります.
ブートストラップ.気象研
spring:
  application:
    name: ##APPLICATION NAME GOES HERE##
  cloud:
    config:
      uri: https://myexample-config-server.non-prod.com
---
spring:
  profiles: production
  cloud:
    config:
      uri: https://myexample-config-server.prod.com
次に、実際にconfigプロパティを必要とするファイルに移動し、注釈を追加します@Configuration and @ConfigurationProperties(prefix=”configurations") (あるいは、configプロパティに設定されている設定をYAMLで設定します.
以下に例を示します:
xyzproperties.ジャバ
@Configuration
@ConfigurationProperties(prefix = "configurations")
public class ConfigProperties {

}
通知すると、プロパティはconfigurations . これらのプロパティをConfigPropertiesクラスにバインドするには、まず"prefix"@ConfigurationProperties 注釈:
縛る“featureToggleFlag” プロパティを次のメンバー変数を追加します.ゲッターとセッターとともに.または使用Lombok ’s @NoArgsConstructor そして、ゲッターとセッターをスキップします-あなたの選択.
xyzproperties.ジャバ
@Configuration
@ConfigurationProperties(prefix = "configurations")
public class ConfigProperties {
   private boolean featureToggleFlag;

   //Add Getters and Setters here if desired...

}
メンバー変数名をConfigurationプロパティの実際のプロパティ名と一致させると、Springはメンバー変数に自動的にバインドされます.これまでのところ良い.
あなたがサービスを始める前にしなければならない最後のことは、あなたがセットしたことを保証することですSPRING_PROFILES_ACTIVE 適切な設定プロパティ環境に.現在の値は“QA” QA環境“Q1” Q 1環境では、“prod” 生産など.注意してください.これらの値は大文字小文字を区別します.ですから、configプロパティファイルに名前を付けたが、"Active Profiles" Intellijのスタートスクリプト設定の入力.
IntelliJでは、実行するスプリングブートプロジェクトを設定するときに「編集構成」プロパティーをクリックし、正しい値を"Active Profiles" 設定モードの途中で入力します.

IntelliJ Run構成内で、“アクティブプロファイル”入力にこの行を追加します.
そしてそれです.
さて、春のブートサービスを起動すると、次のようになりますSpring Profile ログに設定されていることを確認するにはSystem.out.println それが正常にコンフィグサーバーに到達し、必要なプロパティを取得した場合をお知らせします.
素晴らしい、私たちはコンフィグサーバーを構築しました、我々は集中した場所にあなたのスプリング・ブート・プロジェクトから環境変数を動かしました.したがって、変更は速く作られることができます、そして、我々は設定サービスからそれらの変数を引くためにJavaサービスを構成しました.うまくやった.

コンフィグサーバーとノード。js


しかし、JavaScript/ノードと同じことをします.JSプロジェクト?同じスプリングブートConfig Serverを使用できますか?または別のノードベースの設定サーバーを設定する必要がありますか?
あなたは既存のものを使用することができます、そして、私はそれをセットアップする方法をあなたに示します、そして、どのようにあなたはJavaScriptプロジェクトでそれを使用するかもしれなくてnext post .
数週間後にチェックしてください-私はJavaScript、反応、IOT、またはWeb開発に関連する何かについての詳細を書くでしょう.
あなたが私が書く記事を決して逃しないことを確認したいならば、ここの私の会報のサインアップ:https://www.paigeniedringhaus.substack.com
読書ありがとう!

更なる引用と資源

  • Spring Cloud Config Initializr
  • Sample Cloud Config Server Repo
  • Sample Cloud Config Properties Repo