Izimo ezijwayelekile ezinokuhlanganiswa okuqhubekayo

Uyifundile imiyalo ye-Git kodwa ufuna ukucabanga ukuthi ukuhlanganiswa okuqhubekayo (CI) kusebenza kanjani empeleni? Noma mhlawumbe ufuna ukwandisa imisebenzi yakho yansuku zonke? Lesi sifundo sizokunikeza amakhono asebenzayo ekuhlanganiseni okuqhubekayo usebenzisa inqolobane ye-GitHub. Lesi sifundo asihloselwe ukuba isilekeleli ongakwazi ukumane uchofoze kuso; ngokuphambene nalokho, uzokwenza izinto ezifanayo nalezo abantu abazenzayo emsebenzini, ngendlela efanayo abazenza ngayo. Ngizochaza ithiyori njengoba uqhubeka nezinyathelo ezihilelekile.

Senzenjani?

Njengoba sithuthuka, kancane kancane sizodala uhlu lwezinyathelo ezijwayelekile ze-CI, okuyindlela enhle yokukhumbula lolu hlu. Ngamanye amazwi, sizodala uhlu lwezenzo ezithathwa onjiniyela ngenkathi benza ukuhlanganiswa okuqhubekayo, benza ukuhlanganisa okuqhubekayo. Sizophinda sisebenzise isethi elula yokuhlola ukusondeza inqubo yethu ye-CI kweyangempela.

Le GIF ikhombisa ngohlelo lokho okwenziwayo endaweni yakho yokugcina njengoba uqhubeka nesifundo. Njengoba ubona, akukho lutho oluyinkimbinkimbi lapha futhi kuphela oludingekayo kakhulu.

Izimo ezijwayelekile ezinokuhlanganiswa okuqhubekayo

Uzodlula ezimeni ezilandelayo ezijwayelekile ze-CI:

  • Sebenza kusici;
  • Ukusetshenziswa kokuhlolwa okuzenzakalelayo ukuze kuqinisekiswe ikhwalithi;
  • Ukuqaliswa komsebenzi oseqhulwini;
  • Ukuxazulula ukungqubuzana lapho kuhlanganiswa amagatsha (hlanganisa ukungqubuzana);
  • Iphutha lenzeka endaweni yokukhiqiza.

Uzofundani?

Uzokwazi ukuphendula imibuzo elandelayo:

  • Kuyini ukuhlanganiswa okuqhubekayo (CI)?
  • Yiziphi izinhlobo zokuhlola okuzenzakalelayo ezisetshenziswa ku-CI, futhi ekuphenduleni yiziphi izenzo ezicushwayo?
  • Ziyini izicelo zokudonsa futhi zidingeka nini?
  • Iyini i-Test Driven Development (TDD) futhi ihlobana kanjani ne-CI?
  • Ingabe kufanele ngihlanganise noma ngehlise kabusha izinguquko?
  • Buyisela emuva noma ulungise enguqulweni elandelayo?

Ekuqaleni ngahumusha izinto ezinjengokuthi "izicelo zokudonsa" yonke indawo, kodwa ngenxa yalokho nganquma ukubuyisela imishwana ngesiNgisi kwezinye izindawo ukuze nginciphise izinga lokuhlanya embhalweni. Ngezinye izikhathi ngizosebenzisa "umhleli wezinhlelo" njengesenzo esihle "sokuzinikela" lapho abantu besisebenzisa khona emsebenzini.

Kuyini ukuhlanganiswa okuqhubekayo?

Ukuhlanganisa Okuqhubekayo, noma i-CI, umkhuba wobuchwepheshe lapho ilungu ngalinye leqembu lihlanganisa ikhodi yalo endaweni yokugcina eyodwa okungenani kanye ngosuku, futhi ikhodi ewumphumela kufanele okungenani yakhiwe ngaphandle kwamaphutha.

Kukhona ukungaboni ngaso linye ngaleli gama

Iphuzu lombango imvamisa yokuhlanganisa. Abanye baphikisa ngokuthi ukuhlanganisa ikhodi kanye kuphela ngosuku akwanele ukuhlanganisa ngokuqhubekayo. Isibonelo sinikezwa ngeqembu lapho wonke umuntu ethatha ikhodi entsha ekuseni futhi ayihlanganise kanye kusihlwa. Nakuba lokhu kuwukuphikisa okunengqondo, ngokuvamile kunenkolelo yokuthi incazelo yosuku olulodwa iyasebenza ngokunengqondo, icacile, futhi ifanele amaqembu anosayizi abahlukahlukene.

Okunye ukuphikisa ukuthi i-C++ akuselona ukuphela kolimi olusetshenziswa ekuthuthukisweni, futhi nje ukudinga ukuhlangana okungenaphutha njengendlela yokuqinisekisa akunamandla. Olunye isethi yokuhlola (isibonelo, ukuhlolwa kweyunithi okwenziwa endaweni) kufanele futhi kuqedelwe ngempumelelo. Okwamanje, umphakathi usuphokophele ekwenzeni lokhu kube yisidingo, futhi esikhathini esizayo "ukwakha + ukuhlolwa kwamayunithi" cishe kuzoba umkhuba ojwayelekile, uma kungakenziwa.

