Özel bir yapım makinesinin amacı nedir?


75

Son inşa döngüsünün kötü konuşlandırılmasına yol açan bir takım koşullar nedeniyle, gelecekteki tüm dağıtımları özel bir inşaat makinesiyle yapmak için ofisimizde kampanya yaptım ve patronum bu teklifi kabul etti.

Bununla birlikte, ofisimizde gerçek bir makineyi kullanmak yerine, tek bir makineyi diğer birkaç grupla paylaşmak zorundayız - ve ofisimden gerekli tüm bilgilerle ayrılmanın zorluğundan ve sonra merdivenlerden aşağı inmek zorunda kalmanın zorluğundan başka bir ofise sadece basit bir yapı oluşturmak için neden bunu ilk başta teklif ettiğimi merak ediyorum.

Ayrı bir yapım makinesine sahip olma fikri, başlangıçta, yerel olarak yazılmış kendi kodumu diğer geliştiricilerin kodlarından ayırmak ve makinemdeki kaçırılan dosyaları dağıtmaktan ayırmaktı. Aynı zamanda ClearCase dosya yönetimi sistemimizle yaşadığım ve giderek artan bir endişeyi gidermek için de kullanıyordu; bu da, 'bağımlılıkları olan' başka bir aktivite de dahil etmediğim sürece belirli derleme etkinliklerini dağıtmama izin vermeyi reddetti.

Şimdi aslında bu süreçte ilerlemeye başladığımda, bir inşaat makinesi kullanma amacını yanlış anlayıp anlamadığımı merak ediyorum - ve bu makineyi yalnızca Test, Aşama ve Üretim ortamlarımıza kod dağıtımı için kullandığımızdan ve kişisel Geliştirici test dağıtımlarımız için değil, herhangi bir amaca hizmet ettiğinden emin değilim.

Peki, bir inşaat makinesi kullanmanın gerçek nedeni nedir ve doğru kullanmaya bile yaklaşmış mıyım?


166
“Ofisimi tüm gerekli bilgilerle terk etme zorunluluğu ve daha sonra basit bir yapı oluşturmak için merdivenden çıkıp başka bir ofise gitme zorluğu [...]” Tam olarak ne demek istiyorsun? Bir yapı oluşturmak için o makineye fiziksel olarak erişiyor musunuz?
Vincent Savard


13
Gerçek WTF, tüm modern açık kaynaklı alternatiflerden daha kötü olan Clearcase'tir. Bu proje hangi dilleri / dilleri ve yapı ne kadar büyük / karmaşık?
pjc50

7
Alet mi kullanıyorsun? Git / SVN ve Jenkins / Takım Şehir / Ahtapot / TFS, vb. Yoksa başka bir bilgisayara mı giriş yapıyorsunuz, Visual Studio'yu mu yüklüyorsunuz ya da ne yapıyorsunuz ... proje kopyalama, yükleme, derleme ... Profesyonel araçlar mı kullanıyorsunuz veya el ile mi yapıyorsunuz?
WernerCD

84
Yapım makinem Güney Carolina'da bir yerlerde ve ben Seattle'dayım. Sizi temin ederim ki kullanmak için herhangi bir merdivenden aşağı inemem. İnşaat makinesine fiziksel olarak en son girdiğimde, 1994 yılında Microsoft derleyiciler için makine yapımından sorumlu stajyer olduğum ve küçük bir dolaba sığdıklarını düşünüyorum; onlar şimdi bir yerlerde bütün bir veri merkezi. Makineyi ağınıza alın; daha iyisi, bulutun içine sokun ve başkasının onunla ilgilenmesini sağlayın.
Eric Lippert

Yanıtlar:


138

Normalde sadece özel bir yapım makineniz olmaz, aynı zamanda bu makinede bir yapım sunucusu çalıştırırsınız. Özel bir yapım makinesi yalnızca bir geliştiricinin çalışmasını hiçbir zaman engellememe ve merkezi bir makineden dağıtma avantajını sunar.

Bir yapı sunucusu çok daha fazlasını sunar. Bir oluşturma sunucusu, CI'ye (sürekli entegrasyon) izin verir, yani VCS'nize (git gibi) her basışta otomatik olarak oluşturulacağı anlamına gelir, eğer bunlara sahipseniz ve "tek tıklamayla konuşlandırmaya" izin verirse ünite testleri bile yapabilir. Yapılar veya testler başarısız olursa, derleme sunucuları posta başına sizi uyarabilir. Olanlar hakkında tarihsel veriler ve eğilimler sunuyorlar.

