PHP projeler için bir dağıtım / build / CI döngüsü ayarlama

7 Cevap php

Ben büyük, ağırlıklı olarak PHP tabanlı bir takım projeler üzerinde çalışıyor, benim çoğu zaman yalnız bir geliştirici değilim. Ben profesyonelleşme ve kod tabanı değişiklikleri nasıl ele otomatikleştirmek ve geçiş köklü değişiklikler yapmak zorunda kalmadan mümkün bir ekip çalışması yapan Sürekli Entegrasyon sürecini oluşturmak istiyorum.

Ne ben şu anda yapıyorum ben her proje için yerel bir test ortamı var ise; Ben her proje için SVN kullanmak; değişiklikler lokal olarak test ve daha sonra genellikle FTP üzerinden on-line versiyonu, aktarılır. API belgeleri kaynak koddan elle oluşturulur; Birim testleri ben yavaş yavaş içine alıyorum şey vardır, ve henüz benim günlük rutin bir parçası değil.

Ben öngören ediyorum "build döngüsü" aşağıdaki yapardın:

  • Bir changeset lokal olarak test edildikten sonra SVN içine kontrol alır.

  • Ben inşa sürecini başlatmak. SVN HEAD revizyon gerekirse modifiye ve yüklemek için hazır, teslim alır.

  • API Belgeleri otomatik olarak oluşturulan alır - Ben henüz ayrıntılı kurmak varsa, varsayılan bir şablonu kullanarak, bütün kod tabanı tarıyor.

  • Yeni revizyon FTP üzerinden uzak konuma dağıtıldığı (bazı dizin yeniden adlandırma, chmodding, veritabanları ithal ve seviyor dahil.) Bu çok ben zaten phing gibi bir şey, ama ben açığım Tabii alternatifleri.

  • Önceden tanımlanmış bir yerde ikamet Birim testleri çalıştırılır. Ben e-posta, RSS ya da yakala ve bir web sayfası içine koyabilirsiniz (tercihen) HTML çıktısı kullanarak başarısızlık veya başarı haberdar ediyorum.

  • Önceden tanımlanmış bir yerde (isteğe bağlı), bir son kullanıcı "changelog" metin dosyası teslim mesajı (aynı anda foo "ve" bar "," Her ikisi için filtre artık mümkün "önceden tanımlanmış kısmı ile güncellenir zaman). Bu mesaj mutlaka SVN muhtemelen çok daha fazla dahili bilgi içeren mesaj, taahhüt ile özdeş değildir.

  • Böylece kodu ölçümler, kod stil denetimi ve benzeri şeyler hemen benim birincil odak değildir, ancak uzun vadede, kesinlikle olacak. Out-of-the-box bu getirmek Çözümleri çok nazik üzerine baktı.

Ben arıyorum

  • Feedback and experiences ya da benzer bir durum vardı, ve başarıyla bu bir çözüm uygulanan kişilerin

  • Özellikle, good step-by-step tutorials and walkthroughs Bu kurmak için nasıl

  • as much automation as possible, örneğin her yeni proje için çok üzerinde bir iskelet API, test durumları ve oluşturarak sağlamak çözümleri.

ve ayrıca

  • Product recommendations. Ne kadar biliyorum raporlama kısmı için bina için phing / karınca, ve phpUnderControl veya Hudson olduğunu. Ben bildiğim kadarıyla gördüğünüz gibi hepsini seviyorum, ama ben tabii onlarla ayrıntılı deneyimim var.

Ben çalışma ile swamped am, bu yüzden basit çözümlere doğru güçlü bir eğilim var. Bir özellik yoksa, diğer yandan, ben çok sınırlı olma konusunda ağlayacaksın. :) Point-and-click çözüm de açıktır. Ben PHP projeleri ile çalışabilir ticari ürün önerileri de duyuyorum.

My setup