Ukuhlanganisa Okuqhubekayo ehlukile ku- ukulethwa okuqhubekayo (Ukulethwa Okuqhubekayo, i-CD) ngoba ayidingi ikhandidethi lokukhishwa ngemva komjikelezo ngamunye wokuhlanganisa.

Uhlu lwezinyathelo esizozisebenzisa kuso sonke isifundo

  1. Donsa ikhodi yakamuva. Dala igatsha kusuka master. Qala ukusebenza.
  2. Dala izibophezelo egatsheni lakho elisha. Yakha futhi uhlole endaweni. Dlula? Iya esinyathelweni esilandelayo. Yehlulekile? Lungisa amaphutha noma izivivinyo bese uzama futhi.
  3. Phusha uye endaweni yakho yokugcina ekude noma igatsha elikude.
  4. Dala isicelo sokudonsa. Xoxa ngezinguquko, engeza ezinye izibophezelo njengoba ingxoxo iqhubeka. Yenza ukuhlolwa kudlule egatsheni lesici.
  5. Hlanganisa/buyisela kabusha izibophezelo ezivela ku-master. Yenza ukuhlolwa kudlule kumphumela wokuhlanganisa.
  6. Khipha kusukela egatsheni lesici kuye ekukhiqizeni.
  7. Uma yonke into ihamba kahle ekukhiqizeni isikhathi esithile, hlanganisa izinguquko ukuze ube uchwepheshe.

Izimo ezijwayelekile ezinokuhlanganiswa okuqhubekayo

️ Ukulungiselela

Qiniseka ukuthi unesofthiwe efanele

Ukuthatha lesi sifundo uzodinga I-Node.js ΠΈ Iklayenti le-Git.

Ungasebenzisa noma yiliphi iklayenti le-Git, kodwa ngizonikeza imiyalo yomugqa womyalo kuphela.

Qiniseka ukuthi uneklayenti le-Git elifakiwe elisekela umugqa womyalo

Uma ungakabi nalo iklayenti le-Git elisekela umugqa womyalo, ungathola imiyalelo yokufaka lapha.

Lungiselela inqolobane

Uzodinga ukwenza ikhophi yomuntu siqu (imfoloko) inqolobane yesifanekiso enekhodi yesifundo ku-GitHub. Masivume ukushayela le khophi yomuntu siqu inqolobane yezifundo.

Kwenziwe? Uma ungakashintshi izilungiselelo ezizenzakalelayo, inqolobane yakho yezifundo cishe izobizwa continuous-integration-team-scenarios-students, itholakala ku-akhawunti yakho ye-GitHub futhi i-URL ibonakala kanje

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

Ngizovele ngibize leli kheli <URL рСпозитория>.

Abakaki be-engela like <Ρ‚ΡƒΡ‚> kuzosho ukuthi kufanele ubeke inani elifanele esikhundleni somusho onjalo.

Qiniseka ukuthi Izenzo ze-GitHub kufakwe kule nqolobane yezifundo. Uma zingenziwanga amandla, sicela uzinike amandla ngokuchofoza inkinobho enkulu phakathi nekhasi, ongafika kukho ngokuchofoza Izenzo kusixhumi esibonakalayo se-GitHub.

Ngeke ukwazi ukuqedela isifundo ngokulandela imiyalelo yami uma Izenzo ze-GitHub zinganikwanga amandla.

Izimo ezijwayelekile ezinokuhlanganiswa okuqhubekayo

Ungahlala usebenzisa ikhono le-GitHub lokunikeza i-Markdown ukuze ubone isimo samanje sohlu esiluqamba lapha.

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

Mayelana nezimpendulo

Yize indlela engcono kakhulu yokuqeda lesi sifundo ukuzenzela wena, ungase ube nobunzima obuthile.

Uma unomuzwa wokuthi awuqondi ukuthi yini okufanele uyenze futhi awukwazi ukuqhubeka, ungabheka uchungechunge solution, esendaweni yakho yokugcina.
Sicela ungahlanganisi solution Π² master phakathi nesifundo. Ungasebenzisa leli gatsha ukuthola ukuthi yini okufanele uyenze, noma uqhathanise ikhodi yakho neyombhali, usebenzisa wonke amakhono esiwanikezwa i-Git. Uma ulahlekile ngokuphelele, ungashintsha ngokuphelele igatsha lakho master egatsheni solution bese usetha kabusha uhla lwakho lokusebenza kusinyathelo sesifundo osidingayo.

Sebenzisa lokhu kuphela uma ukudinga ngempela

Faka ikhodi yakho

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

Le miyalo

  • qamba kabusha master Π² master-backup;
  • qamba kabusha solution Π² master;
  • phuma uye egatsheni elisha master futhi ubhale kabusha okuqukethwe kohla lwemibhalo olusebenzayo;
  • Dala igatsha elithi "isixazululo" ukusuka kokuthi "master" (okwakukade kwaba "isixazululo") uma kwenzeka udinga igatsha "lesixazululo" ngokuzayo.

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