Yapı sunucularına genellikle, bir tarayıcıda çalışan bir web gui kullanarak, aynı anda birden fazla kullanıcı veya ekip tarafından erişilebilir.

Java dünyasında en çok kullanılan yapım sunucularından biri Jenkins. Jenkins, C ++ yapılarında da gayet iyi çalışıyor (Bu iki dili kullanıyor görünüyorsunuz). Jenkins kendini otomasyon sunucusu olarak adlandırır, çünkü programlama ve inşaatla ilgili olması gerekmeyen her türlü görevi yerine getirebilir.


3
Aslında kolejden beri c ++ 'a dokunmadım, ama işe yaradığını anlayabiliyorum. Bu durumda, aslında ne yaptığımızın amaçlanandan çok uzak tutulabileceğini düşünüyorum.
Zibbobz

21
Bazı diller için (özellikle C ++) daha fazla işlem gücüne sahip özel bir kutuya sahip olmak, nispeten yavaş bir derleme olması koşuluyla da faydalı olabilir.
enderland

31
Sürekli Entegrasyon, bir derleme sunucusuna sahip olmaktan daha fazlasını ifade eder - aynı zamanda "büyük patlama" birleştirme sorunlarını önlemek için herkesin birbirini olabildiğince sık değiştirmesi anlamına gelir. Aksi takdirde, yerinde.
Rob Crawford

Bir örneğin burada yapılan noktaya verdiği gücü sevsem de, bu cevabın son paragrafının hala gereksiz olduğunu düşünüyorum.
Pierre Arlaud

3
“Özel bir yapım makinesi yalnızca bir geliştiricinin çalışmasını hiçbir zaman engelleme ve merkezi bir makineden dağıtma avantajını sunar.” Tamamen doğru değil. Asker, geliştirici bir makinede kirli bir ortamın olmasının çok kolay olduğunu belirtti. Dahil edilen kütüphaneler ve diğer ortam değişkenleri derleme sonucunu değiştirebilir. Özel bir makine, kolay inşa yeniden oluşturma için izin vermek için iyi belgelenmiş bir ortama sahip olmalıdır.
TafT

107

Traubenfuchs'in cevabına ek olarak, sorunuzdaki bir yapım makinesi için başka bir nedene işaret ettiniz.

Yazılım üzerine inşa Sırf senin makine, bunun başkasının üzerine inşa edeceği anlamına gelmez. Makinenizde olan bazı rastgele dosyalara güveniyor olabilirsiniz (ve sürüm kontrolü altında bile olmayabilir). Gizli bir derleme betiğinden çağrılan unutulmuş bir uygulamaya veya kütüphaneye güveniyor olabilirsiniz.

Özel bir yapım makineniz varsa, neyin yüklü olduğunu bilmeniz gerekir. Bu iyi belgelenmelidir. Yazılımı yeniden kurmak için herhangi bir ihtiyaç varsa, belki de yıllar sonra, sadece üzerinde belgelenenlerle yüklenen yeni bir yapım makinesi oluşturmak gerekir.


37
+ 1 Bir geliştiricinin makinesinde çalışan bir şey değil, ekibinin geri kalanı için değil ...
user2259716 3:17

45
Bu. Ana başka bir makinede inşa amacı sahip olmaktır inşa tekrarlanabilir ; özellikle işlenmemiş maddeleri, farklı çevre değişkenlerini vb. denklemden kaldırarak.
Matthieu M.,

9
Bunun üzerine genişletin: her bir derlemeye başladığınız yeni, temiz bir kap görüntüsü kullanın. Ardından bir bootstrap betiği sistemi kurun. Bu gerçekten tekrarlanabilir yapıları garanti eder.
Matthias Kuhn

9
@MatthiasKuhn: gerçekten (bayt için bayt) çoğaltılabilir yapılar çok daha fazlasını gerektirir, cf: reproducible-builds.org wiki.debian.org/ReproducibleBuilds
ninjalj

1
Ayrıca, ürünün Linux sürümü Linux masaüstünüzde testler oluşturup geçtiğinden, Windows sürümünün veya Mac sürümünün oluşturacağı anlamına gelmez.
Süleyman Yavaş

53

Özel bir yapım makinesine sahip olmanın temel nedeni, yapıyı kimin yaptığından bağımsız olarak tutarlı yapımlar elde etmektir. Geliştirici iş istasyonları nadiren (okunur: hiç) aynı değildir. Her derlemenin bağımlılıkların ve derleyicilerin aynı sürümlerini kullandığını bilmek zordur. Dev iş istasyonu ile ilgili en kötü sorunlardan biri, geliştiricilerin sürüm denetimine denetlenmeyen kodlardan derlemeleri olabilir.