I am working on Windows locally (7, to be exact) and most client projects are run on a LAMP stack, often on shared hosting (= no remote SSH). Ben arıyorum solutions that I can run in my own environment. I am ready to set up a Linux VM for this, no problem. Hosted solutions are interesting for me only if they provide all of the aspects described, or are flexible enough to interact with the other parts of the process.

Bounty I am accepting the answer that I feel will give me the most mileage. There is a lot of excellent input here, I wish I could accept more than one answer. Thanks everyone!

7 Cevap

I-buildbot, CruiseControl.net, CruiseControl ve Hudson ile yapılmış var. Gerçekten CruiseControl * sevdim Tüm rağmen, gerçekten karmaşık bağımlılık durumlarda bir güçlük sadece çok fazlaydı. buildbot kurmak kolay değil, ama güzel bir aura (sadece python gibi, hepsi bu) var. Ama hudson eski üç çünkü kazandı

  1. Bu kurmak için sadece kolay
  2. Bu özelleştirmek için kolay
  3. Bu iyi görünüyor ve güzel bir bakış işlevselliği var
  4. Kendisini ve tüm yüklü eklentileri için, nokta-ve-tıkla güncellemeleri var. Bu benim takdir, gerçekten güzel bir özellik daha

İhtar: Ben sadece hiç (CC.net mono koştu) yukarıda belirtilen yapı sunucuları için üs olarak kullanılan linux, ama hepsi gerektiği - çapraz platform çalıştırmak - dokümanlar göre.

Setting up a hudson server

Önkoşul:

  • Java (1.5 gayet iyi hizmet edecek)
  • (Ben hudson kullanıcı için ayrı bir hesabı var) subversion sunucuya erişim Oku

Buradan, bu sadece:

java -jar hudson.war

(Başka belirleyebilirsiniz Bu doğru konsol kapalı bir küçük sunucu örneğini çalıştırın ve size önceden bu port üzerinde çalışan başka bir şey yoksa, sizin localhost:8080 kurulumunu göz gerekir --httpPort=ANOTHER_HTTP_PORT Yukarıdaki komut seçeneği) ve her şeyi geçirerek liman 'yükleme' sürecinde iyi gitti.

Eğer the available plugins directory giderseniz, siz (yıkılma destek varsayılan başına yüklü) ve yukarıda belirtilen görevleri desteklemek için eklentileri bulacaksınız.

O size iştahını kabartmak varsa, bu tür tomcat veya jetty gibi bir java uygulama sunucusu yüklemeniz gerekir. Installation instructions tüm önemli uygulama sunucuları için kullanılabilir

Update, Kohsuke Kawaguchi, bir windows service installer Hudson için inşa etmiştir

Setting up a project in hudson

Aşağıdaki yürüyüş-through in bağlantıları http://localhost:8080 bulunan Hudson çalışan bir örneğini varsayar

  1. Soldaki menüden new Job seçiniz
  2. İşe bir ad verin ve Build a free-style software project listesinde işaretleyiniz
  3. 'Tamam' tuşuna basarak işin yapılandırma sayfasına götürecektir. Tüm seçenekler bunların yanı sıra küçük bir soru işareti var. Bu basılması seçeneğiyle ilgili bir yardım metni getirecektir.
  4. Seçenek grubuna 'Kaynak Kodu Yönetimi' altında Subversion kullanarak olacaktır. Hudson url erişiminin yanı sıra yerel modül erişim hem de kabul
  5. Seçenek grubuna 'Tetikleyiciler'i kurmak' altında, 'Anket SCM' kullanmak istiyorum. Burada kullanılan sözdizimi cron'nun olduğunu, bu nedenle yoklama subversion deposu her 5 dakikada olur edilecek 5 * * * *
  6. Projeyi inşa süreci seçenek grubunun 'İnşa' altında belirtilir. Zaten ihtiyacınız olan tüm hedefleri ile bir karınca yapı dosyası varsa, şanslısınız. Sadece seçim 'ant çağır' ve hedefin adını yazın. Seçenek grubu yanı sıra kutudan Maven ve kabuk komutlarını destekler, ancak bir plugin available for phing da vardır.
  7. Bu tür e-posta bildirimleri veya yapı eserleri arşivleme gibi 'Post Eylemleri kurmak' ek yapı eylemleri işaretleyin.

