Halittu na yau da kullun a cikin ci gaba da haɗin kai

Shin kun koyi umarnin Git amma kuna son fahimtar yadda Ci gaba da Haɗuwa (CI) ke aiki a zahiri? Ko watakila kuna son inganta ayyukanku na yau da kullun? Wannan kwas ɗin zai ba ku ƙwarewar aiki a cikin ci gaba da haɗa kai ta amfani da ma'ajin GitHub. Wannan kwas ba ana nufin ya zama mayen ne kawai za ku iya dannawa ba, akasin haka, za ku yi irin abubuwan da mutane suke yi a wurin aiki, kamar yadda suke yi. Zan bayyana ka'idar yayin da kuke tafiya cikin matakan da suka dace.

Me muke yi?

Yayin da muke tafiya, sannu a hankali za mu gina jerin matakan CI na yau da kullun, wanda shine babbar hanyar tunawa da wannan jerin. A wasu kalmomi, za mu ƙirƙiri jerin ayyukan da masu haɓakawa ke yi lokacin aiwatar da ci gaba da haɗin kai, aiwatar da ci gaba da haɗin kai. Hakanan za mu yi amfani da ɗakin gwaji mai sauƙi don kawo tsarin mu na CI kusa da ainihin abu.

Wannan GIF da tsari yana nuna abubuwan da aka yi a cikin ma'ajiyar ku yayin da kuke ci gaba a cikin kwas. Kamar yadda kake gani, babu wani abu mai rikitarwa kuma kawai mafi mahimmanci.

Halittu na yau da kullun a cikin ci gaba da haɗin kai

Za ku bi ta daidaitattun yanayin CI masu zuwa:

  • Yi aiki akan sifa;
  • Aikace-aikacen gwaji na auto don tabbatar da inganci;
  • Aiwatar da aikin fifiko;
  • Magance rikice-rikice lokacin da ake haɗa rassan (haɗuwar rikici);
  • Farkon kuskure a cikin yanayin samarwa.

Me za ku koya?

Za ku iya amsa tambayoyi kamar:

  • Menene ci gaba da haɗin kai (CI)?
  • Wadanne nau'ikan gwaje-gwaje na autotest ake amfani da su a cikin CI, kuma don amsa waɗanne ayyuka suke gudana?
  • Menene buƙatar ja kuma yaushe ake buƙatar su?
  • Menene Ƙaddamarwar Gwaji (TDD) kuma ta yaya yake da alaƙa da CI?
  • Haɗa ko aiwatar da canje-canje a saman (sake tushe)?
  • Juyawa ko gyarawa a sigar ta gaba?

Da farko na fassara abubuwa kamar "pull request" a ko'ina, amma sakamakon haka na yanke shawarar mayar da jimloli a cikin Turanci a wasu wurare don rage girman hauka a cikin rubutun. Zan yi amfani da lokaci-lokaci "surzhik na shirye-shirye" kamar fi'ili mai ban sha'awa "ƙaddara" inda a zahiri mutane ke amfani da shi a wurin aiki.

Menene ci gaba da haɗa kai?

Ci gaba da Haɗuwa, ko CI, wani aikin fasaha ne wanda kowane memba na ƙungiyar ya haɗa lambar su a cikin ma'auni na kowa a kalla sau ɗaya a rana, kuma lambar da aka samu dole ne a kalla ginawa ba tare da kurakurai ba.

Akwai cece-kuce game da wannan lokaci.

Batun jayayya shine yawan haɗin kai. Wasu suna jayayya cewa haɗa lambar sau ɗaya a rana bai isa a zahiri ci gaba da haɗawa ba. Misali shine ƙungiyar inda kowa ya ɗauki sabon code da safe kuma ya haɗa sau ɗaya da yamma. Duk da yake wannan ƙin yarda ne mai ma'ana, ana yarda da cewa ma'anar "sau ɗaya a rana" yana da amfani sosai, takamaiman, kuma ya dace da ƙungiyoyi masu girma dabam.

Wani ƙin yarda shine C++ ba shine kawai harshen da aka yi amfani da shi ba na dogon lokaci, kuma kawai buƙatar haɗuwa ba tare da kurakurai ba azaman hanyar tabbatarwa yana da rauni. Saitin gwaje-gwaje (misali, gwaje-gwajen naúrar da ke gudana a cikin gida) dole ne su yi nasara. A halin yanzu, al'umma suna kokawa don sanya irin wannan bukata ta zama tilas, kuma a nan gaba, "gwajin gini + naúrar" zai zama ruwan dare gama gari, idan ba a rigaya ba.

Ci gaba da Haɗuwa bambanta daga ci gaba da wadata (Ci gaba da Bayarwa, CD) a cikin cewa baya buƙatar ɗan takarar saki bayan kowace zagayowar haɗin kai.

