Jestem samotnym programistą przez większość czasu, pracując nad wieloma dużymi projektami, głównie opartymi na PHP. Chcę profesjonalizować i automatyzować sposób obsługi 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 zasadniczych zmian.
To, co teraz robię, to mam lokalne środowisko testowe dla każdego projektu; Używam SVN do każdego projektu; zmiany są testowane lokalnie, a następnie przenoszone do wersji online, zwykle przez FTP. Dokumentacja API jest generowana ręcznie z kodu źródłowego; Testy jednostkowe to coś, w co powoli się pakuję i nie jest to jeszcze część mojej codziennej rutyny.
„Cykl kompilacji”, który przewiduję, wykonałby następujące czynności:
Zestaw zmian zostaje sprawdzony w SVN po przetestowaniu lokalnym.
Zaczynam proces kompilacji. Wersja SVN HEAD zostaje sprawdzona, w razie potrzeby zmodyfikowana i przygotowana do przesłania.
Dokumentacja API jest generowana automatycznie - jeśli nie skonfigurowałem jej jeszcze szczegółowo, używając domyślnego szablonu, skanuję całą bazę kodu.
Nowa wersja jest wdrażana w zdalnej lokalizacji za pośrednictwem FTP (w tym zmiana nazwy katalogu, chmodding, importowanie baz danych i tym podobne). To jest coś, co już bardzo lubię phingować , ale jestem otwarty na alternatywy.
Przeprowadzane są testy jednostkowe rezydujące w predefiniowanej lokalizacji. Jestem informowany o ich niepowodzeniu lub sukcesie za pomocą wiadomości e-mail, RSS lub (najlepiej) HTML, które mogę pobrać i umieścić na stronie internetowej.
(opcjonalnie) plik tekstowy „changelog” użytkownika końcowego we wstępnie zdefiniowanej lokalizacji jest aktualizowany o wstępnie zdefiniowaną część komunikatu zatwierdzenia („Można teraz filtrować jednocześnie zarówno„ foo ”, jak i„ bar ” czas) Ten komunikat niekoniecznie jest identyczny z komunikatem zatwierdzenia SVN, który prawdopodobnie zawiera znacznie więcej informacji wewnętrznych.
Rzeczy takie jak metryki kodu, sprawdzanie stylu kodu itp. Nie są teraz moim głównym celem, ale na dłuższą metę z pewnością będą. Rozwiązania, które wprowadzają to po wyjęciu z pudełka, są bardzo uprzejmie rozpatrywane.
Szukam
Informacje zwrotne i doświadczenia od osób, które są lub były w podobnej sytuacji i pomyślnie wprowadziły rozwiązanie tego problemu
Szczególnie dobre samouczki krok po kroku i instrukcje, jak to skonfigurować
Rozwiązania zapewniające jak największą automatyzację , na przykład poprzez tworzenie szkieletowego API, przypadków testowych i tak dalej dla każdego nowego projektu.
i również
- Zalecenia produktu . To, co do tej pory wiem, to phing / ant dla kompilacji oraz phpUnderControl lub Hudson dla części raportującej. Lubię je wszystkie, o ile widzę, ale oczywiście nie mam z nimi szczegółowego doświadczenia.
Jestem zalany pracą, więc mam silną skłonność do prostych rozwiązań. Z drugiej strony, jeśli brakuje jakiejś funkcji, będę płakać z powodu jej zbytniej ograniczenia. :) Rozwiązania typu „wskaż i kliknij” są również mile widziane. Jestem również do rekomendacji produktów komercyjnych, które mogą współpracować z projektami PHP.
Moja konfiguracja
Pracuję lokalnie w systemie Windows (a dokładniej 7) i większość projektów klienckich jest uruchamiana na stosie LAMP, często na hostingu współdzielonym (= brak zdalnego SSH). Szukam rozwiązań, które mogę uruchomić we własnym środowisku. Jestem gotowy do skonfigurowania maszyny wirtualnej z systemem Linux do tego celu, 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 Przyjmuję odpowiedź, która według mnie da mi największy przebieg. Jest tu wiele doskonałych informacji, chciałbym zaakceptować więcej niż jedną odpowiedź. Dziękuję wszystkim!
Termin, którego szukasz, to „ciągła integracja”.
Oto przykład osoby korzystającej z GIT + phpundercontrol: http://maff.ailoo.net/2009/09/continuous-integration-phpundercontrol-git/
CruiseControl (który jest serwerem CI), może używać Hosted SVN / GIT jako źródła. Możesz więc używać go nawet z GitHub, Beanstalk lub czymś innym.
Następnie możesz zintegrować to z następującym oprogramowaniem:
Możesz również spróbować tego hostowanego CI: http://www.php-ci.net/hosting/create-project
Pamiętaj jednak, że narzędzia te wymagają niestandardowego wsparcia, jeśli sam je zintegrujesz.
Czy myślałeś również o zarządzaniu projektami i zarządzaniu łatkami?
Możesz użyć Redmine do zarządzania projektami. Ma zintegrowaną obsługę 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 utrzymywać serwery w ruchu, dzięki czemu można skupić się na programowaniu.
Samouczek dotyczący konfiguracji Hudsona znajduje się na stronie: http://toptopic.wordpress.com/2009/02/26/php-and-hudson/
źródło
Korzystam z serwera ciągłej integracji Bamboo Atlassian do mojego głównego projektu PHP (wraz z ich innymi produktami, takimi jak rybie oko (przeglądanie repozytoriów), jira (tracker problemów) i koniczyna (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ć autonomicznie na własnym serwerze tomcat, co jest idealne dla osób (takich jak ja), które nie lubią poświęcać dni na konfigurowanie swoich narzędzi). Chociaż może się to wydawać drogie, będąc samodzielnym programistą, kupiłem licencję zestawu startowego za 10 USD (10 USD według oprogramowania). Jest to idealne rozwiązanie dla małych zespołów i warto je zobaczyć.
źródło
PHPTesting PHPCI Jest to miły, ciągły serwer integracyjny zbudowany w php.
Plus, to darmowe i otwarte oprogramowanie. :)
ma liczbę wtyczek ..
PHPCI zawiera wtyczki integracyjne dla:
źródło
Jestem głównie administratorem systemu, ale czasami również koduję PHP. W ramach pobocznego projektu stworzyłem kilka skryptów, które ułatwią i bezboleśnie skonfigurują pełne środowisko PHP CI za pomocą Jenkinsa. Uruchamia również przykładowy projekt, dzięki czemu można zobaczyć, jak skonfigurowany jest każdy krok kompilacji.
Jeśli chcesz to wypróbować, wszystko czego potrzebujesz to Debian / Ubuntu i dostęp do powłoki.
http://yauh.de/articles/379/setting-up-a-ci-environment-for-php-projects-using-jenkins-ci
Aktualizacja Aby dodać trochę treści do mojej odpowiedzi:
Możesz po prostu skonfigurować Jenkins CI dla PHP za pomocą Ansible. Od wersji 1.4 obsługuje role, które można pobrać z ich strony społecznościowej galaxy.ansibleworks.com i wykona za Ciebie ciężkie prace. Nazywa się jenkins-php .
źródło
Sugerowałbym użycie Jenkins http://jenkins-ci.org/ jest bezpłatny i jest open source.
Jest dość prosty w konfiguracji, działa na wielu platformach i dobrze integruje się z innymi narzędziami ciągłej integracji, takimi jak SonarQube (+ SQUALE) do pomiaru zadłużenia technicznego i Thucydides do testowania automatyzacji.
Zdecydowanie sugeruję 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 pomoże Ci później skalować wysiłki programistyczne.
Ponieważ pracujesz głównie przy projekcie PHP, możesz użyć innych narzędzi.
PHPUnit - Do testowania jednostkowego
PHP CodeSniffer - Sprawdź standardy kodowania
PHP Depend - pokazuje zależności kodu PHP
XDEBUG - do testowania wydajności
Wszystkie te narzędzia są uruchamiane przez zadanie Jenkins i pomagają w jakości i wydajności kodu.
Powodzenia i ciesz się!
źródło
Nie używam wielu produktów, a nawet rodzajów produktów, z których korzystasz, ale dam ci moje doświadczenie.
Pracuję w środowisku TEST równolegle z moim środowiskiem PROD. Nie mam lokalnych testów jako takich. Jeśli zbyt trudno jest dostać się do prawdziwego środowiska TEST, to naprawiam proces kompilacji. Nie widzę sensu w testowaniu lokalnym, ponieważ środowiska są różne. AKTUALIZACJA: Jedyne, co robię lokalnie, to uruchamianie „php -l” przed przesłaniem czegokolwiek. Zatrzymuje głupie błędy.
Proces kompilacji działa z wszystkim, co znajduje się w bieżącym obszarze roboczym, w tym z niezatwierdzonym kodem. To nie jest filiżanka herbaty dla wszystkich, ale często chodzę na TEST. Wszystko zobowiązuje się przed przejściem do PROD.
Część mojego procesu kompilacji (podobnego do twojego) tworzy dwa pliki META. Jedna zawiera ostatnie (zwykle) 100 zmian, a także podaje mi aktualny numer listy zmian. Pokazuje mi, jakie zmiany zostały zainstalowane. Drugi zawiera CLIENTSPEC (w kategoriach Perforce), który pokazuje mi dokładnie, jakie gałęzie zostały użyte w tej kompilacji. Razem dają mi powtarzalne kompilacje.
Nie buduję bezpośrednio do środowiska docelowego, ale do obszaru pomostowego na serwerze. Używam SSH, więc ma to sens. To daje mi kilka zalet. Co najważniejsze, pozwala uniknąć śmierci w połowie dużego przesyłania. Daje mi również miejsce do przechowywania plików META, a wszystkie pliki kompilacji są automatycznie archiwizowane (dzięki czemu mogę wrócić do dowolnej kompilacji). Skrypt rejestruje również aktualizację (więc w strumieniu dziennika znajduje się wpis i widzę pre- i post-) i uruchamia wszystkie demony (używam daemontools, więc „svc -t”). Wszystkim tym lepiej na maszynie docelowej.
Innym problemem są zmiany DB. Prowadzę skrypt główny schematu DB, który aktualizuję przy każdej zmianie schematu. Każda ze zmian przechodzi również do skryptu zmiany.sql, który jest przesyłany wraz z kompilacją do obszaru pomostowego. Skrypt jest uruchamiany jako część skryptu instalacyjnego.
źródło
Mam od niedawna ten sam rodzaj procesu, a używam beanstalk dla svn hosting.
Na płatnych kontach są dwie fajne funkcje (myślę, że zaczynają się od 15 USD):
Jestem pewien, że istnieją inne hostowane lub samoobsługowe serwery SVN z tymi dwiema funkcjami, ale mam doświadczenie z Beanstalk i działa bardzo, bardzo dobrze
Istnieje również interfejs API, który, jak sądzę, mógłby zostać wykorzystany do zintegrowania wdrażania dalej w twoim procesie.
źródło
Rozważ fazend.com , darmową platformę CI hostowaną, 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.
źródło