Užtikrinti git kodo standartų laikymąsi prieš įsipareigojant

Na, čia yra scenarijus: plėtros komanda nori, kad visas naujas kodas atitiktų tam tikrus kodavimo standartus, ir visi vienetų testai praeina prieš įsipareigojant. Čia yra gudrybė, visi bandymai turi būti atliekami naudojant specialią bandymo mašiną ir neturime prieigos prie „git“ serverio modifikavimo, todėl tai turi būti daroma naudojant vietinį prisiėmimo fiksatorių kiekviename „dev“ įrenginyje.

Nors specifikacijos yra gana griežtos (pvz., Nenorime pereiti prie >

  • Mes naudojame git ir * nix.
  • Atnaujintas kodas turi būti siunčiamas į kitą serverį, kad būtų paleistas bandymų rinkinys.
  • Turite nurodyti pakeistų failų sąrašą, kad įsitikintumėte, jog jie atitinka kodavimo standartą.
  • Jo kodo bazė yra gana didelė, todėl turime siųsti mažiausiai informacijos, reikalingos užtikrinti vienodas kodo kopijas.
  • Jei testai nėra išduodami, pranešimas turėtų būti rodomas su klaida ir įsipareigojimas turėtų būti užblokuotas.
  • Tarkime, mes pasitikime mūsų vystymo komanda, ir viskas yra tvarkinga, kad testus būtų galima apeiti naudojant --no-verify .

Klausimas: koks yra geriausias būdas gauti bandomąjį serverį, kad būtų galima sinchronizuoti su vietine aplinka bandymams atlikti? Bet koks maišos maišelis, atitinkantis naujojo įsipareigojimo git pleistrą? Praleiskite git apskritai ir tiesiog atlikite rsync? Viskas dar nieko?

Atnaujinta 8/7/13:nušovėu save pėsčiomis, net paminėdamas nuotolinį atpirkimą. Faktas yra tai, kad negalite užblokuoti kodo, kuris bus nukreiptas į bendrą / nuotolinį atpirkimą, siekiant užkirsti kelią vietiniam įsipareigojimui. Nepriklausomai nuo to, ar tai laikoma geriausia praktika, taip nėra, nes tai būdinga mažai kūrėjų grupei, kuriai reikia šios tikslios funkcijos. Kyla klausimas, kaip geriausiai pasiekti tikslą.

11
31 июля '13 в 20:01 2013-07-31 20:01 Jake A. Smith paklausė liepos 31 d. 13 val. 2013-01-31 20:01
@ 6 atsakymai

Pridėti priskirtą git komandą, kuri:

  • Laikinai įsipareigokite
  • Išjunkite jį į nuotolinį serverį
  • Vykdyti bandymus (naudojant CI serverį, post-receive iškėlimą arba ssh )
  • Jei bandymai nepavyksta, grąžinama

Sukurkite vykdomąjį failą, pavadintą „ git-test-n-commit ir įdėkite jį į savo kelią:

 #!/bin/bash echo "Committing results..." git commit "$@" echo "Pushing to remote testing server..." git push remote-server-git-url remote-branch -f echo "Running tests" ssh remote-server 'cd my_repo; run-my-tests' || (echo "Tests failed, undoing commit"  git reset HEAD^) 

Tada vietoj to, kad paskambintumėte „ git commit ARGS kūrėjai gali skambinti „ git test-n-commit ARGS . Jei bandymai praeina, kodas išliks fiksuotas. Jei bandymai nepavyksta, tai bus tarsi niekada nebuvo padaryta.

1
13 сент. Atsakymas duotas onionjake 13 sep . 2013-09-13 09:31 '13, 09:31 am 2013-09-13 09:31

Vietiniai įsipareigojimai yra tikrai ne tie, kuriuos norite čia.

Jūsų reikalavimas, kad „mes neturime prieigos prie„ git “serverio pakeitimo, todėl tai turėtų būti padaryta naudojant vietinį įsipareigojimą kiekvienam kūrimo įrenginiui“ yra visiškai fiktyvus. Visada galite sukurti kitą saugyklą, kuri yra jūsų „bandomojo nuotolinio valdymo pultas“, su kuriuo jūs turite visišką valdymą (kuris bus sinchronizuojamas su „git“ serveriu, kuriam jūs neturite jokios kontrolės).

Sukūrę šią bandomąją konsolę, galite pridėti kabliukus, kad atliktumėte bandymus su bet kuriuo spauda. Pastangos, kad bandymo rezultatai būtų gauti, yra labai nedideli.

Nuolatinė integracija su „Git“

Taip pat patikrinkite Jenkins, gitlab ir kt.


Atnaujinimas po 13/7/13:

Taigi, jūs tikrai norite paleisti kai kuriuos „testus“ nuotoliniame serveryje, kad išvengtumėte įsipareigojimų. Jei norite užkirsti kelią įsipareigojimo turinio naudojimui, naudokite iš pre-commit kablelį. Pažvelkite į šį klausimą, kaip gauti pakeistų failų sąrašą. Kai turėsite šiuos modifikuotus failus, galite siųsti juos į nuotolinį serverį naudojant scp arba rsync ir paleisti bandymo komandą naudodami ssh .

Jei reikia patikrinti įvykio pranešimą, naudokite „hook commit-msg kablys.

Čia yra gera perėmimo pamoka: http://git-scm.com/book/en/Customizing-Git-Git-Hooks

Jame taip pat paminėtos kelios priežastys, kodėl tai gali būti bloga idėja.

Jie dažnai naudojami tam tikroms politikos kryptims įgyvendinti, tačiau svarbu pažymėti, kad šie scenarijai neperduodami klonavimo metu. Jūs galite vykdyti serverio pusės politiką, kad atmestumėte įvykdymo sroves, kurios neatitinka jokios politikos, bet yra visiškai priklausomos nuo kūrėjo naudoti šiuos kliento pusės scenarijus. Taigi, tai yra scenarijai, padedantys kūrėjams, jie turi būti pritaikyti ir palaikomi, nors bet kuriuo metu juos gali iš naujo apibrėžti ar modifikuoti.

12
03 авг. atsakymas pateikiamas onionjake 03 rug . 2013-08-03 08:17 '13, 08:17 am 2013-08-03 08:17

Trumpas atsakymas:

NEGALIMA


Ilgas atsakymas:

Man neįmanoma padaryti neįvykdymo dėl kai kurių keistų vietinių perėmimų: jums reikia atskirti fiksavimo (t. Y. Pakeitimų išsaugojimo) priėmimą nuo šio įsipareigojimo paskelbimo.

Nors git serveryje yra tikslinga turėti iš pre-receive kabelį, kurį paminėtumėte, kad taiko jūsų taisykles, tai būtų dramatiška jūsų kūrėjų saugykloms: kada jie nori išsaugoti savo darbą, pabandykite ką nors naujo ar kažko naujo tada jie turi iš pradžių poliruoti savo kodą, kol jie gali įsipareigoti.

Tai būtų priešinga: žmonės vėl jaustųsi blogais senais laikais, kai jie turėjo kažką daryti su repo, ir visi galėjo pamatyti savo klaidas, blogą kodavimo stilių ir pan. Jūs prarasite laisvę, kurią DVCS suteikia: pigus šakos, vietinė istorija, centrinio repo už gamybos kodą išsaugojimas.

Nieko nedarykite, kai atliekate vietos įsipareigojimus.

11
06 авг. eckes atsakymas 06 rug 2013-08-06 17:44 '13, 17:44, 2013-08-06 17:44

Manau, kad geriausias požiūris, kurį mačiau, yra git + gerrit + jenkins. Gerritas pateikia pakeitimų rinkinio koncepciją. „Jenkins gerrit“ įskiepis gali sukurti kiekvieną paskelbtą pakeitimų rinkinį (paleisti bet kokį norimą testą) ir pažymėti jį kaip „patikrintą“, o tada patikrintą pakeitimų rinkinį galima sujungti į pagrindinį filialą. Jei pakeitimų kūrimas neveikia, užsakovas gauna el. Pašto pranešimą, tada jis gali pakeisti įsipareigojimą ir atnaujinti pakeitimų rinkinį.

3
08 авг. atsakymas duotas kan 08 rug. 2013-08-08 23:30 '13, 23:30, 2013-08-08 23:30

Nustatę tarpinį serverį, kaip siūlo kiti, nustatykite pre-receive paleisti scenarijų įeinančiam įvykiui ir normalizuokite jį pagal kodavimo standartus. Dažnai kodavimo standartai nustatomi pagal taisykles, kurios suteikia kompiuterį. Nedarykite savo kūrėjų, kad jie suprastų tuščią erdvę ir nesudarykite paprasto „bash“ scenarijaus ar panašaus į juos. Ir jei turite scenarijų, kad tai atliktumėte, kodėl kūrėjas turėtų jį paleisti rankiniu būdu, kai jis gali būti automatiškai paleidžiamas į kiekvieną tarpinį repo.

1
06 авг. Nicholas Shanks atsakymas rugpjūčio 06 d 2013-08-06 19:00 '13 19:00 val. 2013-08-06 19:00

Parašykite „Makefile“ failą, kuris:

  • Kopijuoja dabartinius failus į bandomąjį serverį.

  • Randa vieneto testų rezultatus.

2.1. Jei nėra anomalijų, paleiskite „git saistību“

2.2 Jei yra anomalijų, išklausykite klaidą.

Naudojant „Make files“ (rinkti failus), norėdami atlikti kompiliavimus ir įsipareigojimus, yra dieviškasis dalykas. Prieš priimdamas, galiu automatizuoti sudėtingą formatavimą ir failų valymą.

Redaguoti:

Žinoma, „Makefile“ nėra vienintelis dalykas, kurį galite padaryti. Ant / Bash / kitos skriptų kalbos gali tai padaryti už jus.

0
08 авг. Atsakyti SWPhantom rugpjūčio 08 d 2013-08-08 23:37 '13, 23:37 2013-08-08 23:37

Kiti klausimai apie „ etiketes arba užduoti klausimą