Jerin matakan da za mu yi amfani da su a duk tsawon lokacin

  1. Ja cikin sabuwar lamba. Ƙirƙiri reshe daga master. Fara aiki.
  2. Ƙirƙiri alkawura akan sabon reshen ku. Gina kuma gwada gida. Wuce? Je zuwa mataki na gaba. kasa? Gyara kurakurai ko gwaje-gwaje kuma a sake gwadawa.
  3. Tura zuwa wurin ajiyar ku na nesa ko reshe mai nisa.
  4. Ƙirƙiri buƙatar ja. Tattauna canje-canjen, ƙara ƙarin ƙaddamarwa yayin da ake ci gaba da tattaunawa. Yi gwaje-gwaje su wuce a kan reshen fasalin.
  5. Haɗawa/sake aikatawa daga maigidan. Yi gwaje-gwaje su wuce sakamakon haɗuwa.
  6. Aika daga reshen fasalin zuwa samarwa.
  7. Idan komai yana da kyau a cikin samarwa na ɗan lokaci, haɗa canje-canje zuwa gwaninta.

Halittu na yau da kullun a cikin ci gaba da haɗin kai

️ Shiri

Tabbatar cewa kuna da ingantaccen software

Don ɗaukar wannan kwas ɗin kuna buƙatar Node.js и Git abokin ciniki.

Kuna iya amfani da kowane abokin ciniki na Git, amma zan jera umarni kawai don layin umarni.

Tabbatar cewa an shigar da abokin ciniki Git wanda ke goyan bayan layin umarni

Idan baku riga an shigar da abokin ciniki na layin umarni Git ba, zaku iya samun umarnin shigarwa anan. a nan.

Shirya wurin ajiya

Kuna buƙatar ƙirƙirar kwafin sirri (cokali mai yatsa) ma'ajiya-samfurin tare da lambar don kwas ku GitHub. Mu yarda mu kira wannan kwafin na sirri ajiyar kwas.

An gama? Idan baku canza saitunan tsoho ba, ana iya sanya maajiyar kwas ɗin ku suna continuous-integration-team-scenarios-students, yana cikin asusunka na GitHub kuma URL yayi kama da haka

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

Zan kira wannan adireshin kawai <URL репозитория>.

madaidaicin kusurwa kamar <тут> yana nufin cewa dole ne ku maye gurbin irin wannan magana tare da ƙimar daidai.

Tabbatar cewa Ayyukan GitHub an kunna don wannan ma'ajiyar kwas. Idan ba a kunna su ba, da fatan za a ba su damar ta danna babban maɓalli a tsakiyar shafin, wanda zaku iya samun dama ta danna Ayyuka a cikin dubawar GitHub.

Ba za ku iya kammala karatun bin umarnina ba sai an kunna Ayyukan GitHub.

Halittu na yau da kullun a cikin ci gaba da haɗin kai

Kuna iya amfani da ikon GitHub koyaushe don nuna Markdown don ganin halin yanzu na jerin da muke tsarawa, anan.

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

Game da amsoshi

Duk da yake hanya mafi kyau don kammala wannan kwas shine yin shi da kanku, kuna iya samun wahalar kammalawa.

Idan kun ji cewa ba ku fahimci abin da za ku yi ba kuma ba za ku iya ci gaba ba, kuna iya leƙa cikin zaren solution, wanda ke cikin ma'ajiyar kayan farawa.
Don Allah kar a haɗa solution в master a lokacin kwas. Kuna iya amfani da wannan reshe don gano abin da za ku yi, ko kwatanta lambar ku da ta marubucin, ta amfani da duk damar da Git ya ba mu. Idan kun rasa gaba ɗaya, zaku iya maye gurbin reshen ku gaba ɗaya master a kan reshe solution sannan a sake saita kundin adireshi na aiki zuwa matakin matakin da kuke so.

Yi amfani da wannan kawai idan da gaske kuna buƙatarsa.

Ƙaddamar da lambar ku

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

Waɗannan umarni

  • sake suna master в master-backup;
  • sake suna solution в master;
  • canza (checkout) zuwa sabon reshe master da kuma sake rubuta abubuwan da ke cikin kundin aiki;
  • ƙirƙirar reshe "mafifi" daga "master" (wanda ya kasance "mafifi") idan kuna buƙatar reshe "mafini" a nan gaba.

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

Bayan waɗannan matakan, zaku iya amfani da su git log master don gane wane alkawari kuke bukata.
Kuna iya sake saita kundin tsarin aikinku zuwa wannan ƙaddamarwa kamar haka:

git reset --hard <the SHA you need>

