dev-> stage-> productionから移行(CMI)構成に推奨されるワークフローは何ですか?


41

数か月前にdrupalcampがあり、誰かが新しい設定(CMI)システムを使用した展開の管理について質問しました。考えられる理想的なワークフローの1つは、構成をバージョン管理に保持し、チームメンバー間で構成を移行できるようにすることです。

部屋で私たちが理解できた最高の部分は(部分的にはDrupalConポートランドでのプレゼンテーションに基づいて)でした:

  • アクティブな設定ディレクトリを無視するようバージョン管理に指示します。
  • すべての構成をステージングディレクトリにコピーし、バージョン管理にコミットします。

また、settings.phpを使用して、2つの環境間でアクティブ/ステージングディレクトリをリバースします。ただし、あるサーバーから次のサーバーへの展開ワークフローを把握することは複雑でありながら実行可能ですが、複数のローカル環境(つまり、複数の開発者)からdev(または相互)への推奨されるワークフローは何ですか?同じまたは類似の環境を共有している場合、あるチームメイトのマシンでの変更はどのように反映されますか?


5
私は現在の投票に賛成しません。CMIはDrupal 8の焦点であるため、ここでいくつか良い答えが得られると思います。
mpdonadio

3
同意して、これは非常に良い質問です。drupal.org/node/1703168の重要なタスクは、このトピックと他のトピックに関するものであり、まだ完全には解決されていないので、ここでの回答がその問題を前進させるのに役立つと思います。
ベルディール

私の質問がCMIイニシアチブに否定的であると思われた場合は謝罪します(これは私の意図ではありませんでした)。質問を更新して、より中立的に聞こえるようにしました。
btmash

2
「機能を試してみました」と言っていました。「D8」は質問のタイトルに入れるべきでしょうか?「8」タグは少し見えません。
ドンキホーテ

1
タイトルを修正し、タグまたはタイトルの両方で質問を表示できるようになりました:)
btmash

回答:


19

CMIのメンテナーと少し話し合った後、最善のアプローチについての議論は終了していませんが、現時点では次のことが最も理にかなっています。

今のところ簡潔にしようとすると、質問に基づいて/参照された問題が公式の回答で解決されたときに拡張しようとします。

だから、最初に、事実...

  • 既に述べたように、アクティブなステージングディレクトリがあります。アクティブはDrupalによって完全に管理されており、そこで直接(別の場所への切り替えによる直接または間接の)変更を行うことはサポートされていません。
  • ステージングは​​、Drupalがインポートする構成を探し、それ以外の場合は気にしません。
  • インポートプロセスは重要です。構成の変更は特定の方法でサイトに影響を与える可能性があるため、有効性を確認する必要があります。たとえば、機能しないテキスト参照のフィールドタイプをエンティティ参照に変更することはできません。
  • 構成のインポートは常にすべての構成で実行する必要があり、単一のビューまたはノードタイプをインポートすることはできません。試されましたが、依存関係、削除/名前の変更などに対処しようとすると、システムが非常に複雑になり、機能しませんでした。
  • デフォルト設定を再インストールする唯一の方法は、そのモジュールを再インストールすることです。つまり、最初にすべての構成(フィールドなど)を削除しようとします。したがって、それは実際にはオプションではありません。更新機能の手動で特定の変更は可能ですが、これには面倒です。
  • 機能モジュールで説明されているように、構成の継続的な展開ではなく、再利用可能な機能の提供に焦点が当てられます。これがそもそものために設計されたものです。

そのため、現時点での推奨事項は、ステージングディレクトリをバージョン管理することです。その後、各開発者は、Active Directory全体をコピーするか、特定の構成ファイルをコピーするだけで、そこに置くものを完全に制御できます。その後、ステージングディレクトリの変更がコミットされ、運用環境にプッシュされ、構成のインポートが実行されます(UIまたはdrushを使用)。


バージョン管理のステージングディレクトリ、私はその部分を取得します。他の部分は、私の心が処理しようとしているものです。そのため、誰かが変更を加えた場合、その変更をステージングディレクトリにコピーしてコミットします。その後、他の開発者/次のサーバーが変更を取得し、アクティブディレクトリに変更を同期します。途中で他のサーバーチェーン(ステージング、プロダクションなど)についてすすいで繰り返します。また、ステージングは常に行われるため、ディレクトリの切り替えはもう発生しません。それは正確でしょうか?
btmash