Hiçbir eklentileri var hangi hudson için süreçleri kurmak için, yapı kurulum içinde bir kabuk doğrudan onları arayabilirsiniz, ya sen olabilir write you own plugin

Pitfalls:

  • Eğer eserler inşa üretmek varsa, hudson düzenli aralıklarla kendisine sonra temizlemek için hatırlıyorum.
  • Eğer kurmak 20'den fazla proje varsa, not on Hudson varsayılan ana sayfa olarak kendi inşa durumunu gösteren düşünün

İyi şanslar!

Aradığınız terim: sürekli entegrasyon.

http://maff.ailoo.net/2009/09/continuous-integration-phpundercontrol-git/: İşte GYTE + phpundercontrol kullanan birinin bir örnektir

(CI sunucusu) CruiseControl, kaynağı olarak Hosted SVN / GIT kullanabilirsiniz. Yani bile GitHub ile kullanmak veya beanstalk veya başka bir şey olabilir.

Sonra yazılım tür aşağıdaki ile bu entegre edebilirsiniz:

  • PHPUnit
  • php-codesniffer
  • phpDocumentor
  • PHP gcov
  • PHPXref
  • Yasca
  • vb

Peki bu barındırılan CI deneyebilirsiniz: http://www.php-ci.net/hosting/create-project

Bunları kendiniz entegre halinde, bu araçlar özel desteğe ihtiyacı olduğunu, ancak unutmayın.

Ayrıca proje yönetimi ve yama yönetimi düşündünüz mü?

Siz proje yönetimi için Redmine kullanabilirsiniz. Sürekli entegrasyon entegre destek, ancak istemci tarafı olarak (değil CI sunucu olarak) gelmiştir.

Barındırılan bir SVN / GIT / etc kullanmayı deneyin. çözüm, onlar yedekleri kapak ve çalışan kendi sunucuları tutmak, böylece geliştirme odaklanmak çünkü.

Kurulum Hudson, bakın nasıl bir tut için: http://toptopic.wordpress.com/2009/02/26/php-and-hudson/

Ben Atlassian benim ana PHP proje için Bamboo sürekli entegrasyon sunucu (örneğin fisheye (depo tarama), jira (issue tracker) olarak diğer ürünlerle birlikte ve kullanımı clover (kod kapsama)).

Bu SVN destekler ve şimdi Git destekliyor ve büyük bir kullanıcı arayüzü var. Bu linux, windows ve mac için mevcuttur ve kurulum kendi araçları gün almak gibi değil (benim gibi) insanlar) için büyük kendi tomcat sunucu üzerinde bağımsız çalıştırabilirsiniz. Pahalı görünse de, kendimi yalnız bir geliştirici olmanın Ben 10 $ (yazılım tarafından 10 $) için başlangıç ​​kiti lisansını satın aldı. Bu küçük takımlar için büyük ve göz değer.

Ben senin gibi aynı ortamı yok ama ben de yalnız bir geliştirici değilim.

Ben ürünleri veya kullandığınız ürünler bile türleri çok kullanmak istemiyorum, ama sana benim deneyim verecektir.

Ben PROD çevre ile PARRALLEL bir TEST ortamı çalıştırın. Ben hiçbir yerel test başına var. Gerçek bir test ortamı içine soemthing kalkmak çok zor ise, o benim inşa sürecini düzeltmek. Ortamlarda farklı olarak ben, lokal test nokta görmüyorum. GÜNCELLEME: Ben bir şey yüklemeden önce ben yerel yapılacak tek şey "php-l" çalıştırılır. Aptalca hatalar durdurur.

Derleme işlemi kaydedilmemiş kodu içeren geçerli çalışma, ne olursa olsun ile çalışır. Bu çay herkesin fincan değil, ama çok sık TEST gidiyorum. Herşey PROD gitmeden önce işlenen alır.