Idan kun yi farin ciki da sakamakon, a wani lokaci kuna buƙatar buga sigar ma'ajiyar ku zuwa ma'ajiyar nisa (m). Kar a manta a fayyace reshe mai nisa a sarari lokacin da kuke yin wannan.

git push --force origin master

Lura cewa muna amfani git push --force. Wataƙila ba za ku so yin wannan sau da yawa ba, amma muna da takamaiman yanayi a nan tare da ɗaya mai amfani da ma'ajiyar wanda, ƙari, ya fahimci abin da yake yi.

Fara aiki

Halittu na yau da kullun a cikin ci gaba da haɗin kai

Bari mu fara tattara jerin matakan mu na CI. Yawancin lokaci kuna fara wannan matakin ta hanyar cire sabuwar lambar daga ma'ajiyar nisa, amma ba mu da wurin ajiyar gida tukuna, don haka muna rufe shi daga mai nisa maimakon.

️ Aiki: sabunta ma'ajiyar gida, ƙirƙirar reshe daga master, fara aiki

  1. Rufe ma'ajiyar kwas daga <URL репозитория>.
  2. Gudu npm install a cikin kundin ajiya na kwas; muna buƙatar shi don shigar da Jest, wanda muke amfani da shi don gudanar da gwaje-gwaje.
  3. Ƙirƙiri reshe da suna shi feature. Canja zuwa wannan zaren.
  4. Ƙara lambar gwaji zuwa ci.test.js tsakanin sharhin da ke neman ku yi haka.

    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. Ƙara rubutu tare da matakai 4 na farko don fayil 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.  

    Kungiyoyi

# Клонируйте репозиторий курса
git clone <repository URL>
cd <repository name>

# Выполните npm install в каталоге репозитория курса; он установит Jest, который мы используем для запуска тестов.
npm install

# Создайте ветку и назовите ее feature. Переключитесь на эту в ветку.
git checkout -b feature

# Отредактируйте ci.test.js как описано выше.
# Отредактируйте ci.md как описано выше

Ƙirƙiri alkawura akan sabon reshe, gina kuma gwada gida

Za mu saita gwaje-gwajen don yin aiki kafin ƙaddamarwa, sannan mu ƙaddamar da lambar.

Yanayin Al'ada Lokacin da Gwaje-gwaje ke Gudu ta atomatik

  • Na gida:
    • Ci gaba ko amsa ga canje-canjen lambobi masu dacewa;
    • Ajiye (don fassarar ko harsunan JIT da aka haɗa);
    • A kan ginawa (lokacin da ake buƙatar haɗawa);
    • A kan sadaukarwa;
    • Lokacin bugawa zuwa ma'ajiyar da aka raba.

  • Akan ginin uwar garken ko mahallin gini:
    • Lokacin da aka buga lamba zuwa reshe na sirri/majiya.
    • Ana gwada lambar da ke cikin wannan zaren.
    • Ana gwada yuwuwar sakamakon haɗuwa (yawanci tare da master).
    • A matsayin ci gaba da matakin haɗin kai / ci gaba da bututun isarwa

Gabaɗaya, da saurin ɗakin gwaji yana gudana, sau da yawa za ku iya samun damar gudanar da shi. Tsari na yau da kullun na iya yin kama da wannan.

  • Gwajin naúrar sauri - a ginin, a cikin bututun CI
  • Gwaje-gwajen naúrar sannu a hankali, kayan aikin sauri da gwaje-gwajen haɗin kai - a ƙaddamarwa, a cikin bututun CI
  • Slow bangaren da gwaje-gwajen haɗin kai - a cikin bututun CI
  • Gwajin tsaro, gwajin nauyi, da sauran gwaje-gwaje masu tsayi ko tsada - a cikin bututun CI / CD, amma kawai a wasu yanayi / matakai / gina bututun, misali, lokacin shirya ɗan takarar sakin ko lokacin farawa da hannu.

️ nema

Ina ba da shawarar fara gudanar da gwaje-gwaje da hannu ta amfani da umarnin npm test. Bayan haka, bari mu ƙara git ƙugiya don gudanar da gwaje-gwajenmu akan ƙaddamarwa. Akwai kama guda ɗaya: Git ƙugiya ba a la'akari da wani ɓangare na ma'ajin don haka ba za a iya haɗa shi daga GitHub tare da sauran abubuwan da ke cikin kwas ba. Don shigar da ƙugiya kuna buƙatar gudu install_hook.sh ko kwafi fayil repo/hooks/pre-commit zuwa kundin adireshin gida .git/hooks/.
Lokacin da kuka yi, za ku ga cewa an gudanar da gwaje-gwajen kuma suna bincika ko wasu kalmomi masu mahimmanci suna cikin jerin.

  1. Gudanar da gwaje-gwajen da hannu ta gudanar da umarni npm test cikin babban fayil ɗin ajiyar kwas ɗin ku. Tabbatar cewa an gudanar da gwaje-gwajen.
  2. Shigar da ƙugiya (pre-commit ƙugiya) ta hanyar gudu install_hook.sh.
  3. Aiwatar da canje-canje zuwa ma'ajiyar gida.
  4. Tabbatar cewa an gudanar da gwaje-gwaje kafin ƙaddamarwa.

