Vă mulțumim pentru susținere

Care este fluxul dvs. de lucru pentru implementarea aplicațiilor web cu SVN?

În prezent, folosim o configurație oarecum complicată de implementare care implică un server SVN la distanță, 3 sucursale SVN pentru DEV, STAGE și PROD, promovând codul între ele prin intermediul patch-urilor etc. Mă întreb ce folosiți pentru implementare într-o situație mică ?

0
adăugat editat
Vizualizări: 1

11 răspunsuri

O ramură de trunchi simplu conține codul cel mai curent, apoi tăiați o ramură ori de câte ori mergem în direct. Acest lucru pare să funcționeze destul de eficient. Puteți merge cu ușurință la ramura anterioară ori de câte ori ramura curentă pe care ați tăiat-o pentru sistemul live nu reușește. De asemenea, este ușor să remediați bug-uri pe ramura care este în prezent live și, din moment ce ramura moare efectiv atunci când tăiați unul nou, există doar o singură ramură pe care trebuie să o lucrați (și apoi să fuzionați reparații de acolo de la sucursală live).

0
adăugat

Folosim ramificația de eliberare - acest lucru pare să fie mai eficient pentru noi decât caracteristica ramificării pe care o făceam.

Nu creați ramuri diferite pentru diferitele medii.

0
adăugat

Când am lucrat într-o mică echipă dev (cu semnificație mică, un alt programator și șeful), a fost destul de dezordinea haotică. Cu toate acestea, am constatat că atribuirea unui tip de tip "gatekeeper" a funcționat pentru noi.

Gatekeeperul a fost cel care a lucrat cel mai mult la aplicație (în acest caz, am avut 2 proiecte dezvoltate de la sol, avea 4).

Practic, ori de câte ori trebuia să lucreze la proiectele mele, mi-ar fi anunțat că lucrează, că ar fi sigur că magazia era actualizată și construibilă, atunci ar fi tras în jos, ar face schimbări, . El mi-ar informa că a fost făcut, aș trage în jos, construi și desfășura. Dacă au existat modificări DB am avut un dosar de modificări DB cu toate scripturile care ar corecta DB.

În mod evident, au avut multe găuri în ea, dar procesul a lucrat pentru noi și ne-a împiedicat să construim una peste alta.

0
adăugat

Trei ramuri sună doar ca o muncă suplimentară.

Environmental differences can be handled by having different versions of the relevant files in the trunk. i.e. database.yml & database.yml.prod. The deployment process should be environmentally aware and simply copy the per-environment files over the default ones.

0
adăugat

Lucrez cu o situație similară cu cea pe care o aveți în prezent. Am fost însărcinată să găsesc o "mai bună"? soluție și a fugit ceva de-a lungul liniilor următoare.

Ramura live reprezintă serverele în starea lor actuală.

Orice activitate de dezvoltare ar trebui să se facă într-o ramură care este luată din viață. Aceasta ar putea fi o lucrare de o jumătate de oră pentru o persoană sau un proiect de echipă multi ani. De câte ori se plănuiește schimbarea de a trăi, acestea pot fi îmbinate în aceste ramuri de dezvoltare.

Înainte ca o piesă de lucru să devină live, modificările de la live se reunesc din nou și se etichetează ca o versiune potențială. Această versiune este testată pe mediul de așteptare și, dacă trece testul, noul live este luat din etichetă.

Este posibil să fuzionăm mai multe lucrări într-o singură versiune, dacă aceasta funcționează mai bine.

Acest lucru înseamnă că este destul de simplu să țineți ramurile de dezvoltare la zi cu live și dacă o piesă de lucru în dezvoltare este abandonată există un minim de ștergere de a face.

Pentru a trece de la lucrul la un proiect la altul, un dezvoltator poate pur și simplu să-și schimbe mediul de lucru local într-o altă ramură.

Una dintre problemele pe care le-am avut cu sistemul pe care îl descrieți este că DEV poate să iasă de la distanță cu PROD destul de repede, deci nu vă dezvoltați împotriva jocului viu și nu este ușor să identificați dependențele încrucișate până la etapă. Soluția de mai sus rezolvă aceste probleme, rămânând totuși destul de ușoară.

0
adăugat

Lucrez personal la nivel local (dezvoltare), adăugând / fixând caracteristici și când cred că este gata, mă angajez la trunchi (producție). Pe serverul de producție fac doar o actualizare SVN.

0
adăugat

