CI, tercüme edilen diller için nasıl kullanılabilir?


23

Daha önce bir Sürekli Entegrasyon sistemini (CI) hiç kullanmamıştım. Öncelikle MATLAB, Python veya PHP kodlarım. Bunların hiçbirinin bir oluşturma adımı yoktur ve bir CI'nin işim için nasıl kullanılabileceğini anlamıyorum. Büyük bir firmada büyük bir projede bir arkadaş bu dilin önemli olmadığını söyledi.

Yapım adımım yoksa CI'ın bana nasıl faydası olacağını anlamıyorum. CI'yi birim testleri uygulayacak bir test ortamı olarak düşünebilirim. Bir şey mi eksik?



14
Bunun doğru olup olmadığı, neyin "inşa adımı" olduğunu düşündüğünüze bağlıdır. Size uygulanabilir bir şey vermek için, bunu sadece minimum minimum derleme olarak görüyorsunuz. Ekibimde derleme, statik analiz ve birim testleri olarak görüyoruz (daha fazla görev için yer var). Bu tanım, birim testlerinde başarısız olan bir taahhüdün "derlenmemiş" olması ve depoya başlaması için izin verilmemesi avantajına sahiptir.
Chris Hayes

Chris'in noktasını genişleterek, bir CI sistemi tüm otomatik testleri test edebilir ve etmelidir - derleme ve bağlama, otomatikleştirilmiş testlerin bir şekli olarak görülebilir. Kaynak kısıtlamalarınız varsa, yavaş testlerden bazıları yalnızca gece yapılarında veya haftasonu yapılarında çalışır, ancak CI bunları çalıştıracaktır. Kendinize şu soruyu sorun: Neden testleri otomatikleştirmek, ancak yine de otomatik testleri manuel olarak çalıştırmak istiyorsunuz?
Peter - Unban Robert Harvey

Yanıtlar:


32

Bir terim olarak sürekli entegrasyon iki farklı fikri ifade eder.

Birincisi bir iş akışıdır: Bir ekipteki herkes kendi branşında çalışan ve yerine birkaç hafta süren programlamanın ardından değişikliklerini ana hatta birleştirmeye çalışır, değişikliklerin (neredeyse) sürekli olarak entegre edilmesini sağlar. Bu sorunların erken yüzeye çıkmasını sağlar ve uyumsuz değişikliklerden kaçınır. Ancak, bir değişimin “işe yarayıp yaramadığını” kolayca kontrol etmemizi gerektirir.

İkinci fikrin geldiği yer burası, çok daha popüler hale geldi. Bir CI sunucusu, değişikliklerin mümkün olduğunca çabuk test edildiği temiz bir ortamdır. Temiz çevre, yapının tekrar üretilebilmesi için gereklidir. Bir kez çalışırsa, daima çalışması gerekir. Bu, “makinemde çalıştı” sorununu önler. Özellikle, yazılımınız farklı sistemlerde veya farklı yapılandırmalarda çalıştığında bir CI sunucusu değerlidir ve her şeyin çalıştığından emin olmanız gerekir.

Bir inşa adımının olmaması alakasızdır. Bununla birlikte, CI yalnızca bir test süitiniz varsa anlamlıdır. Bu test takımı otomatik olmalı ve hiçbir arıza olmamalıdır. Testler başarısız olursa, uygun geliştirici, ortaya koydukları sorunu çözebilecekleri bir bildirim almalıdır (derleme olarak bir derleme olmasa bile "yapıyı kırma").