Ya kamata ma'ajiyar ku ta yi kama da haka bayan kammala waɗannan matakan.
Halittu na yau da kullun a cikin ci gaba da haɗin kai

Kungiyoyi

# Установите pre-commit hook выполнив install_hook.sh.  

# Закоммитьте изменения в локальный репозиторий. Используйте "Add first CI steps" в качестве сообщения при коммите.
git add ci.md ci.test.js
git commit -m "Add first CI steps"

# Убедитесь, что тесты запускаются перед коммитом.  

Buga lamba zuwa wurin ajiya mai nisa ko reshe mai nisa

Bayan sun gama aiki a cikin gida, masu haɓakawa yawanci suna fitar da lambar su ga jama'a ta yadda a ƙarshe za a iya haɗa shi da jama'a. Tare da GitHub, ana samun wannan yawanci ta hanyar buga aikin ko dai zuwa kwafin ma'ajiyar sirri (cokali mai yatsa, cokali mai yatsa) ko zuwa reshe na sirri.

  • Tare da cokali mai yatsu, mai haɓakawa yana ɗaukar ma'ajin da aka raba na nesa, yana ƙirƙirar kwafin nasa na nesa, wanda kuma aka sani da cokali mai yatsa. Bayan haka, ya rufe wannan ma'ajiyar sirri don ya iya aiki da ita a cikin gida. Lokacin da aka gama aikin kuma aka ƙirƙiri ayyukan, sai ya sanya su a cikin cokali mai yatsu, inda za a iya samun su ga wasu kuma ana iya haɗa su cikin ma'ajin gama gari. Ana yawan amfani da wannan hanyar a cikin ayyukan buɗaɗɗen tushe akan GitHub. Hakanan ana amfani dashi a cikin karatuna na ci gaba [Aikin ƙungiyar da CI tare da Git] (http://devops.redpill.solutions/).
  • Wata hanya kuma ita ce amfani da ma'ajiyar nesa ɗaya kawai kuma kawai ƙidaya reshe master ma'ajiyar da aka raba an "kare". A cikin wannan yanayin, ɗaiɗaikun masu haɓakawa suna buga lambar su zuwa rassan ma'ajiyar nesa don wasu su iya ganin wannan lambar, idan komai yana cikin tsari, haɗa tare da master ma'ajiyar da aka raba.

A cikin wannan yanayin, za mu yi amfani da kayan aiki na musamman wanda ke amfani da rassa.

Mu buga lambar mu.

️ nema

  • Buga canje-canje zuwa reshe mai nisa mai suna iri ɗaya da reshen aikin ku

Kungiyoyi

git push --set-upstream origin feature

Ƙirƙiri buƙatar ja

Ƙirƙiri buƙatun ja tare da take Bita matakai... Shigar feature a matsayin "reshen shugaban" da master a matsayin "reshen tushe".

Tabbatar kun shigar master a cikin cokali mai yatsa a matsayin "reshen tushe", ba zan amsa buƙatun canza ma'ajiyar abun ciki ba.

A cikin GitHub slang, "reshen tushe" shine reshe wanda kuka kafa aikinku akansa, kuma "reshen shugaban" shine reshe mai ɗauke da canje-canjen da aka tsara.

Tattauna canje-canje, ƙara sabbin ayyuka yayin da ake ci gaba da tattaunawa

Buƙatun ja (PR)

