“Otomatik inşa” ne demektir?


15

Bir projeye Sürekli Entegrasyon eklemeye çalışıyorum.

Wikipedia'ya göre , CI'nin önemli bir parçası otomatik yapılardır. Ancak, CI ve build otomasyon makalelerinin aynı fikirde olmadığı için bunun ne anlama geldiği konusunda kafam karıştı .

Özel karışıklık noktaları: "otomatik yapı" şu anlama gelir :

  • veya Perl gibi yorumlanmış bir dil kullanan bir proje?
  • son kullanıcının makinesinde kaynağından bina?
  • kullanıcının makinesinde yerel olarak bulunan bir RDBMS'deki veritabanı gibi, önceden derlenemeyen ve dağıtılamayan bağımlılıkları olan bir uygulama?

2
Her ikisini de etiketledim buildsve buildhangisini kullanacağımı bilmiyordum.

Yanıtlar:


14

Bazı teknolojiler için bir derleme adımının gerekli olmadığını belirterek haklısınız. Ancak, "yapı otomasyonu" terimini yorumlarken daha geniş bir bakış açısı edinmenizi öneririm. "Yapılandırma" yı aşağıdaki iki ana bileşeni içerecek şekilde düşünün:

  • Son kullanıcıya dağıtılan dönüştürme kaynağı yapıları (kod, veritabanı şeması, belgeler vb.) İçin işlem.
  • Söz konusu dönüşüm sırasında kalite güvence tedbirlerinin uygulanması

Otomasyon, o zaman, bu işlemlerin herhangi birinin - eğer olmasa da - otomatik hale getirilmesi anlamına gelir (yani, manuel müdahale gerektirmez). Bu, teknolojinize bağlı olarak oldukça çeşitli adımlar içerebilir:

Dönüşüm adımları:

  • Derleme
  • bağlayıcı
  • paketleme
  • yayılma
  • Veri göçü
  • Destek olmak
  • Bildirim

Kalite güvence adımları:

  • Derleyici uyarıları / hataları
  • Birim testleri
  • Entegrasyon testleri
  • Sistem testleri
  • Dağıtım kimlik doğrulaması

Günümüzde, iyi CI araçları tüm bu endişeleri çözmenize izin verecektir. Başlangıçta, çoğu mağaza kodlarının derlenmesini otomatikleştirmekle ilgileniyor, çünkü bu geleneksel yazılım geliştirmedeki ilk ve en görünür sorun kaynağı.


21

Otomatik derleme, aşağıdaki temel bilgileri içermesi gereken bir işlemin açıklamasıdır:

  1. Kaynak Denetiminden en son kodu getir
  2. En son kodu yürütülebilir dosyaya derleyin
  3. Derlenmiş koda karşı testler (birim testleri, sistem testleri, entegrasyon testleri) gerçekleştirin
  4. Tamamlanmış yürütülebilir dosyayı dağıtım için bilinen bir konuma dağıtın.
  5. Yapının sonuçlarını yayınlayın.
    5.1 Başarılı Derleme, Birim testi başarısı

Sıfır manuel müdahale ile çalıştırılması gereken bir süreçtir.


3
Açıkça sorulduğu için, geçerli olmayan adımların isteğe bağlı olduğunu belirtebilirsiniz. Örneğin, uygulamanız bir grup python komut dosyasıysa, 2. adım hiçbir şey olmayabilir veya kodu tek bir dosyaya sıkıştırmak kadar basit bir şey olabilir. Derleme adımı olmamak tamamen kabul edilebilir.
Bryan Oakley

@BryanOakley Bu adil. Komut dosyaları için derleme yapmamanın eşdeğeri, varsa tüm bağımlılıklarınızın bu noktada düzgün bir şekilde toplanmasını sağlamak olabilir. Örneğin, Python betiğiniz için gereken ek üçüncü taraf kitaplıkları, aşağıdaki adımların tümüne eklenecek şekilde dahil edilmelidir. Hedef ve yapı makinesinin her zaman gerekli tüm kütüphanelere sahip olduğu biliniyorsa, bu da gereksizdir.
Sheldon Warkentin

2

Benim düşünceme göre, otomatik bir yapı

  • otomatik olarak, bir programda veya her kaynak denetimine bağlı olarak gerçekleşir
  • herhangi bir sunucuya konuşlandırılabilecek bir dizi öğe oluşturur

Amaç, tekrarlanabilir - okunabilir: test edilebilen - bir dağıtım sürecine sahip olmaktır, böylece üretime konuşlandırdığınız zaman, işlerin yanlış gitmeyeceğine dair oldukça kesin bir kesinliğe sahip olursunuz. Oluşturma ve uygulama işlemlerinde ne kadar az insan etkileşimi olursa, sürümünüz o kadar güvenli olur.

Derlenmemiş bir diliniz varsa, yine de bir site oluşturabilir ve tek bir eser oluşturmak için sıkıştırın.

İyi bir CI aracı, birim testlerin yürütülmesi de dahil olmak üzere birçok işlemi derleme işlemine kodlamanızı sağlar. Ayrıca başarılı ve başarısız derlemelerinizin, test kapsamının vb. Kayıtlarını tutacaktır. Ancak bunların hiçbiri otomatik derleme olarak tanımlayacağım şeyin bir parçası değildir. (yani. İyi bir otomatik derleme işlemi bunlara sahiptir, ancak fakir bir işleme "otomatik derleme" denemez, çünkü bu şeylerden yoksundur.)