Ngemva kwalezi zinyathelo ungasebenzisa git log master ukuthola ukuthi iyiphi inkontileka oyidingayo.
Ungasetha kabusha inkomba yakho yokusebenza kulokhu kuzinikela kanje:

git reset --hard <the SHA you need>

Uma ujabulile ngomphumela, ngesinye isikhathi uzodinga ukushicilela inguqulo yakho yenqolobane endaweni yokugcina ekude. Ungakhohlwa ukucacisa ngokusobala igatsha elikude lapho wenza lokhu.

git push --force origin master

Sicela uqaphele ukuthi sisebenzisa git push --force. Mancane amathuba okuthi uzofuna ukwenza lokhu kaningi, kodwa sinesimo esicacile lapha ngomsebenzisi oyedwa oyinqolobane, ngaphezu kwalokho, oqondayo ukuthi wenzani.

Iqala ukusebenza

Izimo ezijwayelekile ezinokuhlanganiswa okuqhubekayo

Ake siqale ukuhlanganisa uhlu lwethu lwezinyathelo ze-CI. Ngokuvamile ungaqala lesi sinyathelo ngokubheka inguqulo yakamuva yekhodi esendaweni yenqolobane ekude, kodwa asikabi nayo inqolobane yasendaweni, ngakho-ke siyihlanganisa ukusuka kwesikude kunalokho.

️ Umsebenzi: buyekeza inqolobane yendawo, dala igatsha kusuka master, qala ukusebenza

  1. Khipha inqolobane yesifundo kusuka <URL рСпозитория>.
  2. Gijima npm install kumkhombandlela wenqolobane yezifundo; Siyidinga ukufaka i-Jest, esiyisebenzisela ukwenza izivivinyo.
  3. Dala igatsha futhi uliqambe feature. Shintshela kulolu chungechunge.
  4. Engeza ikhodi yokuhlola ku ci.test.js phakathi kwamazwana engicela ukuthi ngenze lokhu.

    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. Engeza umbhalo ngezinyathelo ezi-4 zokuqala efayeleni 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.  

    ΠšΠΎΠΌΠ°Π½Π΄Ρ‹

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

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

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

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

Dala ukuzibophezela egatsheni elisha, yakha futhi uhlole endaweni

Sizosetha ukuhlolwa okuzokwenziwa ngaphambi kokwenza, bese sifaka ikhodi.

Izimo ezijwayelekile lapho ukuhlola kusebenza ngokuzenzakalelayo

  • Endaweni:
    • Ngokuqhubekayo noma ekuphenduleni izinguquko ezifanele zamakhodi;
    • Ekulondolozeni (ngolimi olutolikiwe noma oluhlanganiswe nge-JIT);
    • Ngesikhathi sokuhlanganiswa (lapho ukuhlanganiswa kuyadingeka);
    • Ekuzinikeleni;
    • Lapho ushicilela endaweni yokugcina okwabelwana ngayo.

  • Kuseva yokwakha noma indawo yokwakha:
    • Lapho ikhodi ishicilelwa egatsheni/inqolobane yomuntu siqu.
    • Ikhodi kulolu chungechunge iyahlolwa.
    • Umphumela ongaba khona wokuhlanganisa uyahlolwa (ngokuvamile nge master).
    • Njengesigaba sokuhlanganisa esiqhubekayo/ipayipi lokulethwa okuqhubekayo

Ngokuvamile, lapho i-test suite igijima ngokushesha, yilapho ungakwazi ukukwazi ukuyiqhuba kaningi. Ukusatshalaliswa kwesiteji okujwayelekile kungase kubukeke kanje.

  • Ukuhlolwa kweyunithi okusheshayo - ngesikhathi sokwakha, epayipini le-CI
  • Ukuhlolwa kweyunithi okunensayo, ingxenye esheshayo nokuhlolwa kokuhlanganiswa - ekuzinikeleni, emgqeni we-CI
  • Ukuhlolwa kwengxenye ehamba kancane nokuhlanganiswa - epayipini le-CI
  • Ukuhlolwa kokuphepha, ukuhlolwa komthwalo nokunye ukuhlola okudla isikhathi noma okumba eqolo - kumapayipi e-CI/CD, kodwa kuphela kumamodi/izigaba/amapayipi athile okwakha, isibonelo, lapho ulungiselela ikhandidethi lokukhishwa noma lapho usebenza mathupha.

️Umsebenzi