はい。ディレクトリを切り替えてはいけません。構成の変更はすべてインポートプロセスを実行する必要があります。そうしないと、サイトが破損する可能性があります。たとえば、モジュールのリストも構成です。デプロイすると、モジュールのインストール/アンインストールが必要になります(注:これはまだ機能しませんが、修正する必要がある問題があります)。
ベルディール

わかりましたので、今より多くの質問(2つのコメントに分割):)最初に、モジュールが構成であることを言及します。モジュールがレポに追加され、有効化/無効化されていない場合でも、そこに座っているだけでインストール/アンインストールする必要がありますか?
btmash

そしてフォローアップ:(A)Active Directoryから変更をコピーするメカニズムがあります->ステージング(これらのコンポーネントの構成ディレクトリに入る人を簡略化するために-おそらく特定の変数をチェリーピックする方法)。(B)変更がステージング->アクティブから同期された後、ステージングディレクトリは空になりますか?(B1)もしそうなら、git pullの前にそのディレクトリをリセットするというdevopsの観点からの戦略ですか?(B2)そうでない場合、ステージング->アクティブ同期が発生している間、変更されていない構成に影響はないはずだと仮定するのは正しいですか?
btmash

モジュールのインストールステータスは設定です。モジュール自体ではありません:)それがデプロイするものです。a)アクティブディレクトリのtar.gzをダウンロードするUI、tar.gzをステージングディレクトリにアップロードするUI、実際にインポートを実行するUI、および変更の概要と差分があります。B)今は空になっていると思いますが、gitで簡単に元に戻すことができると思います。よくわかりませんが、簡単に確認できます。それらはすべてプラガブルなので、削除しないわずかに異なる実装が存在する可能性があります。B2)これは入手できませんが、はいと思います。
ベルディール

4

これまでのところ素晴らしい。どうもありがとう!

Drupal 8プロジェクトを最近開始し、次のワークフローを実装しました。

ステージングとエクスポートの3つのフォルダーがアクティブになっています。開発者はそれらをエクスポートしてダンプします。私はステージングでそれを維持したくありません。共有構成がステージングフォルダーに直接保存されていない場合、作業が簡単になると思います。これはただの伐採であり、これに関する確固たる事実はありません...

現在のdrupal 8プロジェクトテンプレートは、githubで入手できます。また、開発者のワークフローを高速化するための便利なブラシコマンドをいくつか作成しました。アクティブからエクスポートへの手動コピーは不要です。


1
これまでのところ、私はこのアプローチに同意します。この投稿のリンクのすべての機能を、Drush config-exportおよびconfig-importコマンドに追加しました。他の人が私と@florianに加わって、この3つのディレクトリソリューションを探索してくれることを願っています。
mosheワイツマン14年

sites/default/files/config_HASHconfig_wNOLcmycPFZCrXJ9wis9dCdSR4lpYILdBsFxSWuK5Hzhcrなどのハッシュサフィックスを持つ構成フォルダーをどのように処理しますか-therobyouknow 15
14:47

@therobyouknowこれらのフォルダーの場所をオーバーライドすることは可能です。「サイト構成ファイルの場所」を探してください。settings.phpでは、次のスニペットを使用します。つまり、構成はDrupalsルートディレクトリの外部に保存されます。$ config_directories = array( 'active' => '../config/active'、 'staging' => '../config/staging'、);
webflo

ありがとう@webfloこれを見た。コードベースと設定を別々に管理する利点は何ですか?コードと設定(yaml内)の両方が動作を決定し、互いに依存しているため、この分離は少し人工的だと思います。Drupal 7では、Featuresモジュールを使用してコード内の構成(またはGitで追跡可能)を行い、コード内で追跡する必要のある特定の構成ごとにモジュールを作成しました。Drupal 8にはFeatures 3.xがありますが、これは理解しているように同じですが、YAMLを使用して構成を保存し、生成されたモジュールはFeaturesモジュールに依存しません。
therobyouknow

あなたは私を誤解していると思います、設定ディレクトリはまだgitにありますが、私のDrupalサイトはgitレポのルートにはありません。サイトは/ webに保存されます。したがって、/ configと/ webは同じレベルにあります。
webflo