(Sizinkine benzer) benim yapı sürecinin bir parçası iki META dosya oluşturur. Bir son (tipik) 100 değişiklik içeren ve ayrıca bana geçerli changeList sayısını verir. Bana ne değişiklikler yüklü gösterir. Diğer dallar, bu yapı içinde kullanılan bana tam olarak ne gösterir (Perforce açısından) CLIENTSPEC içerir. Birlikte bu bana tekrarlanabilir oluşturur ver.

Ben hedef ortama düz inşa, ancak sunucuda bir sahneleme alanı yoktur. Ben bu nedenle bu mantıklı SSH kullanın. Bu bana birkaç avantajı verir. En önemlisi büyük bir yüklenme ile yarım ölüyor önler. Ayrıca bana META dosyaları saklamak için bir yer verir, ve tüm yapı dosyaları otomatik olarak arşivlenir (yani düz sırt herhangi bir yapı için gidebilirsiniz). Komut ayrıca güncelleştirme (Öyle "svc-t" daemontools kullanın) (orada günlük akışında bir giriş ve ben öncesi ve görebilirsiniz sonrası) ve bütün cinleri başladı kaydeder. Tüm bu hedef makinede daha iyi olur.

Bir diğer konu DB değişikliklerdir. Ben her seferinde şema değişiklikleri güncellemek DB şema bir ana komut dosyası tutmak. Değişikliklerin her biri ayrıca hazırlama alanına yapı ile yüklenen bir changes.sql komut dosyası içine gidin. Komut yüklemek senaryonun parçası olarak çalıştırılır.

Kurulum ve yapılandırma işlemleri otomatikleştirir ücretsiz barındırılan CI platformu, fazend.com düşünün. Sen her şey on-demand yapılır kurulum sürüm kontrolü, vb hata izleme, CI sunucusu, test ortamında, gerek yok.

Ben çoğunlukla sys admin değilim ama bazen ben de PHP kod. Bir yan proje olarak ben basit ve ağrısız Jenkins kullanarak bir tam şişmiş PHP CI ortamı kurmak için yapacak bazı komut dosyaları oluşturulur. Ayrıca böylece her yapı adım nasıl yapılandırıldığını görebilirsiniz sizin için bir örnek proje çalışır.

Eğer denemek istiyorsanız, ihtiyacınız olan tüm Debian / Ubuntu kutu ve kabuk erişim.

http://yauh.de/articles/379/setting-up-a-ci-environment-for-php-projects-using-jenkins-ci

Update benim cevap için bazı içerikleri eklemek için:

Sadece yanıtlayıcı PHP kullanarak bir Jenkins CI kurabilirsiniz. V1.4 beri kendi galaxy.ansibleworks.com topluluk sitesinden indirebilir ve sizin için ağır kaldırma yapacak rolleri destekler. Bu denir jenkins-php.

Geçenlerde süreci aynı tür başladık ve svn hosting için Beanstalk kullanıyorum.

Ücretli hesaplarda iki şık özellikler ($ 15pm sanırım başlar) vardır:

  • dağıtım kullanıcı bir düğmeye tıklamasıyla dağıtılabilir hazırlama ve üretim sunucuları için ftp hedefler, (inc bir revizyon ve şube belirterek) oluşturmanızı sağlar
  • webhooks kullanıcı revizyon numarası, açıklama ve kullanıcı gibi şeyler geçerken, her bir taahhüt / dağıtmak denir bir url kurmak için izin. Bu dokümanlar, çalışma ünite testleri ve güncelleme Değişiklikleri gösteren güncellemek için kullanılabilir.

Ben bu iki özelliği ile diğer barındırılan veya kendinden barındıran svn sunucuları vardır eminim, ama beanstalk i deneyime sahip biridir ve çok, çok iyi çalışıyor

Ben sürecine daha fazla dağıtım entegre etmek için kullanılan olabilir düşünün bir API de var.