Ngiphakamisa ukuthi wenze izivivinyo mathupha kuqala usebenzisa umyalo npm test. Ngemuva kwalokho, ake sengeze i-git hook ukuze senze izivivinyo zethu ngokuzibophezela. Kukhona okukodwa okubanjwayo: Izingwegwe ze-Git azithathwa njengengxenye yendawo yokugcina impahla ngakho-ke azikwazi ukuqanjwa kusuka ku-GitHub kanye nezinye izinto zokufunda. Ukufaka i-hook udinga ukugijima install_hook.sh noma kopisha ifayela repo/hooks/pre-commit kunkomba yendawo .git/hooks/.
Uma uzibophezela, uzobona ukuthi ukuhlolwa kuyenziwa futhi bayahlola ukuze babone ukuthi amagama angukhiye athile akhona yini ohlwini.

  1. Yenza izivivinyo mathupha ngokusebenzisa umyalo npm test kufolda yenqolobane yesifundo sakho. Qinisekisa ukuthi ukuhlola sekuqediwe.
  2. Setha ihuku lokuzibophezela (ukuzibophezela kwangaphambili) ngokugijima install_hook.sh.
  3. Nikeza izinguquko zakho kunqolobane yakho yasendaweni.
  4. Qinisekisa ukuthi ukuhlolwa kwenziwa ngaphambi kokuzibophezela.

Indawo yakho yokugcina izinto kufanele ibukeke kanje ngemva kokulandela lezi zinyathelo.
Izimo ezijwayelekile ezinokuhlanganiswa okuqhubekayo

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹

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

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

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

Shicilela ikhodi endaweni yokugcina eyihlane noma egatsheni elikude