Nu folosim sucursale pentru a pune în scenă lucruri legate de web; doar pentru a testa lucruri experimentale care vor dura mult timp (citiți: mai mult de o zi) pentru a fuziona înapoi în portbagaj. Trunchiul, în stil de "integrare continuă", reprezintă o stare de lucru (sperăm), actuală.

Astfel, cele mai multe schimbări se angajează direct la portbagaj. Un server CruiseControl.NET se va actualiza automat pe o mașină care rulează de asemenea IIS și are copiile actualizate ale tuturor resurselor disponibile ale site-ului, astfel încât site-ul să poată fi testat complet și curat. După testare, fișierele sunt încărcate pe serverul public.

Nu aș spune că este abordarea perfectă, dar este simplă (și astfel potrivită pentru personalul nostru relativ mic) și relativ sigură și funcționează foarte bine.

0
adăugat

trunchi pentru dezvoltare, și o ramură (producție) pentru producția.

Pe mașina mea locală, am un VirtualHost care indică ramura trunchiului, pentru a-mi testa modificările.

Orice comitere la portbagaj declanșează un cârlig de comitere care face un export svn și sincronizarea cu adresa URL a serverului online - deci dacă site-ul este stackoverflow.com atunci acest cârlig actualizează automat dev.stackoverflow.com

Apoi folosesc svnmerge pentru a îmbina patch-urile selectate de la portbagaj la producție în casa mea de checkouts. Am un VirtualHost din nou pe mașina mea locală, îndreptându-mă spre ramura de producție.

Când am comite modificările fuzionate în ramura de producție, din nou un cârlig de export SVN actualizează exportul de producție (live) și site-ul este live!

0
adăugat
Îmi place asta, dar cum păstrezi actualizările bazei de date în conformitate cu această metodă?
adăugat autor cgreeno
codul site-ului web gestionează actualizările pentru baza de date de la o adresă URL de administrare și există un număr de versiune al bazei de date pentru a afla când să faceți upgrade.
adăugat autor Thomas Vander Stichele

Trunchiul conține codul curent de dezvoltare "primar".

Un dezvoltator va crea adesea o sucursală individuală pentru orice proiect pe termen mediu și lung, care ar putea bloca codul de bază al portbagajului și ar putea fi în calea celorlalți distribuitori. Când va fi complet, va merge înapoi în portbagaj.

Creăm o lansare cu etichete de fiecare dată când introducem codul în producție. Dosarul din / tags este pur și simplu numărul versiunii.

Pentru a implementa la producție, facem un SVN Export to Staging. Când este satisfăcător, folosim un simplu rsync pentru a ajunge la grupurile de producție.

0
adăugat

Nu am avut probleme cu etichetele / sucursalele / organizațiile comune.

Dezvoltarea generală continuă are loc în portbagaj.

Menținerea unei eliberări în producție are loc în ramura de eliberare corespunzătoare.

Modificările aduse ramurii care sunt încă relevante pentru portbagaj sunt îmbinate.

When a new version is ready for deployment it is tagged from trunk, then a branch is created from that tag. The new release branch is checked out to the server, parallel to the current release. When it's time to switch, the paths are juggled ("mv appdir appdir.old && mv appdir.new appdir").

Dezvoltatorii care susțin versiunea de producție, apoi își schimbă copia de lucru în noua ramură sau fac o verificare nouă.

0
adăugat

Vă recomandăm foarte mult cartea (în prezent, în reduceri dure) Livrare continuă , care descrie un proces complet de gestionare a software-ului livrare, bazată pe principii de integrare continuă (printre altele).

Nu îmi place foarte mult abordarea filialei și a fuzionării, deoarece poate deveni foarte dezordonată și este destul de risipă de vreme ce veți petrece timpul petrecut pe activități care nu oferă deloc o valoare nouă. Ați dezvoltat deja, ați testat și ați corectat codul o dată, de ce să creați o situație (copierea codului într-o altă ramură), ceea ce necesită reluarea acestei lucrări?

Oricum, modul de evitare a ramificării și a fuzionării este de a construi artefactele dvs. deplasabile din portbagaj și de a promova artefactele construite (mai degrabă decât sursa) pe măsură ce trece testul, stadializarea etc. Astfel sunteți 100% sigur că lucrul pe care îl punerea în producție este același lucru pe care l-ați testat.

Dacă aveți caracteristici diferite care ar putea fi necesare pentru a fi lansate pe diferite programe, schimbarea abordării dvs. cu privire la modul în care implementați (funcționalitate configurabilă sau mai bună dar modulară) vă poate ajuta să păstrați un singur trunchi de dezvoltare.

0
adăugat
Cartea este afară acum și pare bine din ceea ce am citit.
adăugat autor Andrew Swan