微信公衆番号テスト生産環境分離実践

5914 ワード

微信公衆番号テスト生産環境分離実践


背景


最近、微信の公衆番号を開発し、一部の機能がオンラインになった後、オンラインの正常な使用に影響を与えないことを保証するために、新しい機能の開発テストで出会った問題と解決すべき問題は以下の通りである.
  • 微信公衆番号高級インタフェース(授権、支払いなど)を呼び出すにはドメイン名アクセスを構成する必要があり、ローカルテストは煩雑で、オンラインで配置されたリンクをカバーすることができず、既存のサービスに影響を与える
  • 公衆番号フロントエンド業務ロジックはキャッシュクッキーに関し、テストと生産環境のクッキーが衝突しないことを保証する必要がある
  • .
  • デマンド側にデモンストレーションテストdemoを行い、オンラインになるサブメニューなどとのインタラクションを保証し、コミュニケーション効率を向上させることが望ましい.
  • テストデータ(データベース、redisキャッシュ、ログなどを含む)は、オンラインデータから
  • 分離する.
  • テスト環境はオンライン配置と分離し、互いに影響しないことを保証し、オンラインの高可用性
  • を高める.
  • テスト環境と生産環境の自動化配置を実現し、開発テストの効率を高める
  • ソリューション


    公衆番号のテストとドメイン名のテストを申請する


    需要者にテストdemoをプレゼンテーションし、オンラインになるインタラクティブな体験と一致することを保証するために、最も簡単な案は公衆番号を再申請してテストのために使用することだと考えています(幸いにも学校研究院の名義で、個人的に申請しないとだめです.,);また、フロントエンドクッキーが2つの公衆番号で衝突しないことを保証するため、テスト時に生産環境とは異なる2級ドメイン名を使用し、クッキー隔離を行う

    バックエンドの構成の分離


    現在、クラウドサーバが1台しかないため、バックグラウンドエンジニアリングの構成が分離されています.テストと生産エンジニアリングのポート番号、データベース、redisライブラリ、微信開発者IDと鍵、ログが含まれています.
    プロジェクトはspringbootを使用しており、プロファイルディレクトリは次のように断面されています.
    プロジェクトをローカル(dev)、テスト(online-test)、生産(online)の3つの環境に分け、アプリケーションに協力する.propertiesベースプロファイルは、環境に関する変数を対応するpropertiesに書き込む分離するために使用され、以下にアプリケーション-online-testを挙げる.propertiesの構成内容:
    注意:データベースの分離は、新しい異なるライブラリを作成してアクセスを区別し、redisはライブラリ番号でアクセスを区別し、ログはログ名で区別します.

    バックエンドの配置の分離


    バックエンド配置スクリプトによって実行されるプロセスは、次のとおりです.
  • mavenを使用してjarを生成する(本プロジェクトはspringbootにtomcatを内蔵し、生成したjarを直接実行すればバックグラウンドサービスを提供できる)
  • クラウドサーバ上でkillスクリプトを実行し、置換するjarプロセス
  • を殺して削除する
  • 新しいjarパッケージをクラウドサーバに転送し、対応するjarの起動スクリプトを実行します(起動スクリプトにはjarがバックグラウンドで実行され、対応するアプリケーション-?.propertiesのファイルを指定することを含む)
  • クラウドサーバが1台しかないため、テストと本番環境のjarを区別する必要があります.使用するシナリオは、2つの環境で異なる名前のjarを生成することです.これにより、killスクリプトと起動スクリプトが名前でjarを区別し、配置の分離実行を行い、互いに影響しません.
    mavenを使用して異なるjar名を生成するにはpomを変更する必要がある.xml
    
         
             online-test
             
                 " jar "
             
         
         
             online
             
                 " jar "
             
         
     
     
     
         ${project.name} // project.name profile properties 
    ..... 
     
    

    最後にコマンドmvn clean package-Ponline-test-ドマvenを実行します.test.skip=true,-Pの後にprofileのid名を付けて、異なる名前のjarを生成することができます
    最後にクラウドサーバの起動スクリプトを実行すると、新しいjarサービスが起動します.
    nohup java -jar  'jar ' --spring.profiles.active=' (online online-test)'> /dev/null 2>&1 &
    

    フロントエンドの配置分離


    フロントエンドの構成変数には、リクエストテストが本番ポート番号と異なり、ドメイン名が異なり(ライセンスなどのリダイレクトリンクの違いに関連)、微信公衆番号のIDが異なる.
    コードはこれらの変数をグローバルに1つの呼び出しに書き、スイッチ注釈によって分離制御する.

    フロントエンドの配置の分離


    単一のクラウドサーバを使用するため、テストと生産環境のフロントエンドエンジニアリングは80ポートまで使用する必要があります.微信の高度なインタフェースには80ポートプログラム呼び出ししか許可されていないものがあるため、ngnixの構成にはダミーホストを構成するスキームが使用されています.
    具体的な手順は次のとおりです.
  • 容器/etc/nginx/nginxを確保する.confファイルには、include/etc/nginx/conf.d/*があります.conf;
  • コンテナディレクトリ/etc/nginx/conf.d/の下にファイルsite 1を新規作成する.conf,site2.conf、ファイル名は任意、接尾辞名はステップ1の構成と一致する必要がある、ここでは.conf.Site 1は私たちの生産環境プロジェクトを代表し、site 2は私たちのテスト環境プロジェクトを代表し、この文書は以下のように作成されています:
  • server {
        listen 80;
        server_name // 
        root // ;
        index index.html index.htm;
        ... 
    }
    

    フロントエンドエンジニアリングの導入スクリプトプロセスは、コードを対応する構成のディレクトリに置き換え、ngnixをスムーズに再ロードすることです.
    systemctl reload nginx.service  //reload , 
    

    シナリオのまとめ


    新しいテスト公衆番号を申請することによって、異なるドメイン名をサブメニューに配置することで、オンライン公衆番号と同じインタラクションを達成することができ、フロントエンドはバックエンドの異なるインタフェースのサービスにアクセスすることによって、データベース、redisキャッシュ、ログ情報はバックグラウンド構成を通じて生産とテストの完全な分離を実現し、上述の解決策は、列挙し始めたすべての需要点を満たしていると言える.最終的に、前後の導入をスクリプト自動化し、導入時間を節約し、開発テストの効率を向上させます.

    解決すべき問題


    テストと生産環境を分離した後、テストに合格した機能に対してオンラインになる必要がある場合、オンライン上の配置スクリプトを実行する必要がある.この場合、フロントエンドとバックエンドコードの配置は依然としてオンライン上のサービスが一時的に利用できないことを招くが、現在は1台のサーバーしかなく、階調の発表などの戦略を実現してサービスの高利用を高めることは少し難しいように見える.
    実践微信