Buƙatun ja (PR) wata hanya ce ta tattaunawa da rubuta code, da kuma gudanar da bitar code. Ana kiran buƙatun ja da sunan gaba ɗaya hanyar da ake haɗa canje-canjen mutum cikin babbar lambar. Yawancin lokaci mutum yana rufe wurin ajiyar aikin hukuma mai nisa kuma yana aiki akan lambar a gida. Bayan haka, ya sanya lambar a cikin ma'ajiyar sa ta nesa kuma ya nemi waɗanda ke da alhakin ma'ajiyar hukuma su ɗauka ((jawo) lambar sa zuwa wuraren ajiyar su na gida inda suke dubawa da yiwuwar haɗawa (tafi) nasa. Wannan ra'ayi kuma ana san shi da wasu sunaye, misali, bukatar hadawa.

A zahiri, ba lallai ne ku yi amfani da fasalin buƙatun ja na GitHub ko dandamali makamantan su ba. Ƙungiyoyin ci gaba na iya amfani da wasu hanyoyin sadarwa, gami da sadarwar fuska-da-fuska, kiran murya, ko imel, amma har yanzu akwai wasu dalilai da dama don amfani da irin waɗannan buƙatun ja na salon taron. Ga wasu daga cikinsu:

  • tattaunawar da aka shirya dangane da takamaiman canje-canje a cikin lambar;
  • a matsayin wuri don duba ra'ayi game da aikin da ake ci gaba daga duka autotest da takwarorinsu;
  • formalization na code cak;
  • ta yadda daga baya za ku iya gano dalilai da la’akari da wannan ko waccan lambar.

Yawancin lokaci kuna ƙirƙiri buƙatun ja lokacin da kuke buƙatar tattauna wani abu ko samun ra'ayi. Misali, idan kuna aiki akan fasalin da za'a iya aiwatarwa ta hanyoyi da yawa, zaku iya ƙirƙirar buƙatun ja kafin a rubuta layin farko don raba ra'ayoyin ku kuma tattauna shirye-shiryenku tare da masu haɗin gwiwa. Idan aikin ya fi sauƙi, ana buɗe buƙatar ja lokacin da aka riga an yi wani abu, ƙaddamarwa kuma za'a iya tattaunawa. A wasu yanayi, kuna iya buɗe PR don dalilai masu inganci kawai: don gudanar da gwaje-gwaje na atomatik ko fara bita na lamba. Duk abin da kuka yanke shawara, kar a manta da @ ambaci mutanen da kuke son amincewa a cikin buƙatun ku.

Yawanci, lokacin ƙirƙirar PR, kuna yin haka.

  • Ƙayyade abin da kuke ba da shawara don canzawa da kuma inda.
  • Rubuta bayanin bayanin dalilin canjin. Kuna iya so:
    • ƙara wani abu mai mahimmanci wanda ba a bayyane yake ba daga lambar, ko wani abu mai amfani don fahimtar mahallin, kamar dacewa #bugs da aikata lambobi;
    • @ambaci duk wanda kuke son yin aiki da shi, ko kuma kuna iya @ ambaci su a cikin sharhin daga baya;
    • tambayi abokan aiki don taimakawa da wani abu ko duba takamaiman wani abu.

Bayan ka buɗe PR, ana aiwatar da gwaje-gwajen da aka saita don yin aiki a irin waɗannan lokuta. A cikin yanayinmu, wannan zai zama babban ɗakin gwajin da muka gudanar a cikin gida, amma ana iya samun ƙarin gwaje-gwaje da dubawa a cikin ainihin aikin.

Da fatan za a jira yayin da aka kammala gwaje-gwaje. Kuna iya ganin matsayin gwaje-gwaje a ƙasan zaren PR a cikin haɗin GitHub. Ci gaba idan an gama gwaje-gwaje.

️ Ƙara bayanin kula game da sabani na jerin matakan CI

Jerin da aka yi amfani da shi a cikin wannan kwas ɗin sabani ne kuma na zahiri, dole ne mu ƙara bayanin kula game da wannan.

️ Kalubale: Ƙirƙiri buƙatun ja don wannan bayanin kula

  1. Canja zuwa reshe master.
  2. Ƙirƙiri reshe mai suna bugfix.
  3. Ƙara rubutu na bayanin kula zuwa ƙarshen fayil ɗin 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. Aiwatar da canje-canje.
  5. Buga reshe bugfix zuwa wurin ajiya mai nisa.
  6. Ƙirƙiri buƙatun ja mai suna Ƙara magana da shugaban reshe bugfix da tushe reshemaster.

Tabbatar kun shigar master a cikin cokali mai yatsa a matsayin "reshen tushe", ba zan amsa buƙatun canza ma'ajiyar abun ciki ba.

Wannan shine abin da ma'ajiyar ku yakamata yayi kama.
Halittu na yau da kullun a cikin ci gaba da haɗin kai

Kungiyoyi

# Переключитесь на ветку 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 как описано выше

Amince da buƙatar ja "Ƙara ra'ayi"

️ nema

  1. Ƙirƙiri buƙatar ja.
  2. Danna "Haɗa buƙatun cirewa".
  3. Danna "Tabbatar haɗuwa".
  4. Danna "Share reshe", ba ma bukatarsa ​​kuma.

Wannan zane ne na ayyukan da aka yi bayan haɗuwa.
Halittu na yau da kullun a cikin ci gaba da haɗin kai

️ Ci gaba da aiki da ƙara gwaje-gwaje

Haɗin kai akan buƙatun ja yana haifar da ƙarin aiki. Yawancin lokaci wannan shine sakamakon sake duba lambar ko tattaunawa, amma a cikin tsarinmu za mu tsara wannan ta ƙara sabbin abubuwa zuwa jerin matakan CI ɗin mu.

Tare da ci gaba da haɗin kai, yawanci ana amfani da wasu ɗaukar hoto. Bukatun ɗaukar hoto na gwaji sun bambanta kuma yawanci ana samun su a cikin takarda mai take kamar "ka'idodin gudummawa". Za mu tafi cikin sauƙi kuma mu ƙara gwaji ga kowane layi a cikin jerin abubuwan dubawa.

Lokacin gudanar da ayyuka, fara ƙoƙarin yin gwaje-gwaje. Idan kun shigar daidai pre-commit ƙugiya kafin, sabon ƙara gwajin zai gudu, kasa, kuma ba za a aikata kome ba. Lura cewa wannan shine yadda muka san cewa a zahiri gwaje-gwajenmu suna gwada wani abu. Abin mamaki, idan muka fara da lambar kafin gwaje-gwaje, wucewa gwaje-gwaje na iya nufin ko dai lambar tana aiki kamar yadda aka zata, ko kuma gwaje-gwajen ba su gwada komai ba. Har ila yau, da ba mu rubuta jarrabawar ba tun da farko, da mun manta da su gaba ɗaya, tun da ba abin da zai tuna mana da shi.

Gwajin Ƙarfafa Ƙarfafawa (TDD)

TDD yana ba da shawarar rubuta gwaje-gwaje kafin lamba. Tsarin aiki na yau da kullun ta amfani da TDD yayi kama da wannan.

  1. Ƙara gwaji.
  2. Gudanar da duk gwaje-gwaje kuma tabbatar da cewa sabon gwajin ya gaza.
  3. Rubuta lamba.
  4. Gudanar da gwaje-gwaje, tabbatar da cewa duk gwaje-gwajen sun wuce.
  5. Maimaita lambar ku.
  6. Maimaita.

Saboda sakamakon gwajin da ya gaza yawanci ana nuna shi da ja, kuma gwaje-gwajen da suka wuce ana nuna su da kore, ana kuma san zagayowar da ja-kore-refactor.

️ nema

Da farko ka yi ƙoƙarin yin gwaje-gwajen kuma ka bar su su kasa, sannan ka ƙara kuma aikata rubutun jerin matakan CI da kansa. Za ku ga cewa gwaje-gwajen sun wuce ("kore").
Sannan buga sabon lambar zuwa wurin ajiya mai nisa kuma kalli gwaje-gwajen da ke gudana a cikin GitHub dubawa a kasan tattaunawar buƙatun ja kuma an sabunta matsayin PR.

  1. Canja zuwa reshe feature.
  2. Ƙara waɗannan gwaje-gwajen zuwa ci.test.js bayan kiran karshe 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. Gwada yin gwaje-gwaje. Idan pre-commit an saita ƙugiya, ƙoƙarin ƙaddamarwa zai gaza.
  4. Sannan ƙara wannan rubutun zuwa 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. Yi kuma yi canje-canje a cikin gida.
  6. Buga canje-canje zuwa reshe feature.

Yanzu ya kamata ku sami wani abu kamar wannan
Halittu na yau da kullun a cikin ci gaba da haɗin kai

Kungiyoyi


# Переключительна ветку 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

Haɗa rikici

Je zuwa canjin bukata Bita matakai.

Duk da cewa ba mu yi wani laifi ba kuma gwaje-gwajen lambar mu sun wuce, har yanzu ba za mu iya haɗa reshe ba feature и master. Wannan saboda sauran zaren bugfix aka hade da master yayin da muke aiki akan wannan PR.
Wannan yana haifar da yanayi inda reshe mai nisa master yana da sabon salo fiye da wanda muka kafa reshe a kai feature. Saboda wannan, ba za mu iya mayar da KAI kawai ba master har zuwa karshen reshe feature. A wannan yanayin, muna buƙatar ko dai haɗawa ko aiwatar da alkawuran feature over(sake) master. GitHub na iya yin haɗin kai ta atomatik idan babu rikice-rikice. Alas, a cikin halin da muke ciki, duka rassan suna da canje-canje masu gasa a cikin fayil ɗin ci.md. Wannan yanayin ana kiransa da rikicin haɗaka kuma muna buƙatar magance shi da hannu.

Haɗa ko sake tushe

ci

  • Yana ƙirƙira ƙarin ƙaddamar da haɗin kai kuma yana adana tarihin aiki.
    • Yana adana ainihin reshe da aka yi tare da tambarin lokutan su na asali da mawallafa.
    • Ajiye SHAs da hanyoyin haɗin kai don aiwatarwa a cikin tattaunawar neman canji.
  • Yana buƙatar warware rikici na lokaci ɗaya.
  • Ya sa labarin ba na layi ba.
    • Tarihin na iya zama da wahala a karanta saboda yawan rassa (tunani da kebul na IDE).
    • Yana sa gyara ta atomatik ya fi wahala, misali, yin git bisect kasa da amfani - zai sami kawai haɗin gwiwa.

Sake biya

  • Sake kunnawa daga reshe na yanzu a saman tushe ɗaya bayan ɗaya.
    • Ana samar da sabbin ayyuka tare da sabbin SHAs, yana haifar da GitHub yayi daidai da buƙatun ja na asali amma ba maganganun da suka dace ba.
    • Za a iya sake haɗawa da canza su a cikin tsari, ko ma a haɗa su zuwa ɗaya.
  • Kuna iya buƙatar warware rikice-rikice da yawa.
  • Yana ba ku damar kiyaye tarihin layi.
    • Labarin na iya zama da sauƙin karantawa, in dai bai yi tsawo ba ba tare da wani kwakkwaran dalili ba.
    • Gyara ta atomatik da gyara matsala yana da ɗan sauƙi: yana sa ya yiwu git bisect, na iya sa jujjuyawar atomatik ta fi bambanta da tsinkaya.
  • Yana buƙatar buga reshe tare da mayar da alƙawura tare da tuta --force lokacin amfani da buƙatun canji.

Ƙungiyoyi yawanci suna yarda su yi amfani da dabara ɗaya koyaushe lokacin da suke buƙatar haɗa canje-canje. Wannan na iya zama haɗaɗɗiyar "tsarkake" ko "tsabta" aikata a saman, ko wani abu a tsakani, kamar yin alƙawarin kan yanayin hulɗa(git rebase -i) a cikin gida don rassan da ba a buga su zuwa ma'ajiyar da aka raba ba, amma haɗe don rassan "jama'a".

A nan za mu yi amfani da haɗuwa.

️ nema

  1. Tabbatar cewa lambar tana cikin reshen gida master sabunta daga wurin ajiya mai nisa.
  2. Canja zuwa reshe feature.
  3. Fara haɗawa tare da reshe master. Za a ba da rahoton rikicin haɗin kai saboda sauye-sauyen gasa a ciki ci.md.
  4. warware rikicin domin duka jerin matakan CI namu da bayanin kula game da shi su kasance a cikin rubutu.
  5. Sanya alkawarin haɗaka zuwa reshe mai nisa feature.
  6. Bincika matsayin buƙatar ja a cikin GitHub UI, jira har sai an warware haɗin.

Kungiyoyi

# Убедитесь, что код в локальное ветке `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, дождитесь пока слияние не будет разрешено.

Babban aiki!

An gama da lissafin kuma yanzu kuna buƙatar amincewa da buƙatun ja a ciki master.

️ Aiki: Amincewa da buƙatar ja "Bita na Matakai"

  1. Buɗe buƙatar ja.
  2. Danna "Haɗa buƙatun cirewa".
  3. Danna "Tabbatar haɗuwa".
  4. Danna "Share reshe" tunda ba ma buƙatarsa ​​kuma.

Wannan shine ma'ajiyar ku a halin yanzu
Halittu na yau da kullun a cikin ci gaba da haɗin kai

Kuskuren samfur

Sun ce "za a iya amfani da gwaji don nuna kasancewar kurakurai, amma kada a nuna rashin su." Duk da cewa muna da gwaje-gwaje kuma ba su nuna mana kurakurai ba, kuskuren kuskure ya shiga cikin samarwa.

A cikin yanayi kamar haka, muna buƙatar kula da:

  • wanda aka sanya a kan masu amfani;
  • lambar reshe master tare da kuskure, wanda masu haɓakawa zasu iya fara sabon aiki.

Juyawa ko gyara a cikin sigar gaba?

"Juyawa baya" shine aikin tura sanannen sigar farko mai kyau zuwa yanayin samarwa da kuma maido da ayyukan da suka ƙunshi kuskure. "Gyara gaba" shine ƙari na gyarawa zuwa master da tura sabon sigar da wuri-wuri. Saboda APIs da tsare-tsaren bayanai suna canzawa yayin da ake tura lambar don samarwa, tare da ci gaba da bayarwa da ingantaccen ɗaukar hoto, jujjuya baya gabaɗaya ya fi wahala da haɗari fiye da daidaitawa a cikin sakin gaba.

Tun da jujjuya baya baya ɗaukar wani haɗari a cikin lamarinmu, za mu bi ta wannan hanyar, saboda yana ba mu damar

  • gyara kwaro akan samarwa da wuri-wuri;
  • yi code in master nan da nan shirye don fara sabon aiki.

️ nema

  1. Canja zuwa reshe master na gida.
  2. Sabunta ma'ajiyar gida daga wurin ajiya mai nisa.
  3. Mayar da haɗin gwiwar PR Bita matakai в master.
  4. Buga canje-canje zuwa wurin ajiya mai nisa.

Wannan shine tarihin ma'adanar tare da komawar haɗin gwiwa
Halittu na yau da kullun a cikin ci gaba da haɗin kai

Kungiyoyi

# Переключитесь на ветку master.
git checkout master

# Обновите локальный репозиторий из удалённого репозитория.
git pull

# Отмените коммит слияния PR Steps review в master.
# Мы отменяем коммит слияния, поэтому нам нужно выбрать ветку истории, которую мы захотим оставить
git show HEAD

# предположим, что коммит, который был последним в ветке master до слияния, был отображён предыдущей командой первым
git revert HEAD -m 1
# можете не менять сообщения коммитов

# Опубликуйте изменения в удалённый репозиторий
git push

️ Duban kai

Tabbatar cewa ci.md baya ƙunshe da rubutun "bug sneaky" bayan an koma aikin haɗin gwiwa.

Gyara jerin matakan CI kuma komawa zuwa maigidan

Mun mayar da aikin haɗin gwiwar reshe gaba ɗaya feature. Labari mai dadi shine cewa yanzu ba mu da kuskure a ciki master. Mummunan labari shi ne cewa jerin matakan haɗin kai masu daraja kuma sun tafi. Don haka, da kyau, muna so mu yi amfani da gyara ga ayyukan daga feature kuma mayar da su zuwa master tare da gyarawa.

Za mu iya magance matsalar ta hanyoyi daban-daban:

  • mayar da alƙawarin, wanda ke mayar da haɗuwa feature с master;
  • hijira aikata daga tsohon feature.

Ƙungiyoyin ci gaba daban-daban suna ɗaukar hanyoyi daban-daban a wannan yanayin, amma za mu matsar da ayyuka masu amfani zuwa wani reshe na daban kuma mu ƙirƙiri buƙatun ja na daban don wannan sabon reshe.

️ nema

  1. Ƙirƙiri reshe da ake kira feature-fix kuma canza zuwa gare shi.
  2. Yi ƙaura duk ayyukan daga tsohon reshe feature zuwa sabon zaren. Magance rikice-rikicen haɗuwa da suka faru yayin ƙaura.

    Halittu na yau da kullun a cikin ci gaba da haɗin kai

  3. Ƙara gwajin koma baya ga ci.test.js:

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

  4. Gudanar da gwaje-gwajen a cikin gida don tabbatar da cewa ba a kammala su cikin nasara ba.
  5. Share rubutun "tare da sneaky bug" a ciki ci.md.
  6. Ƙara canje-canjen gwaji da canje-canje zuwa jerin matakai zuwa fihirisar kuma yi su.
  7. Buga reshe zuwa wurin ajiya mai nisa.

Ya kamata ku ƙare da wani abu kamar
Halittu na yau da kullun a cikin ci gaba da haɗin kai

Kungiyoyi

# Создайте ветку под названием 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

Ƙirƙiri buƙatar ja.

Ƙirƙiri buƙatun ja tare da take Gyara fasalin... Shigar feature-fix a matsayin "reshen shugaban", kuma master a matsayin "reshen tushe".
Da fatan za a jira yayin da aka kammala gwaje-gwaje. Kuna iya ganin matsayin gwaje-gwaje a ƙasan tattaunawar PR.

Tabbatar kun shigar master a cikin cokali mai yatsa a matsayin "reshen tushe", ba zan amsa buƙatun canza ma'ajiyar abun ciki ba.

Amince da buƙatar ja "Gyara fasalin"

Na gode da gyara! Da fatan za a amince da canje-canje a master daga buqatar ja.

️ nema

  1. Danna "Haɗa buƙatun cirewa".
  2. Danna "Tabbatar haɗuwa".
  3. Danna "Share reshe" tunda ba ma buƙatarsa ​​kuma.

Wannan shine abin da yakamata ku samu a yanzu.
Halittu na yau da kullun a cikin ci gaba da haɗin kai

Taya murna!

Kun kammala duk matakan da mutane suka saba ɗauka a cikin ci gaba da tsarin haɗin kai.

Idan kun lura da wata matsala game da karatun ko san yadda ake inganta shi, da fatan za a haifar da matsala a ciki ma'ajin abun ciki na kwas. Wannan kwas din yana da m version amfani da GitHub Learning Lab azaman dandamali.

source: www.habr.com

Add a comment