Konfigurowanie cyklu wdrażania / budowania / CI dla projektów PHP

Jestem samotnym programistą przez większość mojego czasu, pracując nad wieloma dużymi projektami, głównie w oparciu o PHP. Chcę profesjonalizować i automatyzować obsługę zmian w bazie kodu oraz stworzyć proces ciągłej integracji, który umożliwi przejście do pracy w zespole bez konieczności wprowadzania fundamentalnych zmian.

To, co teraz robię, to to, że mam lokalne środowisko testowe dla każdego projektu; używam SVN dla każdego projektu; zmiany są testowane lokalnie, a następnie transferowane do wersji on-line, zwykle przez FTP. Dokumentacja API jest generowana ręcznie na podstawie kodu źródłowego; testy jednostkowe to coś, w co wkraczam powoli i nie jest to jeszcze część mojej codziennej rutyny.

"cykl budowania", który przewiduję, zrobiłby co następuje:

  • Zestaw zmian jest sprawdzany w SVN po przetestowaniu lokalnie.

  • Zaczynam proces budowania. Przegląd głowicy SVN jest sprawdzany, modyfikowany w razie potrzeby i gotowy do upload.

  • Dokumentacja API jest generowana automatycznie - jeśli jeszcze nie skonfigurowałem jej szczegółowo, używając domyślnego szablonu, skanując całą bazę kodu.

  • Nowa wersja jest wdrażana do zdalnej lokalizacji przez FTP (w tym niektóre nazwy katalogów, chmodding, importowanie baz danych i tym podobne.) To jest coś, co już Lubię phing bardzo, ale jestem otwarty na alternatywy oczywiście.

  • Testy jednostkowe uruchamiane są predefiniowane lokalizacje. Jestem informowany o ich porażce lub sukcesie za pomocą poczty E-Mail, RSS lub (najlepiej) wyjścia HTML, które mogę pobrać i umieścić na stronie internetowej.

  • (opcjonalnie) plik tekstowy "changelog" użytkownika końcowego w wstępnie zdefiniowanej lokalizacji zostanie zaktualizowany o wstępnie zdefiniowaną część komunikatu zatwierdzającego ("możliwe jest teraz filtrowanie zarówno dla" foo", jak i" bar " jednocześnie). Ta wiadomość niekoniecznie jest identyczna z Komunikatem SVN commit, który prawdopodobnie zawiera znacznie więcej informacje wewnętrzne.

  • Rzeczy takie jak metryki kodu, sprawdzanie stylu kodu itp. nie są obecnie moim głównym celem, ale na dłuższą metę z pewnością będą. Rozwiązania, które wprowadzają ten out-of-the-box są bardzo uprzejmie postrzegane.

Szukam

  • Informacje Zwrotne i doświadczenia od osób, które są lub były w podobnej sytuacji i z powodzeniem wdrożyły rozwiązanie tego problemu

  • Szczególnie, dobrze jak to skonfigurować?]}

  • Rozwiązania, które zapewniają jak najwięcej automatyzacji, na przykład tworząc szkielet API, przypadki testowe i tak dalej dla każdego nowego projektu.

A także

  • zalecenia dotyczące produktu . Do tej pory wiem, że phing / ant do budowy, i phpUnderControl lub Hudson do części reportażowej. Lubię je wszystkie tak dalece jak Mogę widzisz, ale nie mam z nimi żadnego szczegółowego doświadczenia.

Jestem zawalona pracą, więc mam silną skłonność do prostych rozwiązań. Z drugiej strony, jeśli brakuje funkcji, będę płakać, że jest zbyt ograniczona. :) Mile widziane są również rozwiązania typu Point-and-click. Jestem również do komercyjnych rekomendacji produktów, które mogą pracować z projektami PHP.

Moja konfiguracja

Pracuję na Windows lokalnie (a dokładnie 7) i większość projektów klienta są uruchamiane na stosie LAMP, często na współdzielonym hostingu (=brak zdalnego SSH). Szukam rozwiązań, które mogę uruchomić we własnym środowisku. Jestem gotowy, aby skonfigurować Linux VM do tego, nie ma problemu. Rozwiązania hostowane są dla mnie interesujące tylko wtedy, gdy zapewniają wszystkie opisane aspekty lub są wystarczająco elastyczne, aby współdziałać z innymi częściami procesu.

Bounty Akceptuję odpowiedź, która według mnie da mi najwięcej kilometrów. Jest wiele doskonałych danych wejściowych chciałbym przyjąć więcej niż jedną odpowiedź. Dziękuję wszystkim!

