Dev -> stage -> prodüksiyonundan göç (CMI) yapılandırması için önerilen iş akışı nedir?


41

Birkaç ay önce bir drupalcamp aldık ve birisi yeni config (CMI) sistemiyle dağıtımları yönetmeyi istedi. Olası bir ideal iş akışı, yapılandırmayı sürüm kontrolü altında tutmayı ve yine de ekip üyeleri arasında yapılandırmayı geçirebilmeyi içerir.

Odada bulduğumuz en iyi şey (kısmen DrupalCon Portland'daki sunumuna dayanarak) çözebilmekti:

  • Sürüm kontrolüne aktif config dizinini yoksaymasını söyle.
  • Tüm Konfigürasyon'u hazırlama dizinine kopyalayın ve sürüm kontrolüne karar verin.

Ve aktif / evreleme dizinini 2 ortam arasında tersine çevirmek için settings.php dosyasını kullanın. Bununla birlikte, bir sunucudan diğerine bir dağıtım iş akışını bulmak karmaşık olsa da yapılabilir, ancak birden fazla yerel ortamdan (yani, birden fazla geliştirici) dev (veya birbirleri arasında) arasında önerilen iş akışı nedir? Aynı veya benzer ortamı paylaşıyor olsaydı, bir takım arkadaşının makinesindeki değişiklikler nasıl ortaya çıkıyor?


5
Şu anki yakın oyla gerçekten aynı fikirde değilim. CMI, Drupal 8'in odak noktası olduğu için burada bazı iyi cevaplar alabileceğimizi düşünüyorum.
mpdonadio

3
Kabul, bu çok iyi bir soru. Kritik görevin drupal.org/node/1703168'in bu ve diğer konularla ilgili olduğuna ve henüz tam olarak çözülmediğine inanıyorum.
Berdir

Sorumun CMI girişimi için olumsuz olduğu ortaya çıktıysa özür dilerim (ki bu benim niyetim değildi). Soruyu güncelledim, böylece daha tarafsız görünüyor.
btmash

2
neredeyse "Özellikleri denedin mi" diyecektim. Belki de "D8" soru başlığına girmeli mi? "8" etiketi biraz görünmez.
donquixote

1
Başlık revize edildi, böylece soru hem etiket hem de başlık aracılığıyla görülebilir :)
btmash

Yanıtlar:


19

CMI yöneticileri ile biraz konuştuktan sonra, en iyi yaklaşımın ne olduğu hakkındaki tartışma bitmedi, ancak şu anda en mantıklı olanı şu.

Şimdilik kısa tutmaya çalışmak, sorulara dayalı olarak / başvurulan sorun resmi bir cevapla çözüldüğünde genişlemeye çalışacaktır.

İlk önce gerçekler ...

  • Daha önce de belirtildiği gibi, aktif ve hazırlık dizini var. Active, Drupal tarafından tamamen yönetilir, doğrudan orada değişiklik yapma (farklı bir konuma geçerek doğrudan veya dolaylı) desteklenmez.
  • Aşama Drupal'ın içe aktarmak için yapılandırma aradığı ve aksi halde umursamadığı yerdir.
  • İthalat işlemi önemlidir, yapılandırma değişiklikleri bir siteyi belirli bir şekilde etkileyebilir ve geçerliliği kontrol edilmelidir. Bir metin alanının alan türünü, örneğin işe yaramayan bir varlık referansına değiştiremezsiniz.
  • Config içe aktarma işleminin her zaman tüm yapılandırmalarda çalışması gerekir , tek bir görünümü veya düğüm türünü içe aktaramazsınız. Denendi, ancak bağımlılıklarla başa çıkmaya çalışmak, kaldırır / yeniden adlandırır vb. Çok karmaşık bir sistemle sonuçlandı ve işe yaramadı.
  • Varsayılan yapılandırmayı yeniden kurmanın tek yolu, bu modülü yeniden yüklemektir. Bu, ilk önce tüm konfigürasyonları kaldırmaya çalışacağı anlamına gelir (alanlar gibi). Yani bu gerçekten bir seçenek değil. Manuel, güncelleme işlevlerinde belirli değişiklikler mümkündür ancak bunun için çok can sıkıcı olduğunu düşünüyorum.
  • Özellikler modülünün tanımladığı gibi, sürekli yapılandırma dağıtımları yerine yeniden kullanılabilir işlevsellik sağlamaya odaklanacak. İlk başta bunun için tasarlandı.