Uma sebeqedile ukusebenza endaweni, onjiniyela ngokuvamile benza ikhodi yabo itholakale esidlangalaleni ukuze igcine ihlanganiswe nomphakathi. Nge-GitHub, lokhu ngokuvamile kufinyelelwa ngokushicilela umsebenzi kukhophi yomuntu siqu yendawo yokugcina (imfoloko yomuntu siqu) noma igatsha lomuntu siqu.

  • Ngezimfoloko, umthuthukisi uhlanganisa inqolobane eyabelwe ekude, enze ikhophi yayo yomuntu siqu ekude, eyaziwa nangokuthi imfoloko. Bese ihlanganisa le nqolobane yomuntu siqu ukuze isebenze nayo endaweni. Lapho umsebenzi usuqediwe futhi kwenziwa izibophezelo, uziphusha emfolokoni yakhe, lapho zitholakala khona kwabanye futhi zingahlanganiswa endaweni yokugcina abantu. Le ndlela ivame ukusetshenziswa kumaphrojekthi womthombo ovulekile ku-GitHub. Ibuye isetshenziswe esifundweni sami esithuthukile [Umsebenzi Wethimba kanye ne-CI nge-Git] (http://devops.redpill.solutions/).
  • Enye indlela iwukusebenzisa inqolobane eyodwa kuphela ekude nokubala igatsha kuphela master inqolobane eyabelwe "evikelwe". Kulesi simo, onjiniyela ngabanye bashicilela amakhodi abo emagatsheni ekhosombe elikude ukuze abanye bakwazi ukubheka le khodi, uma yonke into ihlelekile, bayihlanganise nayo. master inqolobane eyabelwe.

Kulesi sifundo, sizosebenzisa ukugeleza komsebenzi okusebenzisa amagatsha.

Asishicilele ikhodi yethu.

️Umsebenzi

  • Shicilela izinguquko egatsheni elikude elinegama elifanayo nelegatsha lakho elisebenzayo

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹

git push --set-upstream origin feature

Dala isicelo sokudonsa

Dala isicelo sokudonsa ngesihloko Izinyathelo zokubuyekeza. Faka feature njenge "head branch" kanye master njengokuthi "igatsha lesisekelo".

Qiniseka ukuthi uyifakile master kweyakhe foloko inqolobane "Njengegatsha eliyisisekelo", ngeke ngiphendule izicelo zoshintsho endaweni yokugcina izinto zesifundo.

Ngolimi lwe-GitHub, "igatsha eliyisisekelo" igatsha osekela kulo umsebenzi wakho, futhi "igatsha eliyinhloko" igatsha eliqukethe izinguquko ezihlongozwayo.

Xoxa ngezinguquko, engeza ukuzibophezela okusha njengoba ingxoxo iqhubeka

Donsela isicelo(PR)

Donsela isicelo(PR) kuyindlela yokuxoxa nokubhala ikhodi, kanye nokwenza ukubuyekezwa kwekhodi. Izicelo zokudonsa ziqanjwe ngendlela evamile yokuhlanganisa izinguquko zomuntu ngamunye kukhodi iyonke. Ngokuvamile, umuntu uhlanganisa inqolobane esemthethweni ekude yephrojekthi futhi asebenze ngekhodi endaweni. Ngemuva kwalokhu, ubeka ikhodi endaweni yakhe yokugcina ekude futhi acele labo ababhekele inqolobane esemthethweni ukuthi bayithathe(Donsa) ikhodi yayo kumakhosombe wendawo, lapho bebuyekeza khona futhi mhlawumbe bahlanganise (hlanganisa) yakhe. Lo mqondo waziwa nangamanye amagama, isibonelo, hlanganisa isicelo.

Awudingi ukusebenzisa isici sesicelo sokudonsa se-GitHub noma amapulatifomu afanayo. Amaqembu okuthuthukisa angase asebenzise ezinye izindlela zokuxhumana, okuhlanganisa ukuxhumana ubuso nobuso, izingcingo zezwi, noma i-imeyili, kodwa kusenezizathu eziningi zokusebenzisa izicelo zokudonsa ngendlela yenkundla. Nazi ezinye zazo:

  • izingxoxo ezihleliwe ezihlobene nezinguquko ezithile zekhodi;
  • njengendawo yokubuka impendulo mayelana nomsebenzi osaqhubekayo kubo bobabili abahlola ngokuzenzakalelayo kanye nontanga;
  • ukwenziwa ngokusemthethweni kokubuyekezwa kwekhodi;
  • ukuze kamuva ukwazi ukuthola izizathu nokucatshangelwa ngemuva kwalokhu noma leyo ngxenye yekhodi.

Ngokuvamile udala isicelo sokudonsa lapho udinga ukuxoxa ngokuthile noma uthole impendulo. Isibonelo, uma usebenza ngesici esingase sisetshenziswe ngezindlela ezingaphezu kweyodwa, ungakha isicelo sokudonsa ngaphambi kokubhala umugqa wokuqala wekhodi ukuze wabelane ngemibono yakho futhi uxoxe ngezinhlelo zakho nabahlanganyeli bakho. Uma umsebenzi ulula, isicelo sokudonsa sivulwa lapho okuthile sekwenziwe, kuzibophezele, futhi kungaxoxwa ngakho. Kwezinye izimo, ungase ufune ukuvula i-PR kuphela ngezizathu zokulawula ikhwalithi: ukwenza izivivinyo ezizenzakalelayo noma ukuqalisa ukubuyekezwa kwekhodi. Noma ngabe yini oyinqumayo, ungakhohlwa @sho abantu abafuna ukuvunyelwa kwabo esicelweni sakho sokudonsa.

Ngokuvamile, lapho udala i-PR, wenza okulandelayo.

  • Khomba ukuthi yini ohlongoza ukuyishintsha futhi kuphi.
  • Bhala incazelo echaza inhloso yezinguquko. Ungase ufune:
    • engeza noma yini ebalulekile engabonakali ekhodini, noma okuthile okuwusizo ekuqondeni umongo, njengokuthi #bugs kanye nezinombolo zokuzibophezela ezifanele;
    • @mention noma ubani ofuna ukuqala ukusebenza naye, noma unga @mention emazwaneni kamuva;
    • cela ozakwabo ukuthi basize ngokuthile noma bahlole okuthile okuqondile.

Uma usuvule i-PR, ukuhlola okulungiselelwe ukuthi kusebenze ezimeni ezinjalo kuyenziwa. Esimweni sethu, lokhu kuzoba isethi efanayo yokuhlola esiye sagijima endaweni, kodwa kuphrojekthi yangempela kungase kube nokuhlolwa nokuhlolwa okwengeziwe.

Sicela ulinde ngenkathi ukuhlolwa kuqedwa. Ungabona isimo sokuhlolwa ngezansi kwengxoxo ye-PR kusixhumi esibonakalayo se-GitHub. Qhubeka uma ukuhlolwa sekuqediwe.

️ Engeza inothi mayelana nokungahleliwe kohlu lwezinyathelo ze-CI

Uhlu olusetshenziswe kulesi sifundo alunasizathu futhi luzimele, kufanele sengeze inothi ngalokhu.

️ Umsebenzi: dala isicelo sokudonsa kulawa mazwana

  1. Shintshela egatsheni master.
  2. Dala igatsha elinegama bugfix.
  3. Engeza umbhalo wenothi ekupheleni kwefayela 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 izinguquko.
  5. Shicilela uchungechunge bugfix endaweni yokugcina ekude.
  6. Dala isicelo sokudonsa esiqanjwe Ukwengeza ukuphawula ngenhloko yegatsha bugfix kanye negatsha lesisekelomaster.

Qiniseka ukuthi uyifakile master kweyakhe foloko inqolobane "Njengegatsha eliyisisekelo", ngeke ngiphendule izicelo zoshintsho endaweni yokugcina izinto zesifundo.

Yile ndlela inqolobane yakho okufanele ibukeke ngayo.
Izimo ezijwayelekile ezinokuhlanganiswa okuqhubekayo

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹

# ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ Π½Π° Π²Π΅Ρ‚ΠΊΡƒ 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 ΠΊΠ°ΠΊ описано Π²Ρ‹ΡˆΠ΅

Vumela isicelo sokudonsa "Ukwengeza ukuphawula"

️Umsebenzi

  1. Dala isicelo sokudonsa.
  2. Chofoza okuthi "Hlanganisa isicelo sokudonsa".
  3. Chofoza "Qinisekisa ukuhlanganisa".
  4. Chofoza okuthi "Susa igatsha", asisakudingi.

Lona umdwebo wokuzibophezela ngemva kokuhlanganisa.
Izimo ezijwayelekile ezinokuhlanganiswa okuqhubekayo

️ Qhubeka usebenza futhi wengeza izivivinyo

Ukubambisana esicelweni sokudonsa kuvame ukuholela emsebenzini owengeziwe. Ngokuvamile lokhu kuwumphumela wokubuyekezwa kwekhodi noma ingxoxo, kodwa esifundweni sethu sizobonisa lokhu ngokungeza izinto ezintsha ohlwini lwethu lwezinyathelo ze-CI.

Ukuhlanganiswa okuqhubekayo kuvame ukubandakanya ukuhlolwa okuthile. Izidingo zokufakwa kokuhlolwa ziyahlukahluka futhi ngokuvamile zitholakala kudokhumenti ebizwa ngokuthile "njengemihlahlandlela yomnikelo". Sizokugcina kulula futhi sengeze ukuhlolwa komugqa ngamunye ohlwini lwethu lokuhlola.

Lapho wenza imisebenzi ezokwenziwa, zama ukwenza izivivinyo kuqala. Uma ufake kahle pre-commit hook ngaphambili, ukuhlolwa okusha okungeziwe kuzokwenziwa, kuzohluleka, futhi akukho lutho oluzokwenziwa. Qaphela ukuthi le yindlela esazi ngayo ukuthi izivivinyo zethu empeleni zihlola okuthile. Kuyathakazelisa ukuthi uma siqale ngekhodi ngaphambi kokuhlolwa, ukuphumelela izivivinyo kungase kusho ukuthi ikhodi isebenze njengoba bekulindelekile, noma ukuthi ukuhlolwa bekungahloli lutho. Ngaphezu kwalokho, ukube asizange sizibhale izivivinyo kwasekuqaleni, ngabe sesizikhohliwe ngokuphelele, ngoba akukho obekuzosikhumbuza ngakho.

I-Test Driven Development (TDD)

I-TDD incoma ukubhala izivivinyo ngaphambi kwekhodi. Ukugeleza komsebenzi okuvamile usebenzisa i-TDD kubukeka kanje.

  1. Engeza isivivinyo.
  2. Yenza zonke izivivinyo futhi uqinisekise ukuthi uhlolo olusha luyahluleka.
  3. Bhala ikhodi.
  4. Yenza izivivinyo, qiniseka ukuthi zonke izivivinyo ziyaphumelela.
  5. Yenza kabusha ikhodi yakho.
  6. Phinda.

Ngenxa yokuthi imiphumela yokuhlolwa okungaphumeleli ngokuvamile iboniswa ngokubomvu, futhi leyo ephumelele ngokuvamile iboniswa ngohlaza, umjikelezo waziwa nangokuthi i-red-green-refactor.

️Umsebenzi

Okokuqala, zama ukwenza izivivinyo futhi uzivumele zehluleke, bese wengeza futhi uhambise umbhalo wohlu lwezinyathelo ze-CI ngokwalo. Uzobona ukuthi izivivinyo ziyadlula ("green").
Bese ushicilela ikhodi entsha endaweni yokugcina ekude futhi ubuke izivivinyo zisebenza kusixhumi esibonakalayo se-GitHub ngezansi kwengxoxo yesicelo sokudonsa kanye nokubuyekezwa kwesimo se-PR.

  1. Shintshela egatsheni feature.
  2. Engeza lezi zivivinyo ku ci.test.js ngemva kocingo lokugcina 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 izivivinyo. Uma pre-commit i-hook ifakiwe, umzamo wokuzibophezela uzohluleka.
  4. Bese wengeza 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 futhi wenze izinguquko endaweni.
  6. Thumela izinguquko egatsheni feature.

Manje kufanele ube nento efana nalena
Izimo ezijwayelekile ezinokuhlanganiswa okuqhubekayo

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹


# ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π° Π²Π΅Ρ‚ΠΊΡƒ 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

Hlanganisa ukungqubuzana

Iya kokuthi Shintsha Isicelo Izinyathelo zokubuyekeza.

Nakuba singenzanga lutho olungalungile futhi nokuhlolwa kwekhodi yethu kwaphumelela, asikwazi ukuhlanganisa igatsha feature ΠΈ master. Kungenxa yokuthi omunye uchungechunge bugfix yahlanganiswa ne master ngenkathi sisasebenza kule PR.
Lokhu kudala isimo lapho igatsha elikude master inenguqulo entsha kunalena esisekelwe kuyo igatsha feature. Ngenxa yalokhu asikwazi nje ukuhlehlisa INHLOKO master kuze kube sekupheleni kwentambo feature. Kulesi simo, sidinga ukuhlanganisa noma ukufaka izicelo feature hlehlisa master. I-GitHub ingakwazi ukwenza ukuhlanganisa okuzenzakalelayo uma kungekho ukungqubuzana. Maye, esimweni sethu, womabili amagatsha anezinguquko eziqhudelanayo efayeleni ci.md. Lesi simo saziwa njengengxabano yokuhlanganisa, futhi sidinga ukusixazulula mathupha.

Hlanganisa noma hlehlisa

Hlanganisa

  • Idala isibopho esingeziwe sokuhlanganisa futhi ilondoloza umlando womsebenzi.
    • Ilondoloza imisebenzi yoqobo yamagatsha ngezitembu zesikhathi zangempela nababhali.
    • Ilondoloza i-SHA yezibopho futhi ixhuma kuzo ezingxoxweni zesicelo soshintsho.
  • Idinga ukuxazululwa kwengxabano ngesikhathi esisodwa.
  • Yenza indaba ingabi yomugqa.
    • Indaba ingaba nzima ukuyifunda ngenxa yenani elikhulu lamagatsha (okukhumbuza ikhebula le-IDE).
    • Yenza ukulungisa iphutha okuzenzakalelayo kube nzima kakhulu, isb. git bisect awusizo kangako - izothola kuphela isivumelwano sokuhlanganisa.

Phinda ukhiphe

  • Ukudlala kabusha kwenziwa kusukela egatsheni lamanje phezu kwegatsha eliyisisekelo ngokulandelana.
    • Ukuzibophezela okusha nama-SHA amasha kuyakhiqizwa, okubangela ukuthi ukuzibophezela ku-GitHub kufane nezicelo zangempela zokudonsa, kodwa hhayi amazwana ahambisanayo.
    • Ukuzibophezela kungenziwa kabusha futhi kulungiswe ohlelweni, noma kuhlanganiswe kube kokukodwa.
  • Izingxabano eziningi zingadinga ukuxazululwa.
  • Ikuvumela ukuthi ugcine indaba yomugqa.
    • Indaba ingase ibe lula ukuyifunda inqobo nje uma ingende kakhulu ngaphandle kwesizathu esizwakalayo.
    • Ukulungisa iphutha okuzenzakalelayo nokuxazulula inkinga kulula kancane: kwenza kwenzeke git bisect, ingenza ukubuyisela emuva okuzenzakalelayo kucace futhi kubikezelwe.
  • Idinga ukushicilela igatsha elinezibopho ezifudukayo ezinefulegi --force lapho isetshenziswa nezicelo zokudonsa.

Ngokuvamile, amaqembu avuma ukusebenzisa isu elifanayo lapho edinga ukuhlanganisa izinguquko. Lokhu kungaba ukuhlanganisa "okumsulwa" noma ukuzibophezela "okumsulwa" phezulu, noma okuthile phakathi, njengokwenza isibopho phezulu ngokuhlanganyela(git rebase -i) endaweni yamagatsha angashicilelwe endaweni yokugcina umphakathi, kodwa ahlanganiswe amagatsha "asesidlangalaleni".

Lapha sizosebenzisa ukuhlanganisa.

️Umsebenzi

  1. Qiniseka ukuthi ikhodi isegatsheni lasendaweni master kubuyekezwe kusuka endaweni yokugcina eyihlane.
  2. Shintshela egatsheni feature.
  3. Qala ukuhlanganisa negatsha master. Ukuhlanganisa ukungqubuzana ngenxa yezinguquko ezincintisanayo ku- ci.md.
  4. Xazulula ukungqubuzana ukuze kokubili uhlu lwethu lwezinyathelo ze-CI nenothi elimayelana nakho kuhlale embhalweni.
  5. Shicilela isivumelwano sokuhlanganisa egatsheni elikude feature.
  6. Hlola isimo sesicelo sokudonsa ku-GitHub UI bese ulinda kuze kube yilapho ukuhlanganisa sekuxazululiwe.

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹

# Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Π² локальноС Π²Π΅Ρ‚ΠΊΠ΅ `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 omuhle!

Usuqedile ngohlu futhi manje udinga ukugunyaza isicelo sokudonsa master.

️ Umsebenzi: Vuma isicelo sokudonsa "Ukubuyekezwa kwezinyathelo"

  1. Vula isicelo sokudonsa.
  2. Chofoza okuthi "Hlanganisa isicelo sokudonsa".
  3. Chofoza "Qinisekisa ukuhlanganisa".
  4. Chofoza okuthi "Susa igatsha" njengoba singasalidingi.

Lena inqolobane yakho okwamanje
Izimo ezijwayelekile ezinokuhlanganiswa okuqhubekayo

Iphutha lomkhiqizo

Kuthiwa β€œukuhlola kungasetshenziselwa ukubonisa ukuba khona kwamaphutha, kodwa ungalokothi ubonise ukungabikho kwawo.” Noma sibe nezivivinyo futhi azizange zisibonise amaphutha, iphutha elicashile lingene ekukhiqizweni.

Esimweni esinjengalesi, sidinga ukunakekela:

  • yini etshalwe ekukhiqizeni;
  • ikhodi emgqeni master ngephutha, lapho onjiniyela bangaqala khona umsebenzi omusha.

Ingabe kufanele ngiyibuyisele emuva noma ngiyilungise enguqulweni elandelayo?

Ukuhlehla kuyinqubo yokuthumela inguqulo yangaphambili eyaziwayo enhle ekukhiqizeni nasekubuyiseleni imisebenzi equkethe iphutha. "Ukulungisa phambili" kungukungezwa kokulungiswa kwe master kanye nokusebenzisa inguqulo entsha ngokushesha okukhulu. Ngenxa yokuthi ama-API nezikimu zesizindalwazi ziyashintsha njengoba ikhodi idluliselwa ekukhiqizweni, ngokulethwa okuqhubekayo nokufakwa kahle kokuhlolwa, ukuhlehla ngokuvamile kunzima kakhulu futhi kuyingozi kunokuyilungisa enguqulweni elandelayo.

Njengoba ukuhlehla akuthwali ingozi kithi, sizohamba lo mzila, ngoba uyasivumela

  • lungisa iphutha kumkhiqizo ngokushesha ngangokunokwenzeka;
  • faka ikhodi master ngokushesha ilungele ukuqala umsebenzi omusha.

️Umsebenzi

  1. Shintshela egatsheni master endaweni.
  2. Buyekeza inqolobane yasendaweni kusuka endaweni yokugcina ekude.
  3. Buyisela isivumelwano sokuhlanganisa se-PR Izinyathelo zokubuyekeza Π² master.
  4. Shicilela izinguquko kwikhosombe elikude.

Lona umlando wenqolobane enesibopho esihlanganisiwe esibuyiselwe
Izimo ezijwayelekile ezinokuhlanganiswa okuqhubekayo

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹

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

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

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

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

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

️ Zihlole

Qiniseka ukuthi ci.md awusaqukethe umbhalo othi "sneaky bug" ngemva kokubuyisela isivumelwano sokuhlanganisa.

Lungisa uhlu lwezinyathelo ze-CI futhi ulubuyisele kokuthi okuyinhloko

Sikubuyisele ngokuphelele isivumelwano sokuhlanganisa segatsha. feature. Izindaba ezinhle ukuthi manje asinalo iphutha kulo master. Izindaba ezimbi ukuthi uhlu lwethu oluyigugu lwezinyathelo zokuhlanganisa eziqhubekayo nalo alusekho. Ngakho-ke, ngokufanelekile, sidinga ukusebenzisa ukulungiswa kokusebenza kusuka feature bese ubabuyisela ku master kanye nokulungiswa.

Singabhekana nenkinga ngezindlela ezahlukene:

  • buyisela isibopho esihlehlisa ukuhlanganisa feature с master;
  • ukuthutha kuzibophezela kusukela kwasekuqaleni feature.

Amaqembu ahlukene okuthuthukisa asebenzisa izindlela ezihlukene kulesi simo, kodwa sizohambisa izibopho eziwusizo egatsheni elihlukile futhi sidale isicelo esihlukile sokudonsa saleli gatsha elisha.

️Umsebenzi

  1. Dala intambo ebizwa feature-fix bese ushintshela kuyo.
  2. Thutha zonke izibophezelo kusuka egatsheni langaphambili feature kuchungechunge olusha. Xazulula izingxabano zokuhlanganisa ezenzeke ngesikhathi sokufuduka.

    Izimo ezijwayelekile ezinokuhlanganiswa okuqhubekayo

  3. Engeza ukuhlolwa kokuhlehla ku ci.test.js:

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

  4. Yenza izivivinyo endaweni ukuze wenze isiqiniseko sokuthi awehluleki.
  5. Susa umbhalo othi "ngesiphazamisi esikhohlisayo" phakathi ci.md.
  6. Engeza izinguquko zokuhlola kanye nezinguquko zohlu lwezinyathelo kunkomba futhi uzibophezele.
  7. Shicilela igatsha endaweni yokugcina ekude.

Kufanele ugcine ngokufana nalokhu:
Izimo ezijwayelekile ezinokuhlanganiswa okuqhubekayo

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹

# Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π²Π΅Ρ‚ΠΊΡƒ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ 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

Dala isicelo sokudonsa.

Dala isicelo sokudonsa ngesihloko Ukulungisa isici. Faka feature-fix njenge "head branch" kanye master njengokuthi "igatsha lesisekelo".
Sicela ulinde ngenkathi ukuhlola kuqeda. Ungabona isimo sokuhlolwa ezansi kwengxoxo ye-PR.

Qiniseka ukuthi uyifakile master kweyakhe foloko inqolobane "Njengegatsha eliyisisekelo", ngeke ngiphendule izicelo zoshintsho endaweni yokugcina izinto zesifundo.

Gunyaza isicelo sokudonsa "Ukulungisa isici"

Siyabonga ngokulungisa! Sicela ugunyaze izinguquko ku master kusuka kusicelo sokudonsa.

️Umsebenzi

  1. Chofoza okuthi "Hlanganisa isicelo sokudonsa".
  2. Chofoza "Qinisekisa ukuhlanganisa".
  3. Chofoza okuthi "Susa igatsha" njengoba singasalidingi.

Yilokhu okufanele ube nakho njengamanje.
Izimo ezijwayelekile ezinokuhlanganiswa okuqhubekayo

Siyakuhalalisela!

Uqedele zonke izinyathelo abantu abajwayele ukuzithatha ngesikhathi sokuhlanganiswa okuqhubekayo.

Uma ubona izinkinga ngesifundo noma wazi ukuthi ungayithuthukisa kanjani, sicela udale inkinga kuyo izinqolobane ngezinto zokufunda. Lesi sifundo siphinde sibe nakho inguqulo interactive usebenzisa i-GitHub Learning Lab njengenkundla.

Source: www.habr.com

Engeza amazwana