Author: Pekka 웃, 2010-02-01

9 answers

I ' ve been through buildbot, CruiseControl.net, CruiseControl i Hudson . Wszystko, co naprawdę podobało mi się CruiseControl*, było po prostu zbyt wiele kłopotów z naprawdę złożonymi przypadkami zależności. buildbot nie jest łatwy w konfiguracji, ale ma ładną aurę(po prostu lubię Pythona, to wszystko). Ale hudson wygrał nad poprzednią trójką, ponieważ:

    To jest po prostu łatwe do skonfigurowania]} To jest łatwe do dostosowania]}
  1. wygląda dobrze i ładnie przegląd funkcjonalności
  2. ma aktualizacje wskaż i kliknij, dla siebie i wszystkich zainstalowanych wtyczek. Jest to naprawdę fajna funkcja, którą doceniam coraz bardziej

Zastrzeżenie: używałem tylko Linuksa jako bazy dla wyżej wymienionych serwerów build (CC.net uruchomiony na mono), ale wszystkie powinny - według docs-działać międzyplatformowo.

Konfiguracja serwera hudson

Wymagania wstępne:

  • Java (1.5 będzie ci służyć tylko fine)
  • Dostęp do serwera subversion (mam osobne konto dla użytkownika hudson)]}

Stąd to tylko:

java -jar hudson.war

Spowoduje to uruchomienie małej instancji serwera bezpośrednio z konsoli i powinieneś być w stanie przeglądać instalację w swoim http://localhost:8080, jeśli nie masz wcześniej nic innego uruchomionego na tym porcie (możesz określić inny port, przekazując opcję --httpPort=ANOTHER_HTTP_PORT do powyższego polecenia) i wszystko poszło dobrze w "instalacji" proces.

Jeśli przejdziesz do katalogu dostępnych wtyczek (http://localhost:8080/pluginManager/available), znajdziesz wtyczki do obsługi wyżej wymienionych zadań(obsługa subversion jest domyślnie zainstalowana).

Jeśli to cię podnieci, powinieneś zainstalować serwer aplikacji java, taki jak tomcat lub jetty. instrukcje instalacji są dostępne dla wszystkich głównych serwerów aplikacji

Aktualizacja: Kohsuke Kawaguchi skonstruował windows service installer for hudson

[[32]}Tworzenie projektu w hudson W tym samym czasie, w wyniku połączenia z Internetem, w wyniku połączenia z Internetem, dochodzi do połączenia z Internetem.]}
  1. Wybierz new Job (http://localhost:8080/view/All/newJob) z menu po lewej stronie
  2. podaj nazwę Pracy i zaznacz Build a free-style software project na liście
  3. naciśnięcie 'ok' przeniesie Cię do strony konfiguracji zadania. Wszystkie opcje mają mały znak zapytania poza nimi. Naciśnięcie tego spowoduje wywołanie pomocy tekst dotyczący opcji.
  4. w grupie opcji 'zarządzanie kodem źródłowym' używasz Subversion. Hudson akceptuje zarówno dostęp do adresu url, jak i dostęp do modułu lokalnego]}
  5. w grupie opcji 'Build Triggers' można użyć 'Poll SCM'. Składnia użyta tutaj jest składnią crona, więc przepytywanie repozytorium subversion co 5 minut byłoby */5 * * * *
  6. proces budowania projektu jest określony w grupie opcji 'Build'. Jeśli masz już plik Ant build mając wszystkie potrzebne cele, masz szczęście. Wystarczy wybrać 'Invoke ant' i wpisać nazwę celu. Grupa opcji obsługuje również polecenia Mavena i powłoki, ale dostępna jest również wtyczka do phing.
  7. zaznacz dodatkowe akcje build w "post Build Actions", takie jak powiadomienia e-mail lub Archiwizacja artefaktów build.

Do konfigurowania procesów, dla których nie ma wtyczek, można je wywołać bezpośrednio przez skrypt powłoki z poziomu konfiguracji kompilacji, lub możesz napisać własny plugin

Pułapki:

    Jeśli masz to produkować artefakty, pamiętaj, aby hudson sprzątał po sobie w regularnych odstępach czasu.
  • jeśli masz skonfigurowanych więcej niż 20 projektów, rozważ Nie wyświetlanie ich statusu kompilacji jako domyślnej strony głównej na hudson
Powodzenia!
 76
Author: Steen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-08 10:31:42

Szukanym terminem jest " ciągła integracja."