Buna bakıldığında, şu anki öneri evreleme dizini versiyon kontrolüne koymak. Her geliştirici daha sonra, tüm aktif dizini veya sadece belirli bir yapılandırma dosyasını kopyalayarak buraya koyduğu şey üzerinde tam kontrol sahibidir. Hazırlama dizini değişiklikleri daha sonra gerçekleştirilir, üretime itilir ve yapılandırma içe aktarması çalıştırılır (kullanıcı arayüzünde veya sarhoş halde).


Versiyon kontrolündeki hazırlama dizini bu kısmı alıyorum. Diğer kısımlar aklımın işlemeye çalıştığı şey. Böylece eğer bir değişiklik yaparsa, değişikliklerini hazırlama dizinine kopyalayıp taahhüt eder. Bu noktadan sonra, diğer geliştiriciler / sonraki sunucu değişiklikleri alır ve değişiklikleri aktif dizine senkronize eder. Ve durulayın ve yol boyunca diğer sunucu zincirleri için tekrarlayın (evreleme, üretim vb.). Ve her zaman aşamayı sürdürür, böylece artık hiçbir dizin anahtarı oluşmaz. Bu doğru olur mu?
btmash

Evet. Dizin geçişi olmamalıdır. Her yapılandırma değişikliğinin içe aktarma işleminden geçmesi gerekir, aksi takdirde siteniz bozuk olabilir. Örneğin, modüllerin listesi de konfigürasyondur. Dağıtılması, modüllerin kurulması / kaldırılması gerektiği anlamına gelir (Not: Bu henüz işe yaramaz, ancak düzeltilmesi gereken bir sorun vardır).
Berdir

Tamam, şimdi daha fazla soru (2 yoruma bölünür) :) İlk olarak, modüllerin konfigürasyon olduğunu söylersiniz. Yani bir modül bir depoya eklense ve etkin / devre dışı olmasa bile, sadece orada oturması için kurulması / kaldırılması mı gerekiyor?
btmash

Ve takip: (A) Etkin dizinden -> evrelemeden değişiklikleri kopyalamak için bir mekanizma olacak mı? (B) Değişiklikler evreleme -> etkin durumdan senkronize edildikten sonra evreleme dizini boşaltılıyor mu? (B1) Eğer öyleyse, o zaman gitmeden önce bu dizini sıfırlamak için adanmışların bakış açısı stratejisi midir? (B2) Olmazsa, o zaman aktif aktif senkronizasyonu meydana gelirken, değişmemiş konfigürasyon üzerinde herhangi bir etkisi olmayacağını varsaymak doğru mudur?
btmash

Modül kurulum durumu konfigürasyondur. Modülün kendisi değil :) Bunu dağıtabilirsiniz. a) Aktif dizinin bir tar.gz'sini indirmek için, biri bahsedilen tar.gz'yi evreleme dizinine yüklemek için bir tane ve bir tane de değişikliklere genel bakış ve fark ile birlikte Alma işlemini yapmak için bir kullanıcı arayüzü vardır. B) Şu anda boşaltıldığına inanıyorum, ama bunu git ile kolayca geri alabileceğinizi varsayıyorum. Emin değil, kontrol etmesi kolay. Bütün bunlar takılabilir olduğundan, silmeyen biraz farklı bir uygulama olabilir. B2) Bunu anlamıyorum ama sanırım evet.
Berdir

4

Harika şimdiye kadar cevap verdi. Hepinize teşekkürler!

