devopsで複数の環境を管理する方法


ほとんどのdevops設定では、パイプラインに複数の環境があることがわかります.どの分岐が合併されたか、ブランチがリリースのためにタグ付けされるとき、環境を変える条件があるかもしれません.あなたがちょうど生産環境以上のものを持っている理由がいくつかあります.
すべての組織が物事を少し違っていることを心に留めておきなさい.あなたは、ここで覆われているものより多くの環境を見るかもしれません、あるいは、彼らは同じ名前を持っていないかもしれません.重要なのは、それぞれの環境がどのような目的を果たすかを知ることです.サービスに異なるアクセスレベルを持ち、パブリックサイドアクセスを変更します.

あなたが見るかもしれない環境


開発


開発環境は、あなたのローカル環境からのステップアップのようです.それはどこにローカルではなくどこかに動作するかどうかを少し変更を展開できる場所です.この環境に配置するには、コードが完全に動作する必要はありません.新しいエンドポイントがどのようにアプリケーションと統合されているかをテストする必要があります.
あなたはすべての機能やバグにアプローチをテストしている場合、この環境で他の開発者と大きな機能で動作する可能性があります.それはあなたのローカル環境よりも他のサービスにわずかにアクセスできるように高度なサンドボックスのようなものです.

演出


ほとんどの場合、これはあなたのコードが生産に出荷される前に行きます.あなたは、コードレビューを取得する必要がありますし、いくつかの個々のテストを試してみて、すべての機能があることを確認し、任意の退行していない.ステージングに展開される変更はほとんど問題なく動作しなければなりません.
これはあなたの統合テストが実行され、サードパーティ製のサービスは、彼らが必要とする秘密を取得します.一部の企業は、我々が得ることができる生産環境に最も近い環境であるので、ステージングのために完全に別々のサービスをセットアップします.
ステージングにコードがあると、すべてのデータが期待通りに読み込まれ、サービスから正しい応答が得られることを確認できます.これは、カオス工学テストを実行するのに良い場所ですあなたのシステムが利用可能なリソースとどのように頑丈なチェックしてください.利用可能なリソースのステージングサーバーは、通常、生産がどのようなパフォーマンステストのためにそれを維持しているよりも低いです.

QA


あなたは異なるフォームでQA(品質保証)環境を見るでしょう.彼らは通常、ユーザーの視点からアプリケーションを使用してバグや問題を組織的に狩るソフトウェアテストエンジニアのために設定されます.これは多くのエッジケースシナリオが現れるところです.
多くの場合は、複数のQA環境が表示されますし、それらはすべて別の目的に役立ちます.つは、特にエッジケースシナリオのためにセットアップされるかもしれません、もう一つは自動化されたUIテストを走らせるかもしれません、そして、もう一つは、実験されている新しくリリースされた特徴を持っているかもしれません.
これらの環境は多くの異なる名前を取るので、QAに展開する特定のコマンドを持つパイプラインを見ることができないかもしれません.あなたが働いているどんなプロジェクトでも使われるならば、これらの環境の構造を知っているようになってください.

生産


これはコードの最終的な環境です.したら、このサーバーに到達したすべての変更は、顧客が対話するためのライブです.ユーザーエクスペリエンスに影響を与えることなく、ここでできるテストはあまりありません.この時点で、あなたのコードが強いことをテストすることができます.
アップタイムとパフォーマンスがユーザーのためにどれくらいよく働くかについての典型的なメトリクスであるので、生産は最も集中的であるでしょう.あなたが直接生産に展開する必要が非常に少ないケースがあります.つの特定のケースでは、ユーザーに影響を与える主要なバグのためのホットフィックスを取得する可能性があります.
さもなければ、あなたのコード変更を適所にある他の環境に送るのが常に最高です.ほとんどのCI/CDパイプラインは、コードを複数の環境に並列展開し、テストを開始する前にすべての環境を展開するのを待っていません.

環境間でデータを扱う