Böyle bir sunucunun sadece testten daha fazlası için değerli olduğu ortaya çıktı. Aslında, çoğu CI yazılımı çeşitli konfigürasyonlarda testleri çalıştırmakta gerçekten berbattır, ancak her türlü işi yönetmede iyidir. Örneğin, “sürekli” birim testlerine ek olarak, gecelik olarak tam bir test yapılabilir. Yazılım, farklı Python sürümleriyle, farklı kütüphane sürümleriyle test edilebilir. Bir web sitesi ölü linkler için test edilebilir. Statik analiz, stil denetleyicileri, test kapsamı araçları vb. Kod üzerinde çalıştırabiliriz. Belgeler oluşturulabilir. Tüm test paketleri geçtiğinde, yazılımınızı yayınlamaya hazır olmanız için paketleme işlemi başlatılabilir. Bu, her zaman konuşlandırılabilir (ve demonte) bir ürün istediğiniz çevik bir ortamda kullanışlıdır. Web uygulamalarının yükselişiyle birlikte sürekli dağıtım fikri de var: Tüm testler geçerse, değişiklikleri otomatik olarak üretime itebiliriz. Elbette bu, test takımınıza gerçekten güvenmenizi gerektirir (eğer değilse, daha büyük sorunlarınız varsa).


3
"CI yalnızca bir test takımınız varsa anlamlıdır" - derlenmiş bir dil için, derleyicinin kendisinin birçok genel hatayla karşılaşılan ilkel bir test takımı olduğunu unutmayın.
user253751

@ immibis Bunun derlenmiş vs. Statik tip sistemli bir dil otomatik olarak belirli doğruluk özelliklerini ispatlayabilir . Bu sadece örneklerle çalışan testlerden daha iyidir. Derleme yaparken bir CI sunucusu tarafından bulunan tek yaygın sorun, bir dev'in yeni bir dosya işlemeyi unuttuğunu; Diğer tüm durumlarda gerçekten bir CI sunucusuna ihtiyacımız yoktur ve hataları kontrol etmek için yerel olarak derleyebiliriz.
amon

1
@amon Untrue. Son dakikada değişiklik yapmak ve daha sonra taahhütte bulunmadan önce derlemeyi test etmeyi unutmak çok nadir değildir. Ayrıca, yerel olarak yerel olarak yüklediğiniz, ancak başka bir yere yüklenmediğiniz bir şeye bağımlılıklar eklediğinizde de problemleri yakalar.
jpmc26

24

Doğru, yapımları gerçekleştirmek ve bu binaların doğru olduğunu kontrol etmek için bir CI sistemine özel bir gereksiniminiz yok, ama bu CI'nin ne olduğunun sadece bir kısmı.

CI'nın amacı, hataları en kısa sürede tespit etmektir, çünkü genel olarak konuşursak, bir hata daha önce düzeltilmesi daha ucuza yakalanır. Bu amaçla, bir oluşturma adımının gerekli olmadığı durumlarda, bir CI sistemi kod analiz araçlarının kullanımını, bir test ortamına konuşlandırılmasını, otomatikleştirebileceğiniz birim / entegrasyon / regresyon / diğer testleri ve diğer adımların kullanımını otomatikleştirebilir. hataları kontrol etmek için otomatik olarak gerçekleştirebilirsiniz.


8
Eklerdim: sistemi otomatik olarak test etmenin en belirgin yolu otomatik olarak çalıştırmaktır . Örneğin, bir web sitesini JMeter veya Selenium gibi araçlar kullanarak test edebilirsiniz.
reinierpost

7

Sürekli entegrasyon, kodun bir derlemesinden daha fazlasını gerçekleştirir. Hepsi bu kadar olsaydı, bunun için neredeyse o kadar fazla araca ihtiyacımız olmaz!

