凍結テスト環境を実装するにはどうすればよいですか?


8

統合によって引き起こされるテスト環境での不安定性を継続的に回避するにはどうすればよいですか?」に関する質問への回答の一部を以下に示します。

通常、この環境はテスト中にフリーズします。

私の質問:凍結環境のサンプル実装は何ですか?つまり、誰もが(リリースマネージャーのような承認されたユーザーによって許可されている場合を除いて)そのようなフリーズされた環境では何も変更できないように技術的に強制するために何ができますか。

明確化

  • 銀行での年末処理中(例)の「凍結期間」とは何ですか(私が思う)について話しているのではありません。それは、年末の処理に影響を与える可能性のある新しい変更/修正が導入されるリスクを軽減するために、実稼働環境に変更を適用することを許可しないことです。

  • 変更の承認/適用を許可されているユーザー(私の例のリリースマネージャーなど)は、例外的な場合にのみ変更を行うと想定します。テスト中に重大度の高い問題が発生した場合など、修正を次のリリースに延期することはオプションではありません(そのような修正なしでリリースがアクティブ化されると、本番稼働が危険になるため)。

  • これは、テスト中に自動更新を一時停止することに関するだけの可能性があります。重要なのは、別のチームがまだアプリケーションAに依存するバージョンXでアプリケーションBをテストしている間に、誰かがアプリケーションAをバージョンYにアップグレードしないようにすることです。テスト。

回答:


3

質問の文脈での私の答えは、非常に高価なテスト環境(たとえば、メインフレームや非常に大規模な通信機器など)であり、複数のテストで同時に複数のユーザーが共有することが期待されています。

多くの場合、このような機器にはソフトウェア管理システムがあり、特にソフトウェアの(アン)インストール/アップグレード/ダウングレードなどを制御します。どちらかが多かれ少なかれプログラム可能なポリシーに基づいて、そのような操作をブロックするための何らかのメカニズムを持っている必要があります(これは、質問を正しく理解した場合、環境の凍結と同等です)。

そのような場合、テスト環境に必要な望ましい凍結スケジュールをサポートするために、特定のポリシーを正確に作成できます。理想的には自動化され、テスト実行ラッパーやCIシステムなどの外部ソースからの凍結/解凍トリガーを受け入れる。そして、必要と思われる場合は、おそらく人間がトリガーするオーバーライドを使用します。

もちろん、ソフトウェア管理システムのこのような機能は、機器の他のコンポーネントをテストするときに役立ちますが、ソフトウェア管理システム自体のテストには役立ちません。


この答えは、私が慣れていること(メインフレーム)にぴったりです。この種のことを少なくとも1.5年ほど(「DevOps」が生まれる前に)すでに行っています。ここに自分の回答を追加する(この回答をさらに拡張するために、たとえば「banks」のCMN / ZMFでこれをどのように行うか)と意味があるのか​​、それとも新しい(自己回答)質問に回答するのが理にかなっているのでしょうか。どう思いますか?
Pierre.Vriens

おそらく別の方が良いでしょう-私は直接そのような環境を経験しなかったので、私の意見はほとんど意見です。
Dan Cornilescu 2017年

4

TeamCityには、複数のビルド定義が依存するリソースを定義できる共有リソースビルド機能があります。ビルド定義には、読み取りロックまたは書き込みロックが必要な場合があります。これらのロックが排他的であるか、ある程度の並列性を許可するかを定義することもできます。

我々は、名前の共有環境について次のように仮定します場合PreProdを

  • 「PreProd」という名前の共有リソースが存在します。
  • デプロイメントなど、その環境に変更を加えるすべてのビルド定義は、「PreProd」で排他的な書き込みロックを取得します。
  • 非限定的なテストなど、環境で読み取り専用操作を実行するすべてのビルド定義は、「PreProd」で非排他的な読み取りロックを取得します。
  • TeamCityは、おそらく別のツールを介しても、PreProdで何でも実行できる唯一のプロセスです。

したがって、次のことが当てはまります。

  • 展開が行われると、PreProdを使用できる他のものがなくなり、キューに入れられます。
  • テストの実行中は、テストが完了するまで展開がキューに入れられます。

除外プラグインを使用して、Jenkinsで同様のメカニズムを使用できます。実際、この機能は、ロックまたはセマフォを使用して、たとえばApache ZooKeeperHashiCorp Consulなどのプロセスに組み込むことができます。


私が「ガード」のアイデアに入れたものの「標準」の実装の良い説明:)
Tensibai

merci、それについて詳しく知るためにTeamCity自体に共有/追加するリンクはありますか?
Pierre.Vriens

1
アブソルは、私は答えにチームシティーとジェンキンス両方へのハイパーリンクを追加して、私は個人的にチームシティーコースをお勧めすることができUdemyを
Richard Slater

追加アップデートのmerci!PS:コースのリンクも回答に含めてください(たとえば、最後にPSを介して)。そうすれば、いつかモデレーターが来てコメントを削除し始めても、道に迷うリスクはありません(他のSEサイトでよく起こります)。
Pierre.Vriens

私は一般的にSEサイトの回答に商用コンテンツへのリンクを投稿することに慎重です。私はこのコースをお勧めするという点で役に立ちたいと思いますが、これは私が受講した唯一のコースなので、私自身の意見です。
Richard Slater

0

これは私には反パターンのように聞こえます。誰もが誰もがすべての環境にアクセスできるべきではないと思います。

ユーザーがプロセスを覆している場合、私はプロセスを真剣に検討して、人々の邪魔にならないようにします。

特定の状態を強制する自動化メカニズムを実装することは、人々が物事を正しい方法で実行するように促すのにも役立ちます。これは、Config Managementを介して、または誰かがSSHで不変のインスタンスを破壊した場合に発生します。


追加した2つ目の「メモ」を確認してください。最初の段落を再考することは役に立ちますか?それとは別に、あなたの回答の残りの部分が実際に私の質問の「ハウツー」の部分にどのように答えるかはわかりません。わからないことがあるかもしれませんが、あなたの答えをもっとよく理解してもらえますか?PS:心配しないで、私はめったに回答に反対票を投じない(もしそうなら、私はコメントを残す....)。
Pierre.Vriens

xyの問題meta.stackexchange.com/questions/66377/what-is-the-xy-problemがあります。私はあなたのソリューションを実装する方法に答えていません。私はあなたの問題をどのように解決するか答えています
Robo

@Robo私は同意しません。転覆または何もせずに、どのように意味があるのか​​という質問。これは、テスト中に自動更新を一時停止しているだけの可能性があります。それは手動のアクションとして表示されますが、重要な点は、別のチームがまだアプリケーションAに依存するバージョンXでアプリケーションBをテストしている間に、他の誰かがアプリケーションAをバージョンYにアップグレードしないようにすることです。テスト中の依存関係の更新を要求する。
Tensibai 2017年

それはあなたの質問から明らかではありませんでした。その場合、ある種のロックが必要です。
Robo

@Tensibaiのコメントを追加説明(最後の箇条書き)として統合したことに注意してください。「それ」が私の質問をより明確にするのに役立つことを願っています。たぶん、あなた(ロボ)はその追加の明確化に従ってあなたの答えもレビューしたいと思いますか?PS:merci Tensibai ...
Pierre.Vriens
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.