Iimeko eziqhelekileyo kunye nokuhlanganiswa okuqhubekayo

Ngaba uyifundile imiyalelo yeGit kodwa ufuna ukuba nomfanekiso ngqondweni wendlela udibaniso oluqhubekayo (CI) olusebenza ngayo ngokwenyani? Okanye mhlawumbi ufuna ukwandisa imisebenzi yakho yemihla ngemihla? Le khosi iya kukunika izakhono ezisebenzayo ekudityanisweni okuqhubekayo usebenzisa i-GitHub yokugcina. Le khosi ayenzelwanga ukuba yiwizadi onokuthi ucofe kuyo ngokulula; ngokuchaseneyo, uya kwenza kwa ezo zenzo abantu bazenzayo ngokwenene emsebenzini, ngendlela efanayo abazenza ngayo. Ndiza kuchaza ithiyori njengoko uhamba ngamanyathelo abandakanyekayo.

Senza ntoni?

Njengoko siqhubela phambili, siya kudala ngokuthe ngcembe uluhlu lwamanyathelo aqhelekileyo e-CI, eyona ndlela ilungileyo yokukhumbula olu luhlu. Ngamanye amazwi, siya kudala uluhlu lwezenzo ezithathwa ngabaphuhlisi ngelixa besenza udibaniso oluqhubekayo, besenza indibaniselwano eqhubekayo. Siza kusebenzisa iiseti ezilula zovavanyo ukusondeza inkqubo yethu yeCI kufutshane neyokwenene.

Le GIF ibonisa ngokucwangcisekileyo ukuzibophelela kwindawo yakho yokugcina njengoko uqhubeka nekhosi. Njengoko ubona, akukho nto inzima apha kwaye kuphela eyona nto ifunekayo.

Iimeko eziqhelekileyo kunye nokuhlanganiswa okuqhubekayo

Uya kudlula kwezi meko zilandelayo ze-CI:

  • Sebenza kuphawu;
  • Ukusetyenziswa kovavanyo oluzenzekelayo ukuqinisekisa umgangatho;
  • Ukuphunyezwa komsebenzi ophambili;
  • Ukusombulula ingxabano xa kudityaniswa amasebe (ukudibanisa impixano);
  • Impazamo yenzeka kwindawo yemveliso.

Uza kufunda ntoni?

Uya kuba nakho ukuphendula le mibuzo ilandelayo:

  • Yintoni ukuhlanganiswa okuqhubekayo (CI)?
  • Ziziphi iintlobo zeemvavanyo ezizenzekelayo ezisetyenziswa kwi-CI, kwaye ekuphenduleni zeziphi izenzo ezibangelwayo?
  • Ziziphi izicelo zokutsalwa kwaye zifuneka nini?
  • Yintoni uPhuhliso oluqhutywa kuVavanyo (TDD) kwaye lunxulumana njani neCI?
  • Ngaba kufuneka ndidibanise okanye ndimise utshintsho kwakhona?
  • Buyela emva okanye ulungise kuguqulelo olulandelayo?

Ekuqaleni ndaguqulela izinto ezinjengokuthi "izicelo zokutsala" kuyo yonke indawo, kodwa ngenxa yoko ndagqiba ekubeni ndibuyisele amabinzana ngesiNgesi kwezinye iindawo ukunciphisa iqondo lobuhlanya kwisicatshulwa. Ngamanye amaxesha ndiya kusebenzisa "umdwelisi wenkqubo surzhik" njengesenzi esimangalisayo "ukuzibophelela" apho abantu bayisebenzisa ngokwenene emsebenzini.

Yintoni ukuhlanganiswa okuqhubekayo?

Umanyano oluqhubekayo, okanye i-CI, yinkqubo yobugcisa apho ilungu ngalinye leqela lidibanisa ikhowudi yabo kwindawo yogcino oluqhelekileyo ubuncinane kanye ngosuku, kwaye ikhowudi ephumelayo kufuneka ubuncinane yakhiwe ngaphandle kwamaphutha.

Kukho ukungavisisani malunga neli gama

Inqaku lengxabano kukuphindaphinda kokudibanisa. Abanye bathi ukudibanisa ikhowudi kanye kuphela ngosuku akwanelanga ukudibanisa ngokuqhubekayo. Umzekelo unikwe iqela apho wonke umntu ethatha ikhowudi entsha kusasa kwaye ayidibanise kanye ngokuhlwa. Ngelixa oku kuyinkcaso efanelekileyo, kukholelwa ngokubanzi ukuba inkcazo yosuku-kanye iyasebenza ngokufanelekileyo, icacile, kwaye ifanelekile kumaqela anobukhulu obahlukeneyo.

Enye inkcaso kukuba i-C++ ayiselulo kuphela ulwimi olusetyenziswayo kuphuhliso, kwaye ifuna nje indibano engenaziphene njengendlela yokuqinisekisa ibuthathaka. Ezinye iiseti zovavanyo (umzekelo, iimvavanyo zeyunithi ezenziwa ekuhlaleni) nazo kufuneka zigqitywe ngempumelelo. Okwangoku, uluntu luqhubela phambili ekwenzeni oku kube yimfuneko, kwaye kwixesha elizayo "ukwakha + iimvavanyo zeyunithi" mhlawumbi kuya kuba yinto eqhelekileyo, ukuba ayikabikho.

Umanyano oluqhubekayo zahlukile kwi unikezelo oluqhubekayo (I-Continuous Delivery, CD) kuba ayifuni umviwa okhutshwe emva komjikelo ngamnye wokudibanisa.

Uluhlu lwamanyathelo esiya kuwasebenzisa kwikhosi yonke

  1. Tsala ikhowudi yamva nje. Yenza isebe ukusuka master. Qala ukusebenza.
  2. Yenza izibophelelo kwisebe lakho elitsha. Yakha kwaye uvavanye ekuhlaleni. Ukupasa? Yiya kwinyathelo elilandelayo. Ngaba uyasilela? Lungisa iimpazamo okanye iimvavanyo kwaye uzame kwakhona.
  3. Cofa kwindawo yakho ekude okanye isebe elikude.
  4. Yenza isicelo sokutsala. Xoxa ngotshintsho, yongeza ezinye izibophelelo njengoko ingxoxo iqhubeka. Yenza iimvavanyo ziphumelele kwicandelo lesici.
  5. Dibanisa/buyisela kwakhona izibophelelo ezivela kumphathi. Yenza iimvavanyo ziphumelele kwisiphumo sokudibanisa.
  6. Sebenzisa ukusuka kwisebe elibonakalayo ukuya kwimveliso.
  7. Ukuba yonke into ilungile kwimveliso kangangexesha elithile, dibanisa utshintsho kwinkosi.