Oto przykład kogoś, kto używa GIT + phpundercontrol: http://maff.ailoo.net/2009/09/continuous-integration-phpundercontrol-git/

CruiseControl (który jest serwerem CI), może używać hostowanego SVN / GIT jako źródła. Więc możesz go nawet użyć z GitHub lub łodygi fasoli lub czymś innym.

Następnie można to zintegrować z następującym rodzajem oprogramowanie:

  • PHPUnit
  • PHP-codesniffer
  • phpdocumentor
  • PHP Gcov
  • PHPXref
  • Yasca
  • itd.

Możesz też spróbować tego hostowanego CI: http://www.php-ci.net/hosting/create-project

Należy jednak pamiętać, że te narzędzia wymagają niestandardowego wsparcia, jeśli zintegrować je samodzielnie.

Czy myślałeś również o zarządzaniu projektami i łatkami?

Możesz użyć Redmine dla zarządzanie projektami. Posiada zintegrowane wsparcie ciągłej integracji, ale tylko po stronie klienta (nie jako serwer CI).

Spróbuj użyć hostowanego SVN/GIT / etc. rozwiązanie, ponieważ będą one obejmować kopie zapasowe i utrzymać swoje serwery działa, dzięki czemu można skupić się na rozwoju.

Aby dowiedzieć się, jak skonfigurować Hudson, zobacz: http://toptopic.wordpress.com/2009/02/26/php-and-hudson/

 22
Author: Michiel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-01 02:47:03

Używam serwera continous integration firmy Atlassian Bamboo dla mojego głównego projektu PHP (wraz z innymi produktami firmy Atlassian, takimi jak fisheye (przeglądanie repozytoriów), jira (issue tracker) i clover (pokrycie kodu)).

Obsługuje SVN, a teraz obsługuje Git i ma świetny interfejs użytkownika. Jest dostępny dla Systemów linux, windows i mac i może działać samodzielnie na własnym serwerze tomcat, co jest Świetne dla osób (takich jak ja), które nie lubią zajmować kilku dni ich narzędzia). Chociaż może to wyglądać drogo, sam będąc samotnym programistą kupiłem licencję starter kit za 10$ (10$ za oprogramowanie). To jest Świetne dla małych zespołów i warto spojrzeć.

 6
Author: Steven Rosato,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-05 00:24:27

PHPTesting PHPCI jest to ładny, ciągły serwer integracji zbudowany w php.

Plus, jego wolne i otwarte źródło. :)

Posiada ilość wtyczek..

PHPCI zawiera wtyczki integracyjne dla:

  • Atoum
  • Behat
  • ognisko
  • Codeception
  • kompozytor
  • E-Mail
  • Grunt
  • IRC
  • PHP
  • Lint
  • MySQL
  • PDepend
  • PostgreSQL
  • PHP Code Sniffer
  • PHP Copy/Paste Detector
  • PHP Spec
  • Jednostka PHP
  • Polecenia Powłoki
  • Tar / Zip
 5
Author: MarmiK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-14 09:58:28

Jestem głównie adminem sys, ale czasami koduję również PHP. Jako projekt poboczny stworzyłem kilka skryptów, które sprawią, że proste i bezbolesne będzie skonfigurowanie pełnego środowiska PHP CI przy użyciu Jenkinsa. Uruchamia również przykładowy projekt, dzięki czemu możesz zobaczyć, jak skonfigurowany jest każdy krok budowania.

Jeśli chcesz wypróbować wszystko, czego potrzebujesz to pudełko Debian/Ubuntu i powłoka dostęp.

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

Update to add some content to my answer:

Możesz po prostu skonfigurować CI Jenkins dla PHP za pomocą Ansible. Od wersji 1.4 obsługuje role, które można pobrać z ich galaxy.ansibleworks.com strona społeczności i zrobi za Ciebie ciężkie podnoszenie. Nazywa się jenkins-php .

 3
Author: Stephan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-26 10:43:32

Sugerowałbym użycie Jenkins http://jenkins-ci.org / jest darmowy i open source.

Jest dość prosty w konfiguracji, Działa na wielu platformach i dobrze integruje się z innymi narzędziami do ciągłej integracji, takimi jak SonarQube (+ SQUALE) do pomiaru zadłużenia technicznego i Thucydides do automatyzacji testów.

Sugerowałbym użycie GIT lub Git Hub do kontroli wersji zamiast SVN. Z mojego punktu widzenia jest to po prostu lepszy system kontroli wersji, który będzie pomóż później skalować swoje wysiłki rozwojowe.

