Dab tsi ntawm cov kev xeem automated siv nyob rau hauv CI, thiab teb rau cov kev nqis tes ua yog dab tsi?
Dab tsi yog rub thov thiab thaum twg lawv xav tau?
Test Driven Development (TDD) yog dab tsi thiab nws cuam tshuam li cas rau CI?
Kuv puas yuav tsum sib koom ua ke lossis rov pib qhov kev hloov pauv?
Yob rov qab los yog kho nyob rau hauv lub tom ntej version?
Thaum xub thawj kuv tau txhais tej yam xws li "rub thov" txhua qhov chaw, tab sis vim li ntawd kuv tau txiav txim siab rov qab cov lus ua lus Askiv hauv qee qhov chaw kom txo qis qhov kev npau taws hauv cov ntawv nyeem. Qee zaum kuv yuav siv "programmer surzhik" zoo li cov lus qhia zoo "coj" qhov twg tib neeg siv nws thaum ua haujlwm.
Kev sib koom ua ke tas mus li yog dab tsi?
Kev koom ua ke tsis tu ncua, lossis CI, yog ib qho kev xyaum ua haujlwm uas txhua tus tswvcuab koom ua ke lawv cov cai rau hauv ib qho chaw cia khoom tsawg kawg ib hnub ib zaug, thiab cov lej tshwm sim yuav tsum tau tsim yam tsis muaj qhov yuam kev.
Muaj kev tsis pom zoo txog lo lus no
Lub ntsiab lus ntawm kev sib cav yog qhov zaus ntawm kev sib koom ua ke. Qee qhov sib cav tias kev sib koom ua ke code tsuas yog ib zaug ib hnub tsis txaus los ua kom sib koom ua ke tsis tu ncua. Ib qho piv txwv yog muab los ntawm ib pab neeg uas txhua tus siv cov cai tshiab thaum sawv ntxov thiab sib koom ua ke ib zaug thaum yav tsaus ntuj. Thaum qhov no yog qhov kev tawm tsam tsim nyog, nws feem ntau ntseeg tias kev txhais ib zaug ib hnub yog qhov tsim nyog siv tau, tshwj xeeb, thiab haum rau pab pawg sib txawv.
Lwm qhov kev tsis pom zoo yog tias C ++ tsis yog hom lus nkaus xwb siv hauv kev txhim kho, thiab tsuas yog xav tau kev sib dhos tsis raug yuam kev raws li txoj hauv kev siv tau tsis muaj zog. Qee qhov kev xeem (piv txwv li, chav ntsuas ntsuas hauv zos) yuav tsum ua kom tiav. Tam sim no, lub zej zog tab tom hloov mus ua qhov yuav tsum tau ua, thiab yav tom ntej "tsim + kev xeem" tej zaum yuav dhau los ua kev coj ua, yog tias nws tsis tau ua.
Kev koom ua ke tsis tu ncua sib txawv los ntawm kev xa khoom tsis tu ncua (Kev xa khoom tas mus li, CD) hauv qhov uas nws tsis tas yuav muaj tus neeg sib tw tso tawm tom qab txhua lub voj voog kev koom ua ke.
Nco ntsoov tias koj muaj Git tus thov kev teeb tsa uas txhawb cov kab hais kom ua
Yog tias koj tseem tsis tau muaj tus neeg siv khoom Git uas txhawb cov kab hais kom ua, koj tuaj yeem nrhiav cov lus qhia kev teeb tsa no.
Npaj lub repository
Koj yuav tsum tau tsim ib daim qauv ntawm tus kheej (fork) template repository nrog code rau chav kawm ntawm GitHub. Wb pom zoo hu rau tus kheej daim ntawv no chav kawm repository.
Ua tiav? Yog tias koj tsis tau hloov qhov kev teeb tsa ua ntej, koj qhov chaw khaws cia cov chav kawm feem ntau hu ua continuous-integration-team-scenarios-students, nws nyob hauv koj tus account GitHub thiab qhov URL zoo li no
Koj tuaj yeem siv GitHub lub peev xwm los ua Markdown kom pom lub xeev tam sim no ntawm cov npe peb tab tom sau ntawm no
https://github.com/<your GitHub user name>/continuous-integration-team-scenarios-students/blob/master/ci.md
Hais txog cov lus teb
Txawm hais tias txoj hauv kev zoo tshaj los ua kom tiav cov chav kawm no yog ua koj tus kheej, tej zaum koj yuav muaj teeb meem.
Yog tias koj xav tias koj tsis nkag siab tias yuav ua li cas thiab tsis tuaj yeem txuas ntxiv, koj tuaj yeem saib hauv xov solution, uas yog nyob rau hauv koj pib repository.
Thov tsis txhob sib koom ua ke solution Π² master thaum kawm. Koj tuaj yeem siv ceg no los txiav txim seb yuav ua li cas, lossis sib piv koj cov cai nrog tus kws sau ntawv, siv txhua lub peev xwm uas Git muab rau peb. Yog tias koj poob tag, koj tuaj yeem hloov koj ceg master ntawm ib ceg solution thiab tom qab ntawd rov pib koj daim ntawv teev npe ua haujlwm mus rau cov kauj ruam uas koj xav tau.
Tsuas yog siv qhov no yog tias koj xav tau tiag tiag
Ua koj tus lej
git add .
git commit -m "Backing up my work"
Cov lus txib no
hloov npe master Π² master-backup;
hloov npe solution Π² master;
checkout mus rau ib ceg tshiab master thiab rov sau cov ntsiab lus ntawm daim ntawv teev npe ua haujlwm;
Tsim ib ceg "kev daws teeb meem" los ntawm "tus tswv" (uas siv los ua "kev daws teeb meem") yog tias koj xav tau ib ceg "kev daws teeb meem" yav tom ntej.
Tom qab cov kauj ruam no koj tuaj yeem siv git log master txhawm rau txheeb xyuas qhov koj xav tau.
Koj tuaj yeem rov pib koj daim ntawv teev npe ua haujlwm rau qhov kev cog lus zoo li no:
git reset --hard <the SHA you need>
Yog tias koj txaus siab rau qhov tshwm sim, ntawm qee lub sijhawm koj yuav tsum tau tshaj tawm koj cov ntaub ntawv ntawm qhov chaw cia khoom mus rau qhov chaw cia khoom nyob deb. Tsis txhob hnov ββββqab qhia meej meej txog cov ceg ntoo nyob deb thaum koj ua qhov no.
git push --force origin master
Thov nco ntsoov tias peb siv git push --force. Nws tsis zoo li koj yuav xav ua qhov no ntau zaus, tab sis peb muaj qhov xwm txheej tshwj xeeb ntawm no nrog ib tus neeg siv khoom khaws cia uas, ntxiv rau, nkag siab tias nws ua dab tsi.
Pib ua haujlwm
Cia peb pib sau peb cov npe ntawm CI cov kauj ruam. Feem ntau koj yuav pib cov kauj ruam no los ntawm kev txheeb xyuas qhov tseeb version ntawm cov cai los ntawm cov chaw cia khoom nyob deb, tab sis peb tsis muaj lub chaw khaws cia hauv zos, yog li peb clone nws los ntawm cov chaw taws teeb hloov pauv.
οΈ Ua Haujlwm: hloov kho lub chaw cia khoom hauv zos, tsim ib ceg los ntawm master, pib ua haujlwm
Clone cov chav kawm repository los ntawm <URL ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ>.
Khiav npm install nyob rau hauv cov chav kawm repository directory; Peb xav tau nws los nruab Jest, uas peb siv los khiav kev xeem.
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.
Xyuas kom tseeb tias cov kev ntsuam xyuas tau ua ua ntej ua tiav.
Koj qhov chaw khaws cia yuav tsum zoo li qhov no tom qab ua raws cov kauj ruam no.
Lus txib
# Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ pre-commit hook Π²ΡΠΏΠΎΠ»Π½ΠΈΠ² install_hook.sh.
# ΠΠ°ΠΊΠΎΠΌΠΌΠΈΡΡΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ "Add first CI steps" Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈ ΠΊΠΎΠΌΠΌΠΈΡΠ΅.
git add ci.md ci.test.js
git commit -m "Add first CI steps"
# Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΡΠ΅ΡΡΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠΌ.
Tshaj tawm cov lej rau ib lub chaw khaws cia tej thaj chaw deb lossis chaw nyob deb
Thaum lawv ua tiav hauv zos, cov neeg tsim khoom feem ntau ua lawv cov cai rau pej xeem kom nws thiaj li tuaj yeem koom nrog pej xeem. Nrog GitHub, qhov no feem ntau ua tiav los ntawm kev tshaj tawm txoj haujlwm rau ib tus kheej daim ntawv theej ntawm lub chaw khaws cia (tus kheej diav rawg) lossis ib ceg ntawm tus kheej.
Nrog rab rawg, tus tsim tawm clones cov chaw taws teeb sib koom ua ke, tsim cov ntawv luam ntawm tus kheej ntawm nws, tseem hu ua rab rawg. Nws ces clones no tus kheej repository ua hauj lwm nrog hauv zos. Thaum ua tiav cov haujlwm tiav thiab cov lus cog tseg, nws thawb lawv mus rau hauv nws rab rawg, qhov chaw uas lawv muaj rau lwm tus thiab tuaj yeem muab tso rau hauv qhov chaw khaws cia. Txoj hauv kev no feem ntau siv rau hauv cov haujlwm qhib ntawm GitHub. Nws kuj tseem siv rau hauv kuv chav kawm qib siab [Team Ua Haujlwm thiab CI nrog Git] (http://devops.redpill.solutions/).
Lwm txoj hauv kev yog siv tsuas yog ib qho chaw cia khoom nyob deb thiab tsuas suav cov ceg master sib koom repository "tiv thaiv". Hauv qhov xwm txheej no, tus neeg tsim khoom luam tawm lawv cov cai rau cov ceg ntawm cov chaw cia khoom nyob deb kom lwm tus tuaj yeem saib cov cai no, yog tias txhua yam nyob rau hauv kev txiav txim, sib koom ua ke nrog master sib koom repository.
Hauv chav kawm tshwj xeeb no, peb yuav siv cov kev ua haujlwm uas siv cov ceg ntoo.
Cia peb tshaj tawm peb cov cai.
οΈ Kev ua haujlwm
Tshaj tawm cov kev hloov pauv mus rau ib ceg nyob deb nroog nrog lub npe tib yam li koj ceg ua haujlwm
Lus txib
git push --set-upstream origin feature
Tsim ib qho kev thov rub
Tsim ib daim ntawv thov rub nrog lub npe Cov kauj ruam tshuaj xyuas... Nruab feature zoo li "head ceg" thiab master zoo li "base ceg".
Xyuas kom tseeb tias koj tau nruab master hauv nws fork lub repository Raws li "hauv paus ceg", kuv yuav tsis teb rau qhov kev thov rau kev hloov pauv cov ntaub ntawv khaws cia hauv chav kawm.
> **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/).
Muab cov kev hloov pauv.
Tshaj tawm xov bugfix mus rau ib lub chaw khaws cia tej thaj chaw deb.
Tsim ib daim ntawv thov rub npe Ntxiv ib nqe lus nrog lub taub hau ceg bugfix thiab lub hauv paus cegmaster.
Xyuas kom tseeb tias koj tau nruab master hauv nws fork lub repository Raws li "hauv paus ceg", kuv yuav tsis teb rau qhov kev thov rau kev hloov pauv cov ntaub ntawv khaws cia hauv chav kawm.
Nov yog qhov koj qhov chaw khaws cia yuav tsum zoo li.
Nov yog daim duab ntawm kev cog lus tom qab kev sib koom ua ke.
οΈ Ua haujlwm thiab ntxiv cov kev xeem
Kev sib koom tes ntawm kev thov rub feem ntau ua rau muaj kev ua haujlwm ntxiv. Qhov no feem ntau yog qhov tshwm sim ntawm kev tshuaj xyuas lossis kev sib tham, tab sis hauv peb chav kawm peb yuav ua qauv no los ntawm kev ntxiv cov khoom tshiab rau peb cov npe ntawm CI cov kauj ruam.
Kev sib koom ua ke tsis tu ncua feem ntau suav nrog qee qhov kev xeem. Kev ntsuas cov kev xav tau sib txawv thiab feem ntau pom nyob rau hauv ib daim ntawv hu ua ib yam dab tsi xws li "cov lus qhia kev koom tes". Peb yuav khaws nws yooj yim thiab ntxiv ib qho kev xeem rau txhua kab hauv peb daim ntawv teev npe.
Thaum ua haujlwm, sim ua qhov kev xeem ua ntej. Yog hais tias koj ntsia kom raug pre-commit nuv ua ntej, qhov kev xeem ntxiv tshiab yuav raug khiav, yuav ua tsis tau, thiab tsis muaj dab tsi yuav raug cog lus. Nco ntsoov tias qhov no yog li cas peb paub tias peb cov kev xeem tau sim qee yam. Qhov zoo siab, yog tias peb pib nrog cov lej ua ntej qhov kev xeem, dhau qhov kev xeem tuaj yeem txhais tau tias cov lej ua haujlwm raws li qhov xav tau, lossis qhov kev xeem tsis tau sim ua dab tsi. Ntxiv rau, yog tias peb tsis tau sau cov ntawv xeem thawj zaug, peb yuav tsis nco qab txog lawv tag nrho, vim tsis muaj dab tsi yuav ua rau peb nco txog nws.
Test Driven Development (TDD)
TDD pom zoo kom sau cov ntawv xeem ua ntej code. Ib qho kev ua haujlwm raug siv TDD zoo li qhov no.
Ntxiv ib qho kev sim.
Khiav txhua qhov kev xeem thiab xyuas kom meej tias qhov kev xeem tshiab ua tsis tiav.
Vim tias cov txiaj ntsig ntawm kev sim ua tsis tiav feem ntau pom muaj xim liab, thiab cov uas dhau los feem ntau pom ntsuab, lub voj voog tseem hu ua liab-ntsuab-refactor.
οΈ Kev ua haujlwm
Ua ntej, sim ua qhov kev xeem thiab cia lawv ua tsis tiav, tom qab ntawd ntxiv thiab ua raws cov ntawv sau ntawm CI kauj ruam nws tus kheej. Koj yuav pom tias qhov kev xeem dhau lawm ("ntsuab").
Tom qab ntawd luam tawm cov cai tshiab rau cov chaw cia khoom nyob deb thiab saib cov kev sim khiav hauv GitHub interface hauv qab ntawm rub cov lus thov kev sib tham thiab PR xwm txheej hloov tshiab.
Hloov mus rau ceg feature.
Ntxiv cov kev xeem no rau ci.test.js tom qab hu kawg 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);
});
Sim ua qhov kev xeem. Yog pre-commit nuv yog ntsia, qhov kev sim yuav ua tsis tiav.
Ces ntxiv cov ntawv no rau 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.
Zaj dab neeg yuav yooj yim nyeem yog tias nws tsis ntev dhau los tsis muaj laj thawj tsim nyog.
Tsis siv neeg debugging thiab teeb meem yog me ntsis yooj yim: ua kom nws ua tau git bisect, tuaj yeem ua rau tsis siv neeg rollbacks meej dua thiab kwv yees ntau dua.
Yuav tsum tau tshaj tawm ib ceg nrog migrated cog lus nrog tus chij --force thaum siv nrog rub thov.
Feem ntau, pawg pom zoo ib txwm siv tib lub tswv yim thaum lawv xav tau kev sib koom ua ke hloov pauv. Qhov no tuaj yeem yog "dawb huv" kev sib koom ua ke lossis "dawb huv" ua rau sab saum toj, lossis qee yam hauv nruab nrab, xws li ua kev cog lus rau sab saum toj sib tham (git rebase -i) hauv zos rau cov ceg tsis tau tshaj tawm rau pej xeem repository, tab sis sib koom ua ke rau "public" ceg.
Ntawm no peb yuav siv merge.
οΈ Kev ua haujlwm
Xyuas kom tseeb tias cov cai nyob hauv ib ceg master hloov kho los ntawm qhov chaw cia khoom nyob deb.
Hloov mus rau ceg feature.
Pib kev sib koom ua ke nrog ib ceg master. Kev sib koom ua ke tsis sib haum xeeb vim kev sib tw hloov pauv rau lub ci.md.
Kev daws qhov tsis sib haum xeeb kom ob qho tib si peb cov npe ntawm CI cov kauj ruam thiab ib daim ntawv qhia txog nws nyob hauv cov ntawv nyeem.
Tshaj tawm ib qho kev sib koom ua ke rau ib ceg nyob deb feature.
Txheeb xyuas cov xwm txheej ntawm qhov kev thov rub hauv GitHub UI thiab tos kom txog thaum kev sib koom ua ke raug daws.
Hauv qhov xwm txheej zoo li no, peb yuav tsum tau saib xyuas:
dab tsi yog deployed nyob rau hauv ntau lawm;
code hauv xov master nrog qhov yuam kev, los ntawm cov neeg tsim khoom tuaj yeem pib ua haujlwm tshiab.
Kuv puas yuav rov qab los yog kho nws nyob rau hauv lub tom ntej version?
Rolling rov qab yog cov txheej txheem ntawm kev xa tawm qhov paub zoo ua ntej version rau kev tsim khoom thiab thim rov qab cov lus cog tseg uas muaj qhov yuam kev. "Kho rau pem hauv ntej" yog qhov sib ntxiv ntawm kev kho rau lub master thiab xa cov tshiab version sai li sai tau. Vim tias APIs thiab database schemas hloov pauv raws li cov cai raug xa mus rau kev tsim khoom, nrog kev xa khoom tas mus li thiab kev ntsuam xyuas zoo, dov rov qab yog feem ntau nyuaj thiab pheej hmoo ntau dua li kho nws hauv cov ntawv tom ntej.
Txij li thaum dov rov qab tsis muaj kev pheej hmoo ntawm peb rooj plaub, peb yuav mus rau txoj kev no, vim nws tso cai rau peb
kho qhov yuam kev ntawm cov khoom kom sai li sai tau;
ua code in master tam sim ntawd haum rau pib txoj hauj lwm tshiab.
οΈ Kev ua haujlwm
Hloov mus rau ceg master hauv zos.
Hloov kho qhov chaw khaws cia hauv zos los ntawm qhov chaw cia khoom nyob deb.
Rov qab PR kev sib koom ua ke Cov kauj ruam tshuaj xyuas Π² master.
Tshaj tawm cov kev hloov pauv mus rau qhov chaw khaws cia tej thaj chaw deb.
Qhov no yog keeb kwm ntawm lub chaw cia khoom nrog kev sib koom ua ke rov qab
Tsim ib daim ntawv thov rub nrog lub npe Kho qhov feature... Nruab feature-fix zoo li "head ceg" thiab master zoo li "base ceg".
Thov tos thaum qhov kev xeem tiav. Koj tuaj yeem pom cov xwm txheej ntawm cov kev xeem hauv qab ntawm PR kev sib tham.
Xyuas kom tseeb tias koj tau nruab master hauv nws fork lub repository Raws li "hauv paus ceg", kuv yuav tsis teb rau qhov kev thov rau kev hloov pauv cov ntaub ntawv khaws cia hauv chav kawm.
Pom zoo rub thov "Kho lub feature"
Ua tsaug rau kev kho! Thov pom zoo cov kev hloov pauv rau master los ntawm rub thov.
οΈ Kev ua haujlwm
Nyem "Merge rub thov".
Nyem "Confirm merge".
Nyem "Delete ceg" vim peb tsis xav tau nws lawm.
Nov yog yam koj yuav tsum muaj nyob rau lub sijhawm no.
Nrog koj zoo siab!
Koj tau ua tiav tag nrho cov kauj ruam uas tib neeg feem ntau ua thaum muaj kev sib koom ua ke tas mus li.
Yog tias koj pom muaj teeb meem nrog chav kawm lossis paub yuav ua li cas txhim kho nws, thov tsim qhov teeb meem hauv repositories nrog cov ntaub ntawv kawm. Hoob no kuj muaj sib tham sib version siv GitHub Learning Lab ua lub platform.