Iimeko eziqhelekileyo kunye nokuhlanganiswa okuqhubekayo

️ Ukulungiselela

Qinisekisa ukuba unesoftware efanelekileyo

Ukuthatha le khosi uya kuyidinga Node.js ΠΈ Umxhasi weGit.

Ungasebenzisa nawuphi na umxhasi weGit, kodwa ndiza kubonelela ngemiyalelo yomgca womyalelo kuphela.

Qinisekisa ukuba unomxhasi weGit ofakelweyo oxhasa umgca womyalelo

Ukuba awukabinaye umxhasi weGit oxhasa umgca womyalelo, unokufumana imiyalelo yokufakela apha.

Lungisa indawo yokugcina

Kuya kufuneka uzenzele ikopi yakho (ifolokhwe) indawo yokugcina itemplate enekhowudi yekhosi kwiGitHub. Masivume ukubiza le kopi yobuqu indawo yokugcina ikhosi.

Ugqibile? Ukuba awukatshintshi useto olungagqibekanga, indawo yokugcina ikhosi idla ngokubizwa continuous-integration-team-scenarios-students, ifumaneka kwiakhawunti yakho yeGitHub kwaye i-URL ibonakala ngolu hlobo

https://github.com/<вашС имя ползоватСля Π½Π° GitHub>/continuous-integration-team-scenarios-students

Ndiza kuyibiza ngokulula le dilesi <URL рСпозитория>.

Izibiyeli ze-engile njenge <Ρ‚ΡƒΡ‚> Izakuthetha ukuba kufuneka ubuyisele imbonakalo enjalo ngexabiso elifanelekileyo.

Qinisekisa ukuba Iintshukumo zeGitHub ibandakanyiwe kule khosi yokugcina. Ukuba ayenziwanga, nceda uzenze ngokunqakraza iqhosha elikhulu embindini wephepha, onokufika kulo ngokunqakraza iintshukumo kujongano lweGitHub.

Awuyi kukwazi ukugqiba ikhosi ngokulandela imiyalelo yam ukuba i-GitHub Actions ayenziwanga.

Iimeko eziqhelekileyo kunye nokuhlanganiswa okuqhubekayo

Ungasoloko usebenzisa amandla eGitHub ukunika iMarkdown ukubona imeko yangoku yoluhlu esilubumbayo apha.

https://github.com/<your GitHub user name>/continuous-integration-team-scenarios-students/blob/master/ci.md

Malunga neempendulo

Ngelixa eyona ndlela yokugqiba le khosi kukwenza ngokwakho, unokuba nobunzima.

Ukuba uziva ngathi awuyiqondi into omawuyenze kwaye awukwazi ukuqhubeka, ungajonga kumsonto solution, ekwindawo yakho yokugcina yokugcina.
Nceda ungadibanisi solution Π² master ngexesha lekhosi. Ungasebenzisa eli sebe ukufumanisa ukuba wenze ntoni na, okanye uthelekise ikhowudi yakho neyombhali, usebenzisa zonke izakhono ezinikwa iGit. Ukuba ulahlekile ngokupheleleyo, ungabuyisela ngokupheleleyo isebe lakho master esebeni solution kwaye emva koko usete kwakhona ulawulo lwakho lokusebenza kwinyathelo lesifundo olifunayo.

Sebenzisa oku kuphela ukuba uyifuna ngenene

Faka ikhowudi yakho

git add .
git commit -m "Backing up my work"

Le miyalelo

  • ithiya ngokutsha master Π² master-backup;
  • ithiya ngokutsha solution Π² master;
  • phuma kwisebe elitsha master kwaye ubhale kwakhona imixholo yoluhlu olusebenzayo;
  • Yenza i-"solution" yesebe ukusuka ku-"master" (eyayifudula iyi "solution") ukwenzela ukuba ufune isebe le-"solution" kwixesha elizayo.

git branch -m master master-backup
git branch -m solution master
git checkout master -f
git branch solution

Emva kwala manyathelo ungasebenzisa git log master ukufumanisa ukuba yeyiphi imbopheleleko oyifunayo.
Ungaphinda usete uluhlu lwakho lokusebenza kolu kuzinikela ngolu hlobo:

git reset --hard <the SHA you need>

Ukuba uyonwabile ngesiphumo, ngexesha elithile kuya kufuneka upapashe inguqulelo yakho yendawo yokugcina kwindawo ekude. Ungalibali ukuxela ngokucacileyo isebe elikude xa usenza oku.

git push --force origin master

Nceda uqaphele ukuba sisebenzisa git push --force. Akunakwenzeka ukuba ufune ukuyenza le nto rhoqo, kodwa sinemeko ethile apha kunye nomsebenzisi omnye wogcino othi, ukongeza, aqonde into ayenzayo.

Ukuqala ukusebenza

Iimeko eziqhelekileyo kunye nokuhlanganiswa okuqhubekayo

Masiqalise ukuqulunqa uluhlu lwethu lwamanyathelo eCI. Ngokwesiqhelo ungaqala eli nyathelo ngokujonga uguqulelo lwamva nje lwekhowudi kwindawo yokugcina ekude, kodwa asikabinayo indawo yokugcina yasekhaya, ke siyayifanisa isuka kwindawo ekude endaweni yoko.