Ponieważ pracujesz głównie z projektem PHP, możesz użyć innych narzędzi.

PHPUnit-do testów jednostkowych

PHP CodeSniffer-Sprawdź standardy kodowania

PHP Depend-pokazuje zależności kodu PHP

XDEBUG-do testowania wydajności

Wszystkie te narzędzia i być uruchamiane za pomocą zadania Jenkins i pomaga w jakości i wydajności kodu.

Powodzenia i miłej zabawy!

 3
Author: AgileDeveloper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-06 20:11:21

Nie używam wielu produktów, a nawet rodzajów produktów, których używasz, ale dam ci moje doświadczenie.

Uruchamiam środowisko testowe w trybie parrallel z moim środowiskiem PROD. Nie mam lokalnych testów per se. Jeśli jest zbyt trudno dostać się do prawdziwego środowiska testowego, to naprawiam mój proces budowania. Nie widzę sensu w testowaniu lokalnie, ponieważ środowiska są różne. Aktualizacja: jedyną rzeczą, którą robię lokalnie, jest uruchomienie "php-l" Przed przesłaniem czegokolwiek. Zatrzymuje głupoty błędy.

Proces budowania działa z tym, co znajduje się w bieżącej przestrzeni roboczej, która zawiera niezatwierdzony kod. To nie jest filiżanka herbaty dla wszystkich, ale będę testować bardzo często. Wszystko zostaje popełnione przed pójściem do PROD.

Część mojego procesu budowania (podobnie jak Twój) tworzy dwa pliki META. Jeden zawiera ostatnie (zazwyczaj) 100 zmian, a także daje mi aktualny numer listy zmian. Pokazuje mi, jakie zmiany są zainstalowane. Drugi zawiera KLIENTSPEC (w Perforce terms), który pokazuje mi dokładnie, jakie gałęzie zostały użyte w tej kompilacji. Razem dają mi powtarzalne budowle.

Nie buduję bezpośrednio do środowiska docelowego, ale do miejsca postoju na serwerze. Używam SSH więc to ma sens. To daje mi kilka zalet. Co najważniejsze, unika umierania w połowie drogi przez duży upload. Daje mi to również miejsce do przechowywania plików META, a wszystkie pliki kompilacji są automatycznie archiwizowane (więc mogę od razu wrócić do dowolnej kompilacji). Na skrypt rejestruje również aktualizację (więc jest wpis w strumieniu dziennika i widzę pre-i post -) i uruchamia wszystkie demony(używam daemontools tak "svc-t"). Wszystko to jest lepsze na maszynie docelowej.

Innym problemem są zmiany DB. Zachowuję skrypt główny schematu DB, który aktualizuję za każdym razem, gdy zmienia się schemat. Każda ze zmian również przechodzi w zmiany.skrypt sql, który jest przesyłany wraz z kompilacją do obszaru przejściowego. Skrypt jest uruchamiany w ramach instalacji scenariusz.

 3
Author: Phil Wallach,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-07 14:37:11

Niedawno rozpocząłem ten sam proces i używam Beanstalk do hostingu svn.

Na płatnych kontach są dwie fajne funkcje (chyba od 15$):

    [7]}deployment pozwala użytkownikowi tworzyć cele ftp dla serwerów stagingowych i produkcyjnych, które można wdrożyć po kliknięciu przycisku (inc określając rewizję i gałąź)
  • webhooki pozwalają użytkownikowi skonfigurować adres url, który jest wywoływany przy każdym zatwierdzeniu/wdrożeniu, przechodząc przez takie rzeczy jak numer wersji, opis i użytkownik. Może to być wykorzystane do aktualizacji dokumentów, uruchamiania testów jednostkowych i aktualizacji changelogów.

Jestem pewien, że istnieją inne hostowane lub samo hostujące się serwery svn z tymi dwoma funkcjami, ale fasola jest tą, z którą mam doświadczenie i działa bardzo, bardzo dobrze

Istnieje również API, które można by wykorzystać do dalszej integracji wdrożenia z Twoim procesem.

 2
Author: Adam Hopkinson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-02 13:37:35

Rozważ fazend.com , darmowa hostowana Platforma CI, która automatyzuje procedury konfiguracji i instalacji. Nie musisz konfigurować kontroli wersji, śledzenia błędów, serwera CI, środowiska testowego itp. Wszystko odbywa się na żądanie.

 2
Author: yegor256,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-24 14:55:27