Hangi platformları / dilleri kullandığınız belli değil ancak ideal olarak doğrudan kaynak kontrolünden çeken bir inşa sunucunuz olmalıdır. Yani, bir derleme gerektiğinde, kaynağı havuzun belirli bir sürümünden alır ve otomatik olarak derler. Bu, derlemeyi kodlamak için otomatik derleme araçlarının kullanılmasını gerektirir. Buna sahip değilseniz, bu adım 1 olmalıdır.

Kalkınma için yerel olarak inşa etmenin yanlış bir tarafı olmadığını unutmayın. Kesinlikle yerel olarak çalışan birim testleri, kod kalitesi analizleri ve kod oluşturma derlemeleri için çalışıyor olmalısınız. Aksi takdirde çok zaman harcıyor olacaksınız. Yapı sunucusunun çıktısı, potansiyel olarak üretime taşımak istediğiniz herhangi bir şey içindir. Entegrasyon ve kabul testi gibi tüm KG işlemlerinin yalnızca derleme sunucusundaki derlemelerle yapılması gerekir.


Ek olarak, ek virüs direnci.
Joshua

@Joshua Size bu fikri ne veriyor?
jpmc26

14
@ jpmc26: İnşaat makinesi üzerine kurulu çok daha az yazılım alır, daha az uzaktan erişim noktasına ihtiyaç duyar ve hiç kimse web tarayıcılarını rasgele internet sitelerine açmaz.
Joshua

19

Diğer cevaplar, yapıyı otomatikleştirmeniz gerektiğine dikkat çekti; bu, başka bir ofise gitmenin gerekli olmadığı anlamına geliyor. Bununla birlikte, derleme işleminizi geliştirmek için gerçekleştirebileceğiniz bazı adımlar önereceğim:

  • Öncelikle, derleme sunucusuna uzaktan erişim sağlayın! "Make" komutunu yazarak el ile oluşturursanız, bu, "make" yazması için başka bir ofise gitmeniz gerekmediği anlamına gelir, derleme sunucusuna SSH yazıp "make" yazabilirsiniz. Henüz make veya benzer bir yapı sistemi kullanmıyorsanız, böyle bir yapı sistemini kullanın.
  • İkincisi, sürüm kontrol sisteminden en son değişiklikleri otomatik olarak çeken sürekli bir entegrasyon ortamı kurun (eğer sürüm kontrol sisteminiz var, değil mi? Değilse de, bu ek bir adım olur) ve bunları oluşturur. Jenkins'i öneririm. Jenkins'i birim testlerinizi ve sistem düzeyinde entegrasyon testlerini yürütmek için de ayarlayın (her ikiniz de, doğru mu? Değilse, onları birim testlerinden başlayarak ve ardından sistem düzeyinde entegrasyon testlerine biten) oluşturun.
  • Üçüncüsü, aynı makineyi diğer ekiplerle paylaşmayı sorunlu buluyorsanız (örneğin, hangi işletim sistemi ve hangi sürümü kullanmanız gerektiği konusunda farklı görüşleriniz varsa), sanallaştırma kullanmayı düşünün. Günümüzde iyi bir sunucu çok sayıda sanal makine çalıştırabilir. Belki de 32 bitlik bir makine ve 64 bitlik bir makine ayarlayabilirsiniz, böylece yapının her iki mimaride da çalıştığını bilirsiniz.
  • Son olarak, bu gerekli olmayabilir: örneğin, uygulama performansınızın büyük önemi varsa ve aynı anda çalışmakta olan diğer sürümler / test çalıştırmaları, sonuçlarınızı çok fazla etkiliyorsa, özel bir makineniz olması gerekiyorsa, özel bir donanım sunucusu kurun. sadece sen kullan. Bununla birlikte, 40'a kadar sanal CPU çekirdeğine veya daha fazlasına sahip olabilecek son sunucularda, aynı CPU çekirdeğine erişimi paylaşmayan birkaç sanal makine oluşturmak nispeten kolaydır.

Paylaşılan bir makineyi elle yapılanlardan çok daha iyi düşünürdüm. Şu andaki projem şimdi sanal bir makine kullanıyor, ancak sistem düzeyinde entegrasyon performans testlerine duyulan ihtiyaç nedeniyle, performans testlerinin 17 gerektirdiği 40 sanal CPU çekirdeği olan özel bir sunucuya geçiyoruz.


16

... ofisimizde gerçek bir makine kullanmak yerine, tek bir makineyi diğer birkaç grupla paylaşmak zorundayız ...

Kötü bir şeymiş gibi söylüyorsun.