Sürekli bir entegrasyon boru hattının sıklıkla gerçekleştirildiğini elde edemediğim diğer bazı görevler:

  • Otomatik testlerin yapılması. (Python'un bir çok otomatik test kitaplığı vardır ve PHP en azından bazılarına sahiptir. MATLAB ile konuşamıyorum.)
  • Yazılımı dağıtım için bir araya getirmek. Bu işlemi otomatikleştirerek, her seferinde kesin, tutarlı ve tekrarlanabilir bir şekilde yapılmasını sağlarsınız. Hiçbir adım unutulmayacak; böyle bir dağıtım paketi oluşturmak en fazla bir tıklama alır. (Python uygulamanızı bir tekerlek olarak donatmak harika bir fikir!)
  • Etiketleme dönüm noktası taahhüt eder. Ne zaman üretim için bir paket oluşturursanız, muhtemelen etiketlemek istersiniz.
  • Otomatik artan sürüm numaraları. Genellikle bu sadece "yapı" numarası olur ve daha anlamlı kısımlar olmaz, ancak belirli bir yapıyı benzersiz şekilde tanımlamak güzel olabilir, bu nedenle neyin nerede konuşlandırıldığını bilirsiniz.

Sınırlı bir şekilde “sürekli entegrasyon” sınır çizgisine biraz daha ileri giderek, şunları da yapabilirsiniz:

  • İşletim sistemi kurmak ve bağımlılıklarınızı kurmak için otomatik bir işlem yapın.
  • Yazılımın kopyalarını otomatik olarak dağıtma (öncelikle web uygulamaları veya bir paket yöneticisi tarafından dağıtılan yazılımlar için kullanışlıdır). Bazı ekipler bunu üretime dağıtmak için kullanıyorlar (sürekli teslimat), ancak siz yapmasanız bile, kodun üretim dışı kopyalarını dağıtmak için yine de bu gücü kaldırabilirsiniz. Çalıştığım bazı projeler için, geliştiricilerin kodunu QA'ya sunmadan önce kodlarını test etmeleri için bir kopyaya, QA'nın test edeceği bir kopyaya ve demografik amaçlar için daha "kararlı" bir kopyaya sahibiz.

Mesele şu ki: sadece kod yazmanın yanı sıra yazılım geliştirme sürecinde periyodik olarak yapmanız gereken işler var. Bu görevleri otomatikleştirerek ve bir sunucuda çalıştırmalarını sağlayarak,

  • Tutarlı süreç (Stan ve Sally'nin işleri farklı şekillerde yapmasına izin vermezsiniz.)
  • Kodda kaydedilmiş işlemlerin bilgisi (Senaryoları okuyabilen herkes, bunu yapan ya da nasıl olduğunu bilen tek kişi yerine Sally'nin konuşlandırmaya katıldığı adımları öğrenebilir.)
  • İşlemlerin daha basit bir şekilde çoğaltılması (Web sitesinin birden çok kopyasının dağıtılması basittir: sadece yeni bir yapılandırma sağlayın!)
  • Daha kapsamlı testler (Bob yalnızca sayfasını test etti, ancak değişiklikleri Sally'nin sayfasını kırdı. Sally bir dosya kaydetmeyi unuttu. Stan, uygulamanın yanında kurulması gereken yeni bir bağımlılık ekledi, ancak IDE tarafından otomatik olarak yüklendiği için fark etmedi. Bunların hepsini bir şekilde veya başka şekilde gördüm.)

Ve muhtemelen akla bile gelmeyen bazı diğer avantajlar.


Cevap için teşekkür ederim. Örnekler harika. Keşke kabul edilen birden fazla cevabı oylayabilseydim: - /
Lord Loh.

@LordLoh. Telaşa gerek yok. Yardım edebildiğim için mutluyum. =) Bana bildirdiğiniz için teşekkürler.
jpmc26

1
Olumlu, mükemmel cevap. Her şey gibi, kötü yapılırsa reklamı yapılan avantajlardan yararlanamayabilirsiniz. EG tutarlılığı, proses bilgisi, sadelik, eğer yeniden inşa ederseniz, zarar görebilir. Yani ... ihtiyaçlarınızı gerçekçi bir şekilde ve Godspeed olarak değerlendirin!
brian_o

1

Çözümleri derlemeniz gerekmeyebilir, ancak CI, yapılandırma dosyalarını / klasör yollarını vs. değiştirerek ve bir ekip içindeyseniz, prod statüsündeki değişiklikleri teşvik edip dağıtma konusunda size yardımcı olabilir

Python kodunuzu 5 farklı QA sunucusuna dağıttığınızı ve farklı QA veritabanlarına işaret etmesini ve ardından otomatik test çalışmasının (CI tarafından tetiklendiğinde), yapıyı üretime teşvik etmesini ve orada her üretim sunucusu için uygun yapılandırma değişiklikleriyle dağıtmasını söyleyin. .

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.