Ekip yemeklerinde şef yemek kitaplarını yönetme


13

Şef öğreniyorum ve ekibimle çalışmak için her şeyi yapılandırırken sorun yaşıyorum.

Yeni başlayanlar için, düğümlerinizi yönetmek için kullanılan yemek kitaplarını saklayacağınız ve değiştireceğiniz bir şef repo klasörü oluşturmanız gerekir.

Çeşitli projeler üzerinde çalışıyorum ve her biri zaten git kaynak kontrolü altında. İdeal olarak, o projeler yemek kitapları ile projelerimin her birinde bir şef repo klasörü tutmak istiyorum değil mi?

Ancak, şef repo klasörüne bıçak yapılandırmam ve anahtar doğrulamalarım ile bir yapılandırma klasörü (.chef) eklemeliyim ve bunlar bana özel. .Chef klasörünü gitignore dosyasına eklemek normal mi?

Yemek kitapları şef sunucusuna yüklendikten sonra dağıtılacaklarını anlıyorum. Diğer takımlar, çok fazla çalışma yapmadan sahnelemeyi üretim ortamlarından nasıl ayırır? Üretim şubemiz olan bir ana şubemiz, sahneleme şubemiz olan (web sitesinin taleplerinin% 5'inden daha azını alan) bir dev dalı ve özellik şubeleri var. Çoğu zaman, sabit olduğu zaman dev dalı ana dalla birleştirilir. İki ortama ayrı bir şekilde sahip olabilmek için yemek kitaplarını nasıl ayrı ayrı yükleyebiliriz?

Yardım için teşekkürler!


.chefKlasörü ortam değişkenlerini veya başka bir şeyi kullanacak şekilde ayarlayabilir misiniz ?
ceejayoz

Hedefinizi daha ayrıntılı olarak açıklar mısınız? Chef ile ne tür bir altyapıyı otomatikleştirmek istiyorsunuz? Farklı şubelerden bahsettiniz - yazılım dağıtımından bahsediyorsanız, Jenkins gibi bir CI aracı daha iyi bir çözüm olabilir.
geewiz

Kuklaların bu tür ortamları doğal olarak nasıl desteklediği çok iyi.
Tom O'Connor

Yanıtlar:


15

Birden fazla projeyle çalışıyorum, bu yüzden cjc'nin çözümü benim için çalışmayacak. Ayrıca ortak vs özel yapılandırma sorunu da vardır (adresler şirket için ortaktır, ayrıca yapılandırmalarda biraz sihir vardır). Sonunda yerleştiğim şema biraz hack, ama kullanımı kolay bir şema.

Global yerine, ~/.chefgit-re'de saklanmayan chef-repo içinde '.chef' alt dizinini kullanıyorum .gitignore. Ben de config/knife.rbGit kontrol edilir ve paylaşılan yapılandırma içeren dosya dosyası var. Bu snippet ile başlar:

root_dir = File.join(File.dirname(__FILE__), '..')
%w(knife-secrets.rb knife-local.rb).each do |conf_name|
  conf = File.join(root_dir, ".chef", conf_name)
  Kernel::load(conf) if File.exists? conf
end

Bu .chef/knife-local.rb, özel yapılandırma içeren dosyaları yükler (temel sürümde OPSCODE_USER='username'daha sonra kullanılan sabittir, ancak herhangi bir bıçak yapılandırmasını içerebilir) ve .chef/knife-secrets.rbpaylaşılan sırlar (AWS anahtarları vb.) İçerir.

Bunun altında, bu dosyalarda tanımlanan sabitleri kullanan düzenli bıçak yapılandırması vardır, örneğin:

client_key               "#{root_dir}/.chef/#{OPSCODE_USER}.pem"

Bu şekilde, şirket genelinde bıçak yapılandırmasının standartlaştırılmasını sağlarım, bu da bir wiki'de paylaşılan herhangi bir kod snippet'inin veya bıçak çağrısının herkes için çalışacağı anlamına gelir. Bıçağın içinde yeterince karışıklık ve büyü var - farklı konfigürasyonlar sadece daha da kötüleştirecekti. Ayrıca, herkes kullanıcının yapılandırdığı giriş bilgilerini kullanmak için bunun gibi küçük sihirli snippet'lerden yararlanırknife ssh~/.ssh/config

Paylaşılan sırlar da var: şef sunucusunun doğrulama anahtarı, depolanan AWS anahtarları knife-secrets.rb, EC2'nin SSH özel anahtarı, şifreli veri çantası anahtarları vb. Kesinlikle depoda veya aslında güvenli bir şekilde şifrelenmedikleri herhangi bir yerde saklanmalarını istemiyoruz. Bu nedenle, bu dosyaları .tar.gzşirketteki herkese GPG ile şifrelenmiş ve Dropbox üzerinden paylaşılan bir dosya olarak dağıtıyoruz .

Tüm bunları yapılandırmak karmaşıklaşıyor ve takımdaki kişilerin gerçekten bu şeyi kullanmasını istiyorum, bu yüzden son öğe var: dizin rake initoluşturan .chefgörev, config/knife.rborada semboller chef-secrets.tgz, şifre çözme ve untar dosyası, kullanıcının özel Opscode Platform anahtarının orada olduğundan ve .chef/knife-local.rbdüzgün olduğundan emin olun yapılandırılmış, bıçak eklentilerini bağlar ve dizin ve içindeki dosyalar için uygun izinleri ayarlar. Bu görev, önceden başlatılmış depoda birçok kez çalıştırmanın güvenli olması için ayarlanır (ör. Sırları veya bıçak eklentilerini güncellemek için).

Yeni çalışanları eklemeyi veya sırları değiştirmeyi kolaylaştırmak için tüm sırları yeniden dolduran, tarball'ı herkese şifreleyen ve dropbox'a kopyalayan bir yardımcı görev de var.

Birden çok ortama ilişkin olarak: Chef, ortam adı verilen bir özelliğe sahiptir . Henüz kullanmadım, ama ihtiyacınız olanı yapmalı. Ayrıca, iki ayrı Barındırılan Şef organizasyonuna veya Şef sunucusuna sahip olarak üretim ortamını (üretim env ile herhangi bir şekilde herhangi bir anahtarı olan geliştiricilerin olmasını önlemek için) kesinlikle ayırabilirsiniz. Bu knife.rb snippet'i , şu anda kullanıma alınmış şubeye göre bıçağı farklı bir şekilde nasıl yapılandıracağınızı gösterir - bunu ortamın yanı sıra şef sunucusunun URL'sini ayarlamak için kullanabilirsiniz. Ayrıca , daha eksiksiz, iki organizasyonlu iş akışı sağlayan bıçak akışı adı verilen bıçak eklentisi de var .


Detaylı cevap için teşekkürler. En azından onu kurmaya giden işi görmek, bariz bir şeyi kaçırmamam anlamına gelir ...
Alex Recarey

3

Biri üretim ve diğeri geliştirme için olmak üzere iki Şef sunucusu ayarlamanız gerekir. Bunun nedeni, hiçbir Şef sunucunun dallanmış gelişimi desteklememesidir; ortamlarda bile.

Veya Chef server konseptini terk edebilir ve chef-solo kullanabilirsiniz. Yemek kitaplarınızı Git'te tutabilirsiniz. Şube yapabilir ve birleştirebilirsiniz. Bıçak kimlik bilgileriyle ilgili sorunları görmezden gelebilirsiniz, çünkü bunları artık kullanmayacaksınız.

Bıçaklı arama veya veri torbaları ** kullanamazsınız. Ancak bazı insanlar zaten bu özelliklere ihtiyaç duymuyor.

** Eh bir tür yapabilirsiniz: http://wiki.opscode.com/display/chef/Data+Bags#DataBags-UsingDataBagswithChefSolo


2

Evimde iki dizin var, .chef ve chef-repo. Şef-repo git içinde. .Chef, bıçak için varsayılan olan bazı özel dizinlerdir. Sırlarınızı .chef'den git'e koymak zorunda değilsiniz; bıçak ~ / .chef arayacaktır.


2

~ / .Chef dizininiz git repo'da olmamalıdır.

Benim şef repo altında tutmak bir ~ / projeler / dizin var. Bu, sunucularımın yapılandırmalarını gider.

Son işim Ruby-on-Rails mağazasında Sistem Mühendisi olarak çalışmaktı. Nginx, vernik ve ray konfigürasyonlarımız (diğerlerinin yanı sıra) şef deposuna gider, ancak Rails uygulamalarının kendileri ayrı git depolarında tutulur ve ayrı olarak dağıtılır.

Evreleme ortamımız, tüm evreleme ortamını çalıştıran tek bir sunucuydu. Bu ideal değildi, çünkü Rails incinin ve DB'nin ayrı kutularda olduğu Üretim'e benzemiyordu. Önerebileceğim, Aşama ve Üretimi ayırmak için Şefin Ortamlarını kullanmak. (Oraya vardığım zaman böyleydi ve ayrılmadan önce bunu düzeltmek için zamanım yok.)

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.