Geçenlerde Drupal 8 projesini başlattık ve aşağıdaki iş akışını uyguladık.

Etkin, evreleme ve dışa aktarma olmak üzere üç klasörümüz var. Geliştiriciler ihracat yapmaktan vazgeçerler. Aşamada tutmak istemiyorum. Paylaşılan yapılandırma doğrudan hazırlama klasörüne kaydedilmediğinde çalışmanın daha kolay olduğunu düşünüyorum. Bu sadece bir felling, bu konuda zor gerçekler yok ...

Mevcut drupal 8 proje şablonumuz github'da mevcuttur. Ayrıca şeytani iş akışını hızlandırmak için bazı kullanışlı sarhoş komutları yazdım. Etkinden dışa aktarmaya manuel kopyalama gerekmez.


1
Şimdiye kadar bu yaklaşıma katılıyorum. Bu gönderideki bağlantılardaki tüm özellikleri Drush config-export ve config-import komutlarına ekledim. Umarım diğerleri bu 3 dizin çözümünü araştırırken bana ve florian'a katılırlar.
moshe weitzman

Nasıl başa çıkıyorsun sites/default/files/config_HASHbir karma eki, örneğin config_wNOLcmycPFZCrXJ9wis9dCdSR4lpYILdBsFxSWuK5Hzhcr sahip klasör yapılandırma
therobyouknow

@ therobyouknow Bu klasörlerin konumunu geçersiz kılmak mümkündür. Yalnızca "site yapılandırma dosyalarının konumu" konusuna bakın. settings.php'de aşağıdaki snippet'i kullanıyorum. Bunun anlamı, config Drupals root dir. $ config_directories = array ('active' => '../config/active', 'evreleme' => '../config/staging',);
webflo,