すべての環境でパリティを保つことは、それらが役に立つままであることが重要です.一貫性が必要な主な領域はデータです.あなたが生産からデータを得ることができて、それを難読化するならば、それは発展する最高のデータです.それは正確にユーザーが見ているが、すべての機密情報の変更またはフィルタアウトされます.
また、可能ならばエッジケースを再現するデータを持つのを助けます.問題がQA環境で来たならば、それは容易に利用できるその問題のためにデータを作る時間の価値があります.これは、特定の環境や他のではない任意の回帰がないことを確認します.
これらの環境でデータを処理する方法が計画されている場合、展開プロセスを高速化するための開発とテストが簡単になります.生産データをコピーしたり変更したりすることはしばらくかかるので、少し前の投資があります.あなたができる場合は、十分なデータをインポートしようとすると、あなたのアプリケーションを期待するように動作します.

各環境の維持


あなたは、各環境が何であるかを知っているので、あなたが考慮する必要がありますいくつかのより多くのことがあります.これらの環境の長期的なメンテナンスでは、アクセスしているかを確認してください.あなたが検閲されたデータを使用しているかもしれない間、誰もがアクセスを必要としないというプロセスとコードがまだあるかもしれません.
もう一つのことは、リソースの割り当てがどのように事前生産環境で処理されるかである.開発とQA環境が生産量と同じ量のサーバー資源を持つことはありそうもない.これは、生産に対処する必要がない異なる制限のセットを導入します.
あなたがパフォーマンスの問題を把握しようとしているか、またはサービスを監視しようとしているとき、あなたの環境を認識してください.これは実際の問題の代わりにデバッグしようとしているかもしれません.キャッシュをクリアして、未使用のバケットを削除し、あなたの実行中のコードを忘れてしまう可能性のある何かを見てください.

CDフェーズの異なる環境への展開


これらのすべての環境に展開したい場合は、おそらく連続配信プロセスの一部になるでしょう.これがあなたのパイプラインでどのように見えるかもしれないかという考えがあるように、ここに例があります.
import conducto as co

def cicd() -> co.Serial:
    image = co.Image("node:current-alpine", copy_dir=".")

    cra_node = co.Exec("npx create-react-app random-demo")
    installation_node = co.Exec("cd random-demo; npm i; CI=true; npm test")
    build_node = co.Exec("npm build")
    staging_node = co.Exec("echo sent build artifact to staging on an AWS server")
    qa_node = co.Exec("echo sent build artifact to QA on a Heroku server")
    prod_node = co.Exec("echo sent build artifact to prod on a Netlify server")
    start_node = co.Exec("npm start")

    pipeline = co.Serial(image=image, same_container=co.SameContainer.NEW)

    pipeline["Make CRA..."] = cra_node
    pipeline["Install dependencies..."] = installation_node
    pipeline["Build project..."] = build_node
    pipeline["Deploy to envs..."] = co.Parallel()
    pipeline["Deploy to envs..."]["Staging"] = staging_node
    pipeline["Deploy to envs..."]["QA"] = qa_node
    pipeline["Deploy to prod..."] = prod_node
    pipeline["Start project..."] = start_node

    return pipeline

if __name__ == "__main__":
  co.main(default=cicd)


その他


それを追跡するのにたくさんのように思えるかもしれませんが、一度、あなたが各環境から期待されることを理解したら、それは単にプロセスの一部です.資格情報とパーミッションが最新に保持され、期待が設定されている限り、複数の環境で作業すると、ユーザーにより良いコードを取得できます.
あなたはより速く異なる人々からのフィードバックを得ることができるでしょうし、より一貫してバグやセキュリティホールを追跡することができます.これは、テストと統合のすべてをスムーズに行くときに実際に生産に行く時間です.
私はこのようなものや他の技術の話題のすべての時間を投稿するので、あなたは私に従うことを確認してください!
あなたが最初にチェックアウトするツールを疑問に思っているなら、あなたのCI/CDパイプラインのConductoを試してみてください.それは非常に簡単に取得し、実行し、それはさらに簡単にデバッグ中に実行中です.