2

私はまだこれを試していませんが、私の計画は、関心のある構成のみを含む「デフォルト」構成ファイルを含むカスタムモジュールを作成することです。他のモジュールには、他のモジュールをオーバーライドする構成を含めることができると思います。(そうでない場合、これを可能にする必要があります)。

configフォルダーはそのままにしておく必要があると思います。それを無視します。インストール時に、個々のモジュールのすべての構成ファイルから自動生成されます。パスは長くランダムです。これらすべてをレポジトリに保存した場合、別のレポジトリが必要になり、大量のデフォルトの不要な設定ファイルを運ぶことになります。

カスタムモジュールに設定を入れると、メインコードベースの一部になります。

展開プロセスは次のとおりです。

  1. Git pullまたは新しいファイルを取得するもの。
  2. キャッシュをクリアします。
  3. デフォルト設定をリセットします。(カスタムモジュールのファイルから)

必要に応じて、環境ごとにカスタムモジュールを(独自の構成で)作成できます。


これは機能のように聞こえますが、そうではありませんか?それとも私が見逃している大きな違いはありますか?
レサリオン

それは興味深いアプローチで、私はそのアイデアが好きです。ただし、CMIイニシアチブの一部として言及されている最大の利点の1つは、構成ディレクトリから構成を移動できることです。そして、私が見るところから、settings.phpファイルを使用すると、アクティブ/ステージングディレクトリの場所を指定できます(つまり、自動生成されたパスである必要はありません)。したがって、上記の@Letharionが言及しているように、機能を作成する必要なく、現在の構成でのワークフローが可能になるはずです。
btmash

2

注: これは質問に関する厳密な意味での回答ではないことを感謝していますが、とにかくここに置いており、機能が8.xリリースになり、ダストがもう少し落ち着きました。これはコメントするには大きすぎたため、0.02ポンドを取得したかったのです:-)

Featuresの大ファンとして、FeaturesモジュールのD8インカネーションに注目することをお勧めします

プロジェクトページから取得

Drupal 8の新しい構成管理システムと統合するために、フィーチャーの3.xバージョンが計画されています。単純なサイト構成をエクスポートするだけの場合は、機能の代わりにD8構成管理システムを使用する必要があります。D8の機能を使用して、バンドルされた機能(「フォトギャラリー機能」など)をエクスポートします。

私は道ちょっとそれを見るが、このアイデアは、DEVのためにそれが容易になりますということであるチームサイトの小さな部分に仕事に。まだあまり多くの未知の変数があるので、まだワークフローに入るつもりはありませんが、現在の機能の展開手順とは大きく異なることがわかりません。

私は助けることができませんが、はい、CMIは素晴らしいです。しかし、私のサイトのほとんどはまだ機能モジュールで終わります(ただし、コンテンツタイプや許可などをすべてエクスポートする必要がないため、量は少なくなります)


機能がその役割をわずかに変更し、(願わくば)構成コンポーネントを一緒にバンドルするためのツールになることには同意しますが(あなたが言及したフォトギャラリー機能のように)、構成(私が理解している限り)は、構成ディレクトリ。したがって、機能は特定のコンポーネントを解決する可能性がありますが、環境間で構成ディレクトリワークフローを管理する方法が本当の問題です。展開手順は、主にactivestoreデータがdbにあり、データストアがファイルであるため、現在の機能の展開手順とはわずかに異なります。
btmash

... d7機能の展開手順には、データベースのアクティブストアデータとファイルのデータストアが含まれます。私たちは両方のファイルに移行しており、それがワークフローの変化にどのように影響するかを確認する必要があります。
btmash

機能には実際にはアクティブおよびデータストア/ステージングの概念がないことに注意してください。または、少なくとも一貫性がなく、すべてが統合する特定のフック/ものに依存します。デフォルトのビューはコード内に存在します。たとえば、変更はすぐにアクティブになり(キャッシングを除く)、機能を使用した展開プロセスは制御されません。これは、展開に機能を使用する際の大きな問題の1つです。
ベルディール

あなたが正しい。D7の構成モジュールがどのように機能と混同されたかはわかりませんが、私は知りました。
btmash
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.