Thanks @webflo Bunu gördüm. Bir kod tabanını ve bir yapılandırmayı ayrı ayrı yönetmenin faydası ne olurdu? Bence bu ayrılık hem kod hem de config (yaml'de) davranışı belirlediğinden ve birbirlerine bağlı olduğundan biraz yapaydır. Drupal 7'de, kod içinde konfigürasyon (veya Git tarafından izlenebilir), kodda takip edilmesi gereken her özel konfigürasyon için bir modül oluşturan Unsurlar modülü ile yapıldı. Drupal 8'de, anladığım kadarıyla aynı şeyi yapan ancak 3.A'yı kullanan ve yapılandırma modülleri saklamak için YAML kullanan ve üretilen modüller Özellikler modülüne bağlı olmayan Özellikler 3.x var.
therobyouknow 19:15

Beni yanlış anladığını düşünüyorum, config dir hala git, ama Drupal sitem git repo kökünde değil. Site saklanır / web. Yani / config ve / web aynı seviyededir.
webflo

2

Bunu henüz denemedim, ancak planım yalnızca ilgilendiğim yapılandırmayı içeren "default" config dosyalarını içeren özel bir modül oluşturmak. Diğer modüllerin, diğer modülleri geçersiz kılan yapılandırmalar içerebileceğine inanıyorum. (Bu mümkün değilse yapılmalıdır).

Bence config klasörünü yalnız bırakmalısın. Boşver. Tüm modüllerin konfigürasyon dosyalarından kurulum sırasında otomatik olarak oluşturulur. Yol uzun ve rastgele. Bunları bir depoda saklarsanız, ayrı bir depoya ihtiyacınız olur ve bununla birlikte varsayılan, gereksiz yapılandırma dosyalarını tonlarca taşıyacaksınız.

Config'i özel bir modüle koymak, onu ana kod tabanınızın bir parçası yapar.

Dağıtım işlemi şöyle olacaktır:

  1. Git veya yeni dosyaları almak için ne olursa olsun çekin.
  2. Önbellekleri temizle.
  3. Varsayılan yapılandırmayı sıfırla. (Özel modülünüzün dosyalarından)

İsterseniz her ortam için özel modüller (kendi yapılandırmasıyla) oluşturabilirsiniz.


Bu özellik gibi bir çok sesler, değil mi? Yoksa kaçırdığım önemli bir fark var mı?
Letharion

Bu ilginç bir yaklaşım ve fikri beğeniyorum. Bununla birlikte, CMI girişiminin bir parçası olarak belirtilen en büyük avantajlardan biri, yapılandırma dizinlerinden yapılandırma dizinlerinde gezinme yeteneğidir. Ve gördüklerime göre settings.php dosyası aktif / evreleme dizinlerinin yerini belirlemenizi sağlar (yani, otomatik olarak oluşturulan yollar olmaları gerekmez). Dolayısıyla, geçerli yapılandırma ile bir iş akışının yukarıda @Letharion'un da bahsettiği gibi bir özellik oluşturmaya gerek kalmadan mümkün olması gerektiğini düşünüyorum.
btmash

2

Not: Bunun, soru ile ilgili kesin anlamda bir cevap olmadığını takdir ediyorum, ancak yine de buraya koydum ve bir kez daha serbest bıraktığımda ve toz biraz daha fazla yerleşmiş. Bu sadece bir yorum için çok büyüktü.

Çok büyük bir Özellikler hayranı olarak, Özellikler modülünün D8 enkarnasyonuna göz atmanızı öneririm .

Proje sayfasından alınmıştır

Drupal 8'in yeni yapılandırma yönetim sistemiyle bütünleşmesi için Özelliklerin 3.x sürümü planlandı. Basit site yapılandırmasını dışa aktarmanız gerekiyorsa, Özellikler yerine D8 yapılandırma yönetim sistemi kullanılmalıdır. Birlikte verilen işlevselliği dışa aktarmak için D8'deki Özellikleri kullanacaksınız ("fotoğraf galerisi özelliği" gibi).

Yol tür görmek bu fikri dev daha kolay hale getirir olmasıdır takımların bir sitenin daha küçük parçalara işe. Henüz çok fazla bilinmeyen değişken olmasına rağmen, bir iş akışına girmeyeceğim, ancak mevcut bir Özellikler dağıtım işleminden çok farklı olduğunu göremiyorum.

Yardım edemem ama evet düşünüyorum, CMI harika; ancak sitelerimin çoğu hala HİÇBİRİ içerik türü, izin vb. verme zorunluluğu olmadığı için küçük bir miktar da olsa) hala Özellikler modüllerine sahip olacak.


Her ne kadar özelliklerin rolünü biraz değiştireceğine ve (umarım) yapılandırma bileşenlerini bir araya getirme aracı olacağına (umarım) bahsettiğim fotoğraf galerisi özelliği gibi) katılıyorum. yapılandırma dizini. Bu nedenle, Özellikler belirli bir bileşeni çözebilir, ancak yapılandırma dizini iş akışının ortamlarda nasıl yönetileceği asıl konudur. Dağıtım prosedürü, geçerli özellik dağıtım prosedüründen biraz farklıdır, çünkü öncelikle activestore verileri db'de ve veri deposunda dosyalardır.
btmash

... d7 özellikleri dağıtım prosedürü veritabanında activestore verilerini ve dosyalarda veri deposunu içerir. Her iki dosyaya da geçiyoruz ve bunun iş akışındaki bir değişimi nasıl etkilediğinden emin olmamız gerekiyor.
btmash

Özelliklerin gerçekten aktif ve veri deposu / evreleme kavramına sahip olmadığını unutmayın. Ya da en azından tutarlı değil, hepsi bütünleştiği özel kancaya / şeye bağlı. Varsayılan görünümler kodda canlıdır, örneğin, değişiklikler hemen etkindir (önbelleğe alma dışında), özelliklere sahip kontrollü bir dağıtım işlemi yoktur. Dağıtım için özellikleri kullanırken bu her zaman en büyük sorunlardan biri olmuştur.
Berdir

Haklısın. D7'nin konfigürasyon modülünü Features'la nasıl karıştırdığımı bilmiyorum ama yaptım.
btmash
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.