️ Umsebenzi: hlaziya indawo yokugcina indawo, yenza isebe ukusuka master, qala ukusebenza

  1. Clone indawo yokugcina ikhosi ukusuka <URL рСпозитория>.
  2. Qhuba npm install kuvimba wogcino lwezifundo; Siyidinga ukufaka i-Jest, esiyisebenzisayo ukuqhuba iimvavanyo.
  3. Yenza isebe kwaye ulinike igama feature. Tshintshela kulo msonto.
  4. Yongeza ikhowudi yovavanyo ku ci.test.js phakathi kwezimvo endicela ukuba ndenze oku.

    it('1. pull latest code', () => {
      expect(/.*pull.*/ig.test(fileContents)).toBe(true);
    });
    
    it('2. add commits', () => {
      expect(/.*commit.*/ig.test(fileContents)).toBe(true);
    });
    
    it('3. push to the remote branch with the same name', () => {
      expect(/.*push.*/ig.test(fileContents)).toBe(true);
    });
    
    it('4. create a pull request and continue working', () => {
      expect(/.*pulls+request.*/ig.test(fileContents)).toBe(true);
    });

  5. Yongeza okubhaliweyo ngamanyathelo ama-4 okuqala kwifayile ci.md.
    1. Pull in the latest code. Create a branch from `master`. Start working.    
    2. Create commits on your new branch. Build and test locally.  
    Pass? Go to the next step. Fail? Fix errors or tests and try again.  
    3. Push to your remote repository or remote branch.  
    4. Create a pull request. Discuss the changes, add more commits  
    as discussion continues. Make tests pass on the feature branch.  

    Izixhobo

# ΠšΠ»ΠΎΠ½ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ курса
git clone <repository URL>
cd <repository name>

# Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ npm install Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ рСпозитория курса; ΠΎΠ½ установит Jest, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ для запуска тСстов.
npm install

# Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π²Π΅Ρ‚ΠΊΡƒ ΠΈ Π½Π°Π·ΠΎΠ²ΠΈΡ‚Π΅ Π΅Π΅ feature. ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ Π½Π° эту Π² Π²Π΅Ρ‚ΠΊΡƒ.
git checkout -b feature

# ΠžΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ci.test.js ΠΊΠ°ΠΊ описано Π²Ρ‹ΡˆΠ΅.
# ΠžΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ci.md ΠΊΠ°ΠΊ описано Π²Ρ‹ΡˆΠ΅

Yenza imisebenzi kwisebe elitsha, yakha kwaye uvavanye ekuhlaleni

Siza kuseka iimvavanyo ukuze siqhube phambi kokwenza, kwaye emva koko senze ikhowudi.

Iimeko eziqhelekileyo xa iimvavanyo ziqhutywa ngokuzenzekelayo

  • ekuhlaleni:
    • Ngokuqhubekayo okanye ukuphendula kutshintsho lwekhowudi efanelekileyo;
    • Ekugcineni (kwiilwimi ezitolikiweyo okanye ezihlanganiswe ngeJIT);
    • Ngexesha lokudibanisa (xa ukuhlanganiswa kuyadingeka);
    • Ngokuzibophelela;
    • Xa upapasha kwindawo yokugcina ekwabelwana ngayo.

  • Kumncedisi wokwakha okanye indawo yokwakha:
    • Xa ikhowudi ipapashwa kwisebe lomntu / kwindawo yokugcina.
    • Ikhowudi kulo msonto iyavavanywa.
    • Isiphumo esinokubakho sokudityaniswa siyavavanywa (ngokuqhelekileyo nge master).
    • Njengenqanaba lokudibanisa okuqhubekayo / umbhobho wokuhanjiswa oqhubekayo

Ngokuqhelekileyo, okukhona i-suite yovavanyo ibaleka ngokukhawuleza, kokukhona unokukwazi ukuyiqhuba. Ukuhanjiswa kweqonga okuqhelekileyo kunokujongeka ngolu hlobo.

  • Uvavanyo lweeyunithi ezikhawulezayo - ngexesha lokwakha, kwipayipi yeCI
  • Iimvavanyo zeyunithi ezicothayo, icandelo elikhawulezayo kunye novavanyo lokudibanisa - ekuzibopheleleni, kumbhobho weCI
  • Icandelo elicothayo kunye novavanyo lokudibanisa - kumbhobho weCI
  • Uvavanyo lokhuseleko, uvavanyo lomthwalo kunye nezinye iimvavanyo ezichitha ixesha okanye ezibizayo - kwiipayipi zeCI / CD, kodwa kuphela kwiindlela ezithile / izigaba / iipayipi zokwakha, umzekelo, xa ulungiselela umviwa wokukhululwa okanye xa usebenza ngesandla.

️Umsebenzi

Ndicebisa ukuqhuba iimvavanyo ngesandla kuqala usebenzisa umyalelo npm test. Emva koko, masidibanise i-git hook ukuze siqhube iimvavanyo zethu ekuzibopheleleni. Kukho enye into yokubambisa: Iihuku zeGit azithathwa njengenxalenye yendawo yokugcina kwaye ke ngoko azikwazi ukuveliswa ukusuka kwi-GitHub kunye nezinye izixhobo zekhosi. Ukufakela hook kufuneka ubaleke install_hook.sh okanye khuphela ifayile repo/hooks/pre-commit kulawulo lwasekuhlaleni .git/hooks/.
Xa uzibophelela, uya kubona ukuba iimvavanyo ziyaqhutywa kwaye zijonga ukubona ukuba amagama athile aphambili akhona kuluhlu.

  1. Yenza iimvavanyo ngesandla ngokuqhuba umyalelo npm test kwisiqulathi seefayili sakho sogcino lwekhosi. Qinisekisa ukuba uvavanyo lugqityiwe.
  2. Seta ikhonkco lokuzibophelela (ukuzibophelela kwangaphambili) ngokubaleka install_hook.sh.
  3. Nikela utshintsho lwakho kwindawo yakho yokugcina.
  4. Qinisekisa ukuba iimvavanyo ziqhutywa phambi kokuba uzibophelele.

Indawo yakho yokugcina kufuneka ijongeke ngolu hlobo emva kokulandela la manyathelo.
Iimeko eziqhelekileyo kunye nokuhlanganiswa okuqhubekayo

Izixhobo

# УстановитС pre-commit hook Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² install_hook.sh.  

# Π—Π°ΠΊΠΎΠΌΠΌΠΈΡ‚ΡŒΡ‚Π΅ измСнСния Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ "Add first CI steps" Π² качСствС сообщСния ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅.
git add ci.md ci.test.js
git commit -m "Add first CI steps"

# Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ тСсты Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ.  