Artık tüm yapılarınızın - sizin ve diğer takımların - inşa edildiği ortak bir yapım sunucunuz var. Yapının tutarlılığı? Kontrol.

... ofisimi tüm gerekli bilgilerle terketmek ve sonra merdivenlerden aşağıya inip başka bir ofise gitmek zorunda kalmanın zorluğu, basit bir yapı oluşturmak için beni neden ilk başta teklif ettiğimi merak ediyor.

Hala yapıyı el ile gerçekleştiriyorsunuz ve bu iyi değil.

Sizin adınıza yapılacak inşaatlar için / sıra isteklerini gönderdiğiniz ve bu sürecin size sonuçları geri göndermesini istediğiniz bir sunucu işlemine ihtiyacınız var.


5
“Kötü bir şeymiş gibi söylüyorsun.” İstedikleri herhangi bir önemsiz yüklemek için serbest saltanatı varsa olabilir. Uzaktan kullanıyorlarsa veya fiziksel olarak erişiyorlarsa, bunun nasıl önlenebileceğini anlamıyorum.
jpmc26

7
“Bunun kötü bir şey olduğunu söylüyorsun. Artık, tüm yapılarının - senin ve diğer takımların - inşa edildiği ortak bir yapı sunucun var. Yapıların tutarlılığı? Kontrol et” Tutarlı bir yapının tam tersi bu! Başka bir ekip derleyicisini veya başka bir aracı güncellemeye karar verirse, aniden tamamen farklı bir yapı ortamı ile karşı karşıya kalırsınız. Bu hemen hemen en kötü durum senaryosu (başlamak için bir inşaat makinesine sahip olmamak dışında).
Voo

1
Yeni yapılar oluşturmak için otomatik bir işlem yapmak istediğine karar verdi, ancak aynı zamanda yapı ortamınızın kendi kontrolünüz altında olduğundan emin olmak için yapı aracılarınızı sanallaştırmak istiyorsunuz. VM'ler dev ops için inanılmaz bir araçtır ve bundan en iyi şekilde yararlanmalısınız.
Voo

@Voo Neredeyse en kötü durum senaryosu, orta hal senaryosu. Askerin şu anda sahip olduğu en kötü durum senaryosu. (Ayrıca, derlemeleri asla çoğaltmazsanız, rastgele derleyici güncellemelerinin çok fazla bir sorun olmadığını unutmayın)
user253751

@ immibis Parite içindeki kısmı, alıntı yaptığınız bölümden hemen sonra mı okudunuz? Bir derleme sunucusu varsa, bu en kötü durum senaryosudur. Yeniden üretilemeyen hatalarla ilgili sorun, bu arada bütün yapı ortamınız değiştiyse Düzeltmeleri gerçekten yapamamanızdır. Sadece, bagaja yakın tutulan ve piyasaya sürülen tek bir sürümünüz varsa, bu pek sorun değil, fakat diğer tüm durumlarda oldukça kötü.
Voo

1

İlgili diğer cevaplara ek olarak, aynı zamanda binalarınızı doğrudan söz konusu makinede çalıştırıyor gibi görünüyorsunuz.

Güvenilir bir yapı sistemi için, özellikle yapı makinesini diğer kullanıcılarla paylaşırken, yapılarınızı sanal bir makine içerisinde çalıştırmak normaldir. Bu, diğer kullanıcıların, kodunuzun bağlı olduğu kendi uygulama sürümlerini veya kitaplıklarını yükleyerek oluşturma davranışınızı değiştirmemesini sağlar. Bunun en büyük avantajı, VM'nin kolayca yedeklenebilmesi ve başka herhangi bir bilgisayara (kendi geliştirme makineniz de dahil) kolayca kopyalanabilmesidir.


1

Bağımsız geliştiricilerin kütüphane yapılandırmalarından, IDE, işletim sisteminden bağımsız olarak yapıları gerçekleştirmek için merkezi ve tarafsız bir konum sağlar.

Özel bir yapım makinesi ile, depoya bir kod zorladığında her seferinde yeniden oluşturmasını sağlayabilirsiniz. Birisi yapıyı bozduğunda, derhal bir uyarı gönderebilir, böylece sorun derhal giderilebilir.

Her şeyi daha fazla tekrarlanabilir ve güvenilir kılmanın yanı sıra havuzun gizlenen bağımlılık sorunları olan kırık çöplerle dolmamasını sağlamanın yanı sıra, geliştiricilerin hayatlarını kolaylaştırır çünkü makinelerinde çalışacak yapıyı elde etmek için yapmaları gereken her şeyi kopyalamaktır. inşaat makinesinde yapılıyor.


4
Bu, önceki 6
cevapta
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.