Entegrasyon / regresyon testlerinin oluşturma sürecinden ziyade dağıtım sürecinin bir parçası olarak çalıştırılmasını öneririm (uygun bir ortama sahipseniz, her derlemede dağıtabilirsiniz).


Programlanmış bir yapıya sahip olmak ve geliştiricilerin bir eylemle otomatik bir yapı başlatmasına izin vermek de yararlı olabilir (iki eylem varsa, gerçekten otomatik değilse, değil mi?) Bizim durumumuzda, bazı sistemler için yapı da her taahhüt başlama için uzun, bu yüzden zamanlanmış ve istek üzerine.
David Thornley

@DavidThornley: Evet. Bu yararlı. Çoğu CI aracı ayarlanan programınızın dışında bir yapı başlatmanıza izin verir. Ama yine de, otomatik bir derleme olmaktan çıkmıyor çünkü bu seçenek orada değil. Bir geliştiricinin her zaman tetiklemesi gerekiyorsa otomatik bir derleme olmaktan çıkacaktır.
pdr

1
a project using an interpreted language, such as Python or Perl?

Yorumlanan diller söz konusu olduğunda, şeyler vurulabilir veya atlanabilir. Bazı iç içe geçmiş diller derleyicilere sahiptir, ancak çoğu zaman bunları kullanmalarına gerek yoktur. Bu durumda, genellikle sadece kod derleme yerine sözdizimi ve ayrıştırma hataları için tarama veya doğrudan kod üzerindeki testleri çalıştırmak için atlayın.

son kullanıcının makinesinde kaynağından bina?

Benim için bu, son kullanıcıların programın en son sürümünü almak, derlemek, yapılandırmak ve gerektiğinde dağıtmak için çalıştırabilecekleri tek bir komut sağlayabileceğiniz anlamına gelir.

kullanıcının makinesinde yerel olarak bulunan bir RDBMS'deki veritabanı gibi, önceden derlenemeyen ve dağıtılamayan bağımlılıkları olan bir uygulama?

Bunlar, komut dosyalarının doğru olduğundan ve programın doğru bir şekilde sınandığından emin olmak için veritabanlarını otomatik olarak yok edip yeniden yapılandırabileceğiniz için sürekli tümleştirmenin test bölümünün altına düşecektir.


1

Sorunuzda tartıştığınız şey aslında 3 farklı kavramdır:

Özünde Sürekli Entegrasyon küçük değişiklikler yapmak ve bu değişiklikleri sıklıkla "küresel gerçek" ile senkronize etmektir. Bir geliştirici, bir hafta boyunca ödeme yapmak ve üzerinde durmak yerine, bir gün içinde tamamlanabilen görevler üzerinde çalışmalıdır, böylece kodu hiçbir zaman ana havuzla senkronize edilemez.

Takım ağrısına neden olmadan bunu başarmak için (örneğin, mevcut işlevselliği oluşturmayan veya bozmayan kaynağı kontrol etme). Geliştiricinin kodunun "derlemeyi bozmadığını" doğrulaması gerekir. Manuel olarak yapılırsa, bu, geliştirme sürecine ek yük getirir (bir kod satırında yapılan bir değişikliğin uygulamayı beklenmedik şekillerde etkileyebileceği çok uzun süren ve / veya birçok bağımlılığı olan bir projeyi düşünün).

Bu durumu hafifletmek için, bu yükü ortadan kaldırmak için başka teknikler kullanıyoruz.

Kaynağı kontrol etmek ve isteğe bağlı olarak uygulamanın olması gerektiği gibi çalıştığını doğrulayan otomatik testler çalıştırarak otomatik derlemeler kullanırız (bu adım yalnızca test paketi kadar yararlıdır).

Bir sonraki adımda sürekli teslimat , veritabanı ve diğer endişelerinizle ilgili sorununuzu giderir. Buradaki fikir, uygulamanın olabildiğince hızlı bir şekilde üretimin mümkün olduğunca üretime yakın bir ortamda çalıştığını doğrulayabilmemiz için veritabanı ve ortamın diğer faktörleri için bir miktar sürüm oluşturma sağlamaktır .


1
Harika noktalar ... pek çok insanın mesaj dizisinin en altına gelip oy kullanmaması çok kötü.
hotshot309

0

"Otomatik derleme", kaynak denetiminden bir (zamanlanabilir) eylemle (genellikle bir kabuk komut dosyası veya toplu iş dosyası) sevk paketine gidebileceğiniz anlamına gelir.

Tam olarak bir yapıyı oluşturan şey, bu bağlamda, tam olarak ne gönderiyorsunuz, nasıl teslim edildiğine ve geliştirme yığınızın çeşitli bölümleri için hangi adımların gerekli olduğuna bağlıdır, ancak her durumda, kaynak kontrolünde ne varsa ve gönderilebilir bir ürün (veya bir hata mesajı ve öfkeli bir proje yöneticisi) ile sonuçlanırsınız.

Basit bir Python projesi için, otomatik bir derleme yalnızca iki adımdan oluşabilir - kaynakları kontrol etme ve ilgili dosyaları doğru dizinlere kopyalama. Daha karmaşık projeler için aşağıdakileri içerebilir:

  • derleme, bağlama
  • otomatik testler yapmak
  • yükleyici paketleri oluşturma
  • yükleme
  • veritabanını değiştirme
  • yedek oluşturma (geri almanız gerektiğinde)
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.