Papasha ikhowudi kwindawo yokugcina ekude okanye kwisebe elikude

Xa sele begqibile ukusebenza ekuhlaleni, abaphuhlisi badla ngokwenza ikhowudi yabo ifumaneke esidlangalaleni ukuze ekugqibeleni idityaniswe noluntu. Nge-GitHub, oku kudla ngokuphunyezwa ngokupapasha umsebenzi nokuba yikopi yobuqu yendawo yokugcina (ifolokhwe yobuqu) okanye isebe lomntu.

  • Ngeefolokhwe, umphuhlisi udibanisa indawo yokugcina ekwabelwana ngayo, esenza ikopi yayo ekude, eyaziwa ngokuba yifolokhwe. Ithi ke idibanise le ndawo yokugcina umntu ukuze isebenze nayo ekuhlaleni. Xa umsebenzi ugqityiwe kwaye ukuzinikela kwenziwe, uyazityhala kwifolokhwe yakhe, apho zifumaneka khona kwabanye kwaye zinokudityaniswa kwindawo yokugcina eqhelekileyo. Le ndlela isetyenziswa ngokuqhelekileyo kwiiprojekthi zomthombo ovulekileyo kwi-GitHub. Ikwasetyenziswa kwikhosi yam ephambili [uMsebenzi weQela kunye neCI ngeGit] (http://devops.redpill.solutions/).
  • Enye indlela kukusebenzisa indawo yokugcina ekude nokubala isebe kuphela master indawo yokugcina ekwabelwana ngayo "ekhuselweyo". Kulo mzekelo, abaphuhlisi ngabanye bapapasha ikhowudi yabo kumasebe ogcino olukude ukuze abanye bajonge kule khowudi, ukuba yonke into ilungile, yidibanise ne. master indawo yokugcina ekwabelwana ngayo.

Kwesi sifundo sikhethekileyo, siya kusebenzisa inkqubo yokusebenza esebenzisa amasebe.

Masipapashe ikhowudi yethu.

️Umsebenzi

  • Papasha utshintsho kwisebe elikude elinegama elifanayo nelomsebenzi wesebe lakho

Izixhobo

git push --set-upstream origin feature

Yenza isicelo sokutsala

Yenza isicelo sokutsalwa ngesihloko Uphononongo lwamanyathelo... Faka feature njenge "intloko yesebe" kunye master njenge "base base".

Qinisekisa ukuba uyifakile master kweyakhe ifolokhwe yokugcina "Njengesebe elisisiseko", andizukuphendula kwizicelo zotshintsho kwindawo yokugcina izinto zekhosi.

Kwi-GitHub lingo, "isebe lesiseko" lisebe osekela kulo umsebenzi wakho, kwaye "intloko yesebe" lisebe eliqulethe utshintsho olucetywayo.

Xoxa ngotshintsho, yongeza izibophelelo ezintsha njengoko ingxoxo iqhubeka

Tsala isicelo(PR)

Tsala isicelo(PR) yindlela yokuxoxa kunye noxwebhu lwekhowudi, kunye nokuziphatha ngokutsha kwekhowudi. Izicelo zokutsalwa zithiywa ngendlela eqhelekileyo yokudibanisa utshintsho lomntu kwikhowudi iyonke. Ngokuqhelekileyo, umntu udibanisa indawo yokugcina esemthethweni yeprojekthi kwaye asebenze kwikhowudi ekuhlaleni. Emva koku, ubeka ikhowudi kwindawo yakhe yokugcina ekude kwaye ucela abo banoxanduva logcino olusemthethweni ukuba bathathe (Tsala) ikhowudi yayo kwiindawo zabo zokugcina, apho baphonononga khona kwaye mhlawumbi badibanise (uhlanganise) yakhe. Le ngcamango yaziwa nangamanye amagama, umzekelo, ukudibanisa isicelo.

Awunyanzelekanga ukuba usebenzise inqaku lesicelo sokutsalwa kweGitHub okanye amaqonga afanayo. Amaqela ophuhliso anokusebenzisa ezinye iindlela zonxibelelwano, kubandakanywa unxibelelwano lobuso ngobuso, iifowuni zezwi, okanye i-imeyile, kodwa kusekho izizathu ezininzi zokusebenzisa izicelo zokutsalwa kweforum. Nazi ezinye zazo:

  • iingxoxo ezicwangcisiweyo ezinxulumene notshintsho lwekhowudi ethile;
  • njengendawo yokujonga ingxelo malunga nomsebenzi oqhubekayo kubo bobabini oomatshini kunye noontanga;
  • ukwenziwa ngokusesikweni kophononongo lwekhowudi;
  • ukuze kamva ufumane izizathu kunye neengqwalasela emva koku okanye iqhekeza lekhowudi.

Ngokwesiqhelo wenza isicelo sokutsala xa ufuna ukuxoxa ngento ethile okanye ufumane impendulo. Umzekelo, ukuba usebenza kwinqaku elinokuphunyezwa ngeendlela ezininzi, unokwenza isicelo sokutsalwa ngaphambi kokuba ubhale umgca wokuqala wekhowudi ukwabelana ngezimvo zakho kwaye uxoxe ngezicwangciso zakho nabalingane bakho. Ukuba umsebenzi ulula, isicelo sokutsala sivulwa xa kukho into esele yenziwe, izinikele, kwaye ingaxoxwa. Kwezinye iimeko, unokufuna ukuvula i-PR kuphela ngenxa yezizathu zokulawula umgangatho: ukuqhuba iimvavanyo ezizenzekelayo okanye ukuqalisa ukuhlolwa kwekhowudi. Nokuba wenze ntoni na, ungalibali uku-@khankanya abantu abafuna ukuvunyelwa kwabo kwisicelo sakho sokutsala.

Ngokuqhelekileyo, xa udala i-PR, wenza oku kulandelayo.

  • Bonisa ukuba uceba ukutshintsha ntoni kwaye phi.
  • Bhala inkcazo echaza injongo yotshintsho. Ungafuna:
    • yongeza nantoni na ebalulekileyo engacacanga kwikhowudi, okanye into eluncedo ekuqondeni umxholo, njenge #bugs ezifanelekileyo kunye namanani azibophelele;
    • @mention nabani na ofuna ukuqala ukusebenza naye, okanye unako @mention kubo kwizimvo kamva;
    • cela oogxa babo ukuba bancede ngento ethile okanye bajonge into ethile.

Nje ukuba uvule i-PR, iimvavanyo ezilungiselelwe ukuqhuba kwiimeko ezinjalo ziyenziwa. Kwimeko yethu, oku kuya kuba yisethi efanayo yovavanyo esiye saqhuba kwindawo, kodwa kwiprojekthi yangempela kunokubakho iimvavanyo ezongezelelweyo kunye neetshekhi.

Nceda ulinde ngelixa uvavanyo lugqityiwe. Ungayibona imeko yovavanyo ezantsi kwengxoxo yePR kwi-interface ye-GitHub. Qhubeka xa iimvavanyo zigqityiwe.

️ Yongeza inqaku malunga nokungakhethi koluhlu lwamanyathelo eCI

Uluhlu olusetyenziswe kule khosi alunasizathu kwaye luxhomekeke, kufuneka songeze inqaku malunga noku.

️ Umsebenzi: yenza isicelo sokutsalwa kwala mazwana

  1. Tshintshela kwisebe master.
  2. Yenza isebe elinegama bugfix.
  3. Yongeza inqaku elibhaliweyo ekupheleni kwefayile ci.md.
    > **GitHub flow** is sometimes used as a nickname to refer to a flavor of trunk-based development  
    when code is deployed straight from feature branches. This list is just an interpretation  
    that I use in my [DevOps courses](http://redpill.solutions).  
    The official tutorial is [here](https://guides.github.com/introduction/flow/).
  4. Yenza utshintsho.
  5. Papasha umsonto bugfix kwindawo yokugcina ekude.
  6. Yenza isicelo sokutsalwa esinikwe igama Yongeza inkcazo ngentloko yesebe bugfix kunye nesiseko sesebemaster.

Qinisekisa ukuba uyifakile master kweyakhe ifolokhwe yokugcina "Njengesebe elisisiseko", andizukuphendula kwizicelo zotshintsho kwindawo yokugcina izinto zekhosi.

Yile nto kufuneka ibukeke indawo yakho yokugcina.
Iimeko eziqhelekileyo kunye nokuhlanganiswa okuqhubekayo

Izixhobo

# ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ Π½Π° Π²Π΅Ρ‚ΠΊΡƒ master. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π²Π΅Ρ‚ΠΊΡƒ bugfix.
git checkout master

# Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π²Π΅Ρ‚ΠΊΡƒ bugfix-remark.
git checkout -b bugfix

# Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ тСкст примСчания Π²Π½ΠΈΠ·Ρƒ ci.md.

# Π—Π°ΠΊΠΎΠΌΠΌΠΈΡ‚ΡŒΡ‚Π΅ измСнСния
git add ci.md
git commit -m "Add a remark about the list being opinionated"

# ΠžΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠΉΡ‚Π΅ Π²Π΅Ρ‚ΠΊΡƒ bugfix Π² ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.
git push --set-upstream origin bugfix

# Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ pull request ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ интСрфСйса GitHub ΠΊΠ°ΠΊ описано Π²Ρ‹ΡˆΠ΅

Vuma isicelo sokutsala "Yongeza inqaku"

️Umsebenzi

  1. Yenza isicelo sokutsala.
  2. Cofa "Dibanisa isicelo sokutsala".
  3. Cofa "Qinisekisa ukudibanisa".
  4. Cofa u-"Delete branch", asisayifuni.

Lo ngumzobo wokuzibophelela emva kokudibanisa.
Iimeko eziqhelekileyo kunye nokuhlanganiswa okuqhubekayo

️ Qhubeka usebenza kwaye wongeza iimvavanyo

Ukusebenzisana kwisicelo sokutsalwa kudla ngokukhokelela kumsebenzi owongezelelweyo. Oku kudla ngokuba sisiphumo sophononongo lwekhowudi okanye ingxoxo, kodwa kwikhosi yethu siza kuyenza imodeli yoku ngokongeza izinto ezintsha kuluhlu lwethu lwamanyathelo eCI.

Udibaniso oluqhubekayo lubandakanya ukugubungela uvavanyo. Iimfuno zofikelelo lovavanyo ziyahluka kwaye zidla ngokufunyanwa kuxwebhu olubizwa ngokuba yi "contribution guidelines". Siza kuyigcina ilula kwaye songeze uvavanyo kumgca ngamnye kuluhlu lwethu lokukhangela.

Xa uqhuba izabelo, zama ukwenza iimvavanyo kuqala. Ukuba ufake ngokuchanekileyo pre-commit hook ngaphambili, uvavanyo olutshanje luya kwenziwa, luya kusilela, kwaye akukho nto iya kwenziwa. Qaphela ukuba le yindlela esazi ngayo ukuba iimvavanyo zethu zivavanya into ethile. Okubangela umdla kukuba, ukuba siqale ngekhowudi phambi kweemvavanyo, ukuphumelela iimvavanyo kunokuthetha ukuba ikhowudi isebenze njengoko bekulindelwe, okanye iimvavanyo bezingenakuvavanya nantoni na. Ngaphezu koko, ukuba besingazibhalanga ezi mvavanyo kwasekuqaleni, ngekhe sazilibala kwaphela, ekubeni bekungekho nto isikhumbuzayo ngayo.

Uphuhliso oluqhutywayo kuvavanyo (TDD)

I-TDD icebisa iimvavanyo zokubhala phambi kwekhowudi. Ukuqhutywa komsebenzi oqhelekileyo usebenzisa i-TDD kujongeka ngolu hlobo.

  1. Yongeza uvavanyo.
  2. Qhuba zonke iimvavanyo kwaye uqinisekise ukuba uvavanyo olutsha aluphumeleli.
  3. Bhala ikhowudi.
  4. Qhuba iimvavanyo, qinisekisa ukuba zonke iimvavanyo ziyaphumelela.
  5. Hlaziya ikhowudi yakho.
  6. Phinda.

Ngenxa yokuba iziphumo zovavanyo olungaphumeleliyo zidla ngokuboniswa ngombala obomvu, kwaye ezo ziphumeleleyo zidla ngokuboniswa ngombala oluhlaza, umjikelo ukwabizwa ngokuba yi-red-green-refactor.

️Umsebenzi

Okokuqala, zama ukwenza iimvavanyo kwaye ubayeke bangaphumeleli, uze udibanise kwaye wenze okubhaliweyo koluhlu lwamanyathelo eCI ngokwawo. Uya kubona ukuba iimvavanyo ziyadlula ("luhlaza").
Emva koko upapashe ikhowudi entsha kwindawo ekude kwaye ujonge iimvavanyo eziqhutywa kwi-interface ye-GitHub ezantsi kwengxoxo yesicelo sokutsala kunye nokuhlaziywa kwesimo se-PR.

  1. Tshintshela kwisebe feature.
  2. Yongeza ezi mvavanyo ku ci.test.js emva kwefowuni yokugqibela it (...);.

    it('5. Merge/rebase commits from master. Make tests pass on the merge result.', () => {
      expect(/.*merge.*commits.*testss+pass.*/ig.test(fileContents)).toBe(true);
    });
    
    it('6. Deploy from the feature branch to production.', () => {
      expect(/.*Deploy.*tos+production.*/ig.test(fileContents)).toBe(true);
    });
    
    it('7. If everything is good in production for some period of time, merge changes to master.', () => {
      expect(/.*merge.*tos+master.*/ig.test(fileContents)).toBe(true);
    });

  3. Zama ukwenza iimvavanyo. Ukuba pre-commit hook ifakiwe, umzamo wokuzibophelela uya kusilela.
  4. Emva koko yongeza lo mbhalo ku ci.md.
    5. Merge/rebase commits from master. Make tests pass on the merge result.  
    6. Deploy from the feature branch with a sneaky bug to production.
    7. If everything is good in production for some period of time, merge changes to master. 
  5. Yenza kwaye wenze utshintsho ekuhlaleni.
  6. Thumela utshintsho kwisebe feature.

Kufuneka ube nento enje ngoku
Iimeko eziqhelekileyo kunye nokuhlanganiswa okuqhubekayo

Izixhobo


# ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π° Π²Π΅Ρ‚ΠΊΡƒ feature
git checkout feature

# Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ тСсты Π² ci.test.js ΠΊΠ°ΠΊ описано Π²Ρ‹ΡˆΠ΅

# Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² индСкс ci.test.js Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·ΠΆΠ΅ Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΡ‚ΡŒ
git add ci.test.js

# ΠŸΠΎΠΏΡ‹Ρ‚Π°ΠΉΡ‚Π΅ΡΡŒ Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΡ‚ΡŒ тСсты. Если pre-commit hook установлСны, ΠΊΠΎΠΌΠΌΠΈΡ‚ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚.
git commit

# Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ тСкст Π² ci.md ΠΊΠ°ΠΊ описано Π²Ρ‹ΡˆΠ΅

# ВнСситС измСнСния ΠΈ Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‚ΡŒΡ‚Π΅ ΠΈΡ…
git add ci.md
git commit -m "Add the remaining CI steps"

# ΠžΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠΉΡ‚Π΅ измСнСния Π² Π²Π΅Ρ‚ΠΊΡƒ feature
git push

Dibanisa impixano

Yiya ku Tshintsha isicelo Uphononongo lwamanyathelo.

Nangona singenzanga nto iphosakeleyo kwaye iimvavanyo zekhowudi yethu ziphumelele, asikwazi ukudibanisa isebe feature ΠΈ master. Kungenxa yokuba omnye umsonto bugfix yadityaniswa nayo master ngelixa sasisebenza kule PR.
Oku kudala imeko apho isebe elikude master inoguqulelo olutsha kunale sisekele isebe kuyo feature. Ngenxa yoku asinakuvele sibuyisele umva INTLOKO master ukuya kutsho ekupheleni komsonto feature. Kule meko, kufuneka sidibanise okanye sisebenzise izibophelelo feature hlehlisa master. I-GitHub inokwenza udibaniso oluzenzekelayo ukuba akukho ngquzulwano. Ewe, kwimeko yethu, omabini amasebe aneenguqu ezikhuphisanayo kwifayile ci.md. Le meko yaziwa njengengxabano yokudibanisa, kwaye kufuneka siyisombulule ngesandla.

Hlanganisa okanye ubuyisele kwakhona

Hlanganisa

  • Yenza isibophelelo sokudibanisa esongezelelweyo kwaye igcina imbali yomsebenzi.
    • Ugcina umsebenzi wokuqala wamasebe kunye nesitampu sawo sangaphambili kunye nababhali.
    • Igcina i-SHA yokuzibophelela kunye nokunxibelelana nabo kwiingxoxo zesicelo sotshintsho.
  • Ifuna isisombululo sexesha elinye.
  • Wenza ukuba ibali lingangqamani.
    • Ibali linokuba nzima ukufunda ngenxa yenani elikhulu lamasebe (okukhumbuza intambo ye-IDE).
    • Yenza ulungiso oluzenzekelayo lubenzima ngakumbi, umz. git bisect luncedo oluncinci- luzakufumana kuphela ukudibanisa ukuzibophelela.

Ukukhutshwa kwakhona

  • Uphinda-phinda wenza isebe langoku ngaphezulu kwesiseko sesebe emva kwenye.
    • Ukuzibophelela okutsha ngee-SHA ezintsha kuyenziwa, okubangela ukuba ukuzinikela kwi-GitHub kuhambelane nezicelo zokuqala zokutsalwa, kodwa hayi izimvo ezihambelanayo.
    • Izibophelelo zinokudityaniswa kwaye zilungiswe kwinkqubo, okanye zidityaniswe zibe nye.
  • Iingxabano ezininzi zinokufuna ukusonjululwa.
  • Ikuvumela ukuba ugcine ibali elinomgca.
    • Ibali lisenokuba lula ukulifunda logama nje lingelide kakhulu ngaphandle kwesizathu esibambekayo.
    • Ukulungisa okuzenzekelayo kunye nokusombulula ingxaki kulula kancinci: kwenza ukuba kwenzeke git bisect, inokwenza ukuba ii-rollbacks ezizenzekelayo zicace kwaye ziqikeleleke ngakumbi.
  • Ifuna ukupapasha isebe elinezibophelelo ezifudukayo ezineflegi --force xa isetyenziswe kunye nezicelo zokutsalwa.

Ngokuqhelekileyo, amaqela avuma ukuhlala esebenzisa isicwangciso esifanayo xa efuna ukudibanisa utshintsho. Oku kunokuba "kusulungekile" ukudibanisa okanye "okusulungekileyo" ukuzibophelela phezulu, okanye into ephakathi, njengokwenza ukuzibophelela phezulu ngokusebenzisana (git rebase -i) ekuhlaleni kumasebe angapapashwanga kwindawo yokugcina uluntu, kodwa adityaniselwe amasebe "oluntu".

Apha siza kusebenzisa ukudibanisa.

️Umsebenzi

  1. Qinisekisa ukuba ikhowudi ikwisebe lendawo master ihlaziywe ukusuka kwindawo yokugcina ekude.
  2. Tshintshela kwisebe feature.
  3. Qalisa ukudibanisa nesebe master. Impixano yokudibanisa ngenxa yotshintsho olukhuphisanayo kwi ci.md.
  4. Sombulula impixano ukuze zombini uluhlu lwethu lwamanyathelo eCI kunye nenqaku malunga nalo lihlale kwisicatshulwa.
  5. Papasha isibophelelo sokudibanisa kwisebe elikude feature.
  6. Jonga imeko yesicelo sokutsala kwi-GitHub UI kwaye ulinde de udibaniso lusonjululwe.

Izixhobo

# Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Π² локальноС Π²Π΅Ρ‚ΠΊΠ΅ `master` ΠΎΠ±Π½ΠΎΠ²Π»Ρ‘Π½ ΠΈΠ· ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ рСпозитория.
git checkout master
git pull

# ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ Π½Π° Π²Π΅Ρ‚ΠΊΡƒ feature
git checkout feature

# Π˜Π½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠΉΡ‚Π΅ слияниС с Π²Π΅Ρ‚ΠΊΠΎΠΉ master 
git merge master

# A merge conflict related to concurrent changes to ci.md will be reported
# => Auto-merging ci.md
#    CONFLICT (content): Merge conflict in ci.md
#    Automatic merge failed; fix conflicts and then commit the result.

# Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈ наш список шагов CI, ΠΈ Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ ΠΎ Π½Π΅ΠΌ ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ Π² тСкстС.
# ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ci.md Ρ‡Ρ‚ΠΎΠ± ΠΎΠ½ Π½Π΅ содСрТал ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ² ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° слияния
git add ci.md
git merge --continue
# ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сообщСниС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

# ΠžΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚ слияния Π² ΡƒΠ΄Π°Π»Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ feature.
git push

# ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ статус запроса Π½Π° измСнСния Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ интСрфСйсС GitHub, Π΄ΠΎΠΆΠ΄ΠΈΡ‚Π΅ΡΡŒ ΠΏΠΎΠΊΠ° слияниС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ.

Umsebenzi omhle kakhulu!

Ugqibile ngoluhlu kwaye ngoku kufuneka uvume isicelo sokutsala ngaphakathi master.

️ Umsebenzi: Vuma isicelo sokutsala "Amanyathelo ophononongo"

  1. Vula isicelo sokutsala.
  2. Cofa "Dibanisa isicelo sokutsala".
  3. Cofa "Qinisekisa ukudibanisa".
  4. Cofa u-"Delete branch" kuba asisayifuni.

Le yindawo yakho yokugcina okwangoku
Iimeko eziqhelekileyo kunye nokuhlanganiswa okuqhubekayo

Impazamo yemveliso

Kuthiwa β€œuvavanyo lunokusetyenziswa ukubonisa ubukho beempazamo, kodwa ungaze ubonise ukungabikho kwazo.” Nangona besinovavanyo kwaye abasibonisanga zimpazamo, ibug efihlakeleyo iye yangena kwimveliso.

Kwimeko efana nale, kufuneka sinyamekele:

  • yintoni esasazwa kwimveliso;
  • ikhowudi kumsonto master ngemposiso, apho abaphuhlisi banokuqala khona umsebenzi omtsha.

Ngaba kufuneka ndiyibuyisele umva okanye ndiyilungise kuhlelo olulandelayo?

Ukubuyisela umva yinkqubo yokuthumela inguqulelo eyaziwayo yangaphambili kwimveliso kunye nokubuyisela uxanduva oluqulethe impazamo. "Ukulungisa phambili" kukongeza ukulungiswa kwi master kunye nokuhambisa inguqulelo entsha ngokukhawuleza. Ngenxa yokuba ii-APIs kunye nee-schemas zedatha zitshintsha njengoko ikhowudi ifakwe kwimveliso, kunye nokuhanjiswa okuqhubekayo kunye novavanyo oluhle lokuvavanya, ukubuyisela umva ngokuqhelekileyo kunzima kakhulu kwaye kuyingozi kunokulungisa kwinguqulo elandelayo.

Ekubeni ukubuyisela umva akuthwali nayiphi na ingozi kwimeko yethu, siya kuhamba ngale ndlela, kuba iyasivumela

  • lungisa impazamo kwimveliso ngokukhawuleza;
  • yenza ikhowudi ngaphakathi master ngokukhawuleza ilungele ukuqala umsebenzi omtsha.

️Umsebenzi

  1. Tshintshela kwisebe master ekuhlaleni.
  2. Hlaziya ugcino lwasekuhlaleni ukusuka kwindawo yokugcina ekude.
  3. Buyisela isibophelelo sodibaniso lwePR Uphononongo lwamanyathelo Π² master.
  4. Papasha utshintsho kwindawo yokugcina ekude.

Le yimbali yendawo yokugcina enesivumelwano sokudibanisa esibuyiselweyo
Iimeko eziqhelekileyo kunye nokuhlanganiswa okuqhubekayo

Izixhobo

# ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ Π½Π° Π²Π΅Ρ‚ΠΊΡƒ master.
git checkout master

# ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈΠ· ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ рСпозитория.
git pull

# ΠžΡ‚ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚ слияния PR Steps review Π² master.
# ΠœΡ‹ отмСняСм ΠΊΠΎΠΌΠΌΠΈΡ‚ слияния, поэтому Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ истории, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ
git show HEAD

# ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» послСдним Π² Π²Π΅Ρ‚ΠΊΠ΅ master Π΄ΠΎ слияния, Π±Ρ‹Π» ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΡ‘Π½ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ
git revert HEAD -m 1
# ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ ΠΌΠ΅Π½ΡΡ‚ΡŒ сообщСния ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²

# ΠžΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠΉΡ‚Π΅ измСнСния Π² ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ
git push

️ Ukuzivavanya

Qiniseka ukuba ci.md ayisekho umbhalo othi "sneaky bug" emva kokubuyisela udibaniso lwesibophelelo.

Lungisa uluhlu lwamanyathelo eCI kwaye ulubuyisele kumphathi

Sisibuyisele ngokupheleleyo isibophelelo sokudityaniswa kwesebe. feature. Iindaba ezimnandi zezokuba ngoku asinampazamo master. Iindaba ezimbi zezokuba uluhlu lwethu oluxabisekileyo lwamanyathelo okudibanisa okuqhubekayo alusekho. Ke, ngokufanelekileyo, kufuneka sisebenzise ukulungiswa kwezibophelelo ukusuka feature kwaye uzibuyisele ku master kunye nokulungiswa.

Sinokuyijonga le ngxaki ngeendlela ezahlukeneyo:

  • buyisela isibophelelo esirhoxisa udibaniso feature с master;
  • intshukumo izibophelela ukusuka ekuqaleni feature.

Amaqela ahlukeneyo ophuhliso asebenzisa iindlela ezahlukeneyo kulo mzekelo, kodwa siya kuhambisa izinto eziluncedo kwisebe elahlukileyo kwaye senze isicelo esahlukileyo sokutsala eli sebe litsha.

️Umsebenzi

  1. Yenza umsonto obizwa ngokuba feature-fix kwaye utshintshele kuyo.
  2. Susa zonke izibophelelo ukusuka kwisebe langaphambili feature kumgca omtsha. Sombulula iingxabano zokudibanisa ezenzeke ngexesha lokufuduka.

    Iimeko eziqhelekileyo kunye nokuhlanganiswa okuqhubekayo

  3. Yongeza uvavanyo lokuhlehla ku ci.test.js:

    it('does not contain the sneaky bug', () => {
    expect( /.*sneakys+bug.*/gi.test(fileContents)).toBe(false);
    });

  4. Qhuba iimvavanyo endaweni ukuqinisekisa ukuba abasileli.
  5. Susa okubhaliweyo "nge-bug ekhohlisayo" kuyo ci.md.
  6. Yongeza utshintsho lovavanyo kunye notshintsho loluhlu lwamanyathelo kwisalathiso kwaye uzibophelele.
  7. Papasha isebe kwindawo ekude yokugcina izinto.

Kuya kufuneka ugqibe ngento efana nale:
Iimeko eziqhelekileyo kunye nokuhlanganiswa okuqhubekayo

Izixhobo

# Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π²Π΅Ρ‚ΠΊΡƒ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ feature-fix ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ Π½Π° Π½Π΅Π΅.
git checkout -b feature-fix

# ΠŸΠ΅Ρ€Π΅Π½Π΅ΡΠΈΡ‚Π΅ всС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΈΠ· Π±Ρ‹Π²ΡˆΠ΅ΠΉ Π²Π΅Ρ‚ΠΊΠΈ feature Π² Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ. Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ слияния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ ΠΏΡ€ΠΈ пСрСносС.
# ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ Ρ…ΡΡˆΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²:
# - ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ с ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ списка: C0
# - Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ послСдниС элСмСнты списка: C2
git log --oneline --graph
git cherry-pick C0..C2
# Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ слияния
# - ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ci.md ΠΈ/ΠΈΠ»ΠΈ ci.test.js
# - Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π² индСкс
# - Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ "git cherry-pick --continue", ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ ΠΌΠ΅Π½ΡΡ‚ΡŒ сообщСниС ΠΊΠΎΠΌΠΌΠΈΡ‚Π°

# Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ рСгрСссионный тСст Π² ci.test.js
# ЗапуститС тСсты локально, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ΡΡ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ.

# Π£Π΄Π°Π»ΠΈΡ‚Π΅ тСкст " with a sneaky bug" Π² ci.md.

# Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² индСкс измСнСния тСстов ΠΈ Π² спискС шагов ΠΈ Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‚ΡŒΡ‚Π΅ ΠΈΡ….
git add ci.md ci.test.js
git commit -m "Fix the bug in steps list"

# ΠžΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠΉΡ‚Π΅ Π²Π΅Ρ‚ΠΊΡƒ Π² ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.
git push --set-upstream origin feature-fix

Yenza isicelo sokutsala.

Yenza isicelo sokutsalwa ngesihloko Ukulungisa uphawu... Faka feature-fix njenge "intloko yesebe" kunye master njenge "base base".
Nceda ulinde ngelixa uvavanyo lugqityiwe. Ungabona ubume beemvavanyo ezantsi kwengxoxo yePR.

Qinisekisa ukuba uyifakile master kweyakhe ifolokhwe yokugcina "Njengesebe elisisiseko", andizukuphendula kwizicelo zotshintsho kwindawo yokugcina izinto zekhosi.

Vumela isicelo sokutsalwa "Ukulungisa isici"

Enkosi ngolungiso! Nceda uvume utshintsho kwi master kwisicelo sokutsala.

️Umsebenzi

  1. Cofa "Dibanisa isicelo sokutsala".
  2. Cofa "Qinisekisa ukudibanisa".
  3. Cofa u-"Delete branch" kuba asisayifuni.

Le yinto ekufuneka ubenayo ngalo mzuzu.
Iimeko eziqhelekileyo kunye nokuhlanganiswa okuqhubekayo

Sivuyisana nawe!

Uwagqibile onke amanyathelo abantu abadla ngokuwathatha ngexesha lokudityaniswa okuqhubekayo.

Ukuba ubona naziphi na iingxaki ngekhosi okanye uyazi indlela yokuyiphucula, nceda wenze umba kuyo iindawo zokugcina ezinemathiriyeli yekhosi. Le khosi ikwanazo inguqulelo interactive usebenzisa iGitHub Learning Lab njengeqonga.

umthombo: www.habr.com

Yongeza izimvo