Sefyllfaoedd nodweddiadol gydag integreiddio parhaus

Ydych chi wedi dysgu gorchmynion Git ond eisiau dychmygu sut mae integreiddio parhaus (CI) yn gweithio mewn gwirionedd? Neu efallai eich bod am wneud y gorau o'ch gweithgareddau dyddiol? Bydd y cwrs hwn yn rhoi sgiliau ymarferol i chi mewn integreiddio parhaus gan ddefnyddio ystorfa GitHub. Nid yw'r cwrs hwn wedi'i fwriadu i fod yn ddewin y gallwch chi glicio drwyddo; i'r gwrthwyneb, byddwch chi'n cyflawni'r un gweithredoedd y mae pobl yn eu gwneud yn y gwaith, yn yr un ffordd ag y maen nhw'n ei wneud. Byddaf yn esbonio'r ddamcaniaeth wrth i chi fynd drwy'r camau dan sylw.

Beth ydyn ni'n ei wneud?

Wrth i ni symud ymlaen, byddwn yn raddol yn creu rhestr o gamau CI nodweddiadol, sy'n ffordd wych o gofio'r rhestr hon. Mewn geiriau eraill, byddwn yn creu rhestr o gamau gweithredu y mae datblygwyr yn eu cymryd wrth wneud integreiddio parhaus, gan wneud integreiddio parhaus. Byddwn hefyd yn defnyddio set syml o brofion i ddod â'n proses CI yn nes at yr un go iawn.

Mae'r GIF hwn yn sgematig yn dangos yr ymrwymiadau yn eich ystorfa wrth i chi symud ymlaen trwy'r cwrs. Fel y gwelwch, nid oes dim byd cymhleth yma a dim ond y rhai mwyaf angenrheidiol.

Sefyllfaoedd nodweddiadol gydag integreiddio parhaus

Byddwch yn mynd trwy'r senarios CI safonol canlynol:

  • Gweithio ar nodwedd;
  • Cymhwyso profion awtomataidd i sicrhau ansawdd;
  • Gweithredu'r dasg flaenoriaeth;
  • Datrys gwrthdaro wrth uno canghennau (uno gwrthdaro);
  • Mae gwall yn digwydd mewn amgylchedd cynhyrchu.

Beth fyddwch chi'n ei ddysgu?

Byddwch yn gallu ateb y cwestiynau canlynol:

  • Beth yw integreiddio parhaus (CI)?
  • Pa fathau o brofion awtomataidd a ddefnyddir mewn CI, ac mewn ymateb i ba gamau y cânt eu hysgogi?
  • Beth yw ceisiadau tynnu a phryd mae eu hangen?
  • Beth yw Datblygiad Seiliedig ar Brawf (TDD) a sut mae'n berthnasol i CI?
  • A ddylwn i uno neu ailosod y newidiadau?
  • Rholiwch yn ôl neu atgyweiria yn y fersiwn nesaf?

Ar y dechrau cyfieithais bethau fel “pull requests” ym mhobman, ond o ganlyniad penderfynais ddychwelyd ymadroddion yn Saesneg mewn rhai mannau i leihau’r graddau o wallgofrwydd yn y testun. Weithiau byddaf yn defnyddio “rhaglennwr surzhik” fel y ferf wych “commit” lle mae pobl yn ei ddefnyddio yn y gwaith.

Beth yw integreiddio parhaus?

Integreiddio Parhaus, neu CI, yn arfer technegol lle mae pob aelod o'r tîm yn integreiddio eu cod i ystorfa gyffredin o leiaf unwaith y dydd, a rhaid adeiladu'r cod canlyniadol o leiaf heb wallau.

Mae anghytundebau am y tymor hwn

Y pwynt dadlau yw amlder integreiddio. Mae rhai yn dadlau nad yw uno cod unwaith y dydd yn unig yn ddigon i integreiddio'n barhaus. Rhoddir enghraifft o dîm lle mae pawb yn cymryd cod ffres yn y bore ac yn ei integreiddio unwaith gyda'r nos. Er bod hwn yn wrthwynebiad rhesymol, credir yn gyffredinol bod y diffiniad unwaith y dydd yn rhesymol ymarferol, penodol, ac yn addas ar gyfer timau o wahanol feintiau.

Gwrthwynebiad arall yw nad C++ yw'r unig iaith a ddefnyddir mewn datblygiad bellach, a bod y cyfan sy'n gofyn am gynulliad di-wall fel ffordd o ddilysu yn wan. Rhaid i rai setiau o brofion (er enghraifft, profion uned a gyflawnir yn lleol) hefyd gwblhau'n llwyddiannus. Ar hyn o bryd, mae'r gymuned yn symud tuag at wneud hyn yn ofyniad, ac yn y dyfodol mae'n debyg y bydd "profion adeiladu + uned" yn dod yn arfer cyffredin, os nad yw eisoes wedi gwneud hynny.

Integreiddio Parhaus yn wahanol i cyflwyno parhaus (Cyflenwi Parhaus, CD) yn yr ystyr nad oes angen ymgeisydd rhyddhau ar ôl pob cylch integreiddio.

Rhestr o gamau y byddwn yn eu defnyddio trwy gydol y cwrs

  1. Tynnwch y cod diweddaraf. Creu cangen o master. Dechrau gweithio.
  2. Creu ymrwymiadau ar eich cangen newydd. Adeiladu a phrofi'n lleol. Pasio? Ewch i'r cam nesaf. Methu? Trwsiwch wallau neu brofion a rhowch gynnig arall arni.
  3. Gwthiwch i'ch storfa bell neu gangen bell.
  4. Creu cais tynnu. Trafod y newidiadau, ychwanegu mwy o ymrwymiadau wrth i'r drafodaeth barhau. Gwnewch i brofion basio'r gangen nodwedd.
  5. Cyfuno/adseilio ymrwymiad o feistr. Gwneud i brofion basio'r canlyniad uno ymlaen.
  6. Defnyddio o'r gangen nodwedd i gynhyrchu.
  7. Os yw popeth yn dda mewn cynhyrchu am gyfnod o amser, uno newidiadau i feistr.

Sefyllfaoedd nodweddiadol gydag integreiddio parhaus

️ Paratoi

Sicrhewch fod gennych y feddalwedd gywir

I ddilyn y cwrs hwn bydd angen Node.js и cleient Git.

Gallwch ddefnyddio unrhyw gleient Git, ond dim ond gorchmynion ar gyfer y llinell orchymyn y byddaf yn eu darparu.

Sicrhewch fod gennych gleient Git wedi'i osod sy'n cefnogi'r llinell orchymyn

Os nad oes gennych gleient Git eto sy'n cefnogi'r llinell orchymyn, gallwch ddod o hyd i gyfarwyddiadau gosod yma.

Paratowch yr ystorfa

Bydd angen i chi greu copi personol (fforch) storfa dempledi gyda chod ar gyfer y cwrs ar GitHub. Gadewch i ni gytuno i alw'r copi personol hwn storfa cwrs.

Wedi'i wneud? Os nad ydych wedi newid y gosodiadau diofyn, mae'n debygol mai eich storfa cwrs yw'r enw continuous-integration-team-scenarios-students, mae wedi'i leoli yn eich cyfrif GitHub ac mae'r URL yn edrych fel hyn

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

Yn syml, byddaf yn galw'r cyfeiriad hwn <URL репозитория>.

Mae cromfachau ongl fel <тут> yn golygu bod yn rhaid ichi ddisodli ymadrodd o'r fath â'r gwerth priodol.

Gwnewch yn siŵr hynny Gweithredoedd GitHub wedi'i gynnwys ar gyfer y storfa gyrsiau hon. Os nad ydynt wedi'u galluogi, galluogwch nhw trwy glicio ar y botwm mawr yng nghanol y dudalen, y gallwch chi ei gyrraedd trwy glicio Camau Gweithredu yn y rhyngwyneb GitHub.

Ni fyddwch yn gallu cwblhau'r cwrs gan ddilyn fy nghyfarwyddiadau os nad yw GitHub Actions wedi'i alluogi.

Sefyllfaoedd nodweddiadol gydag integreiddio parhaus

Gallwch chi bob amser ddefnyddio gallu GitHub i rendro Markdown i weld cyflwr presennol y rhestr rydyn ni'n ei chyfansoddi yma

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

Am atebion

Er mai'r ffordd orau o gwblhau'r cwrs hwn yw ei wneud eich hun, efallai y cewch rai anawsterau.

Os ydych chi'n teimlo nad ydych chi'n deall beth i'w wneud ac na allwch chi barhau, gallwch chi edrych i mewn i'r edefyn solution, sydd yn eich ystorfa gychwyn.
Peidiwch â chyfuno solution в master yn ystod y cwrs. Gallwch ddefnyddio'r gangen hon i ddarganfod beth i'w wneud, neu i gymharu'ch cod â'r awdur, gan ddefnyddio'r holl alluoedd y mae Git yn eu rhoi i ni. Os ydych chi ar goll yn llwyr, gallwch chi gael cangen newydd yn ei lle master ar gangen solution ac yna ailosod eich cyfeiriadur gweithio i'r cam cwrs sydd ei angen arnoch.

Defnyddiwch hwn dim ond os ydych chi ei angen mewn gwirionedd

Ymrwymwch eich cod

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

Mae'r gorchmynion hyn

  • ailenwi master в master-backup;
  • ailenwi solution в master;
  • til i gangen newydd master ac ailysgrifennu cynnwys y cyfeiriadur gweithio;
  • Creu cangen "ateb" o "meistr" (a arferai fod yn "ateb") rhag ofn y bydd angen cangen "ateb" arnoch yn y dyfodol.

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

Ar ôl y camau hyn gallwch eu defnyddio git log master i ddarganfod pa ymrwymiad sydd ei angen arnoch.
Gallwch ailosod eich cyfeiriadur gweithio i'r ymrwymiad hwn fel hyn:

git reset --hard <the SHA you need>

Os ydych chi'n hapus gyda'r canlyniad, ar ryw adeg bydd angen i chi gyhoeddi eich fersiwn chi o'r ystorfa i gadwrfa bell. Peidiwch ag anghofio nodi'r gangen bell yn benodol pan fyddwch chi'n gwneud hyn.

git push --force origin master

Sylwch ein bod yn defnyddio git push --force. Mae'n annhebygol y byddwch am wneud hyn yn aml iawn, ond mae gennym senario penodol iawn yma gydag un defnyddiwr ystorfa sydd, yn ogystal, yn deall yr hyn y mae'n ei wneud.

Dechrau gweithio

Sefyllfaoedd nodweddiadol gydag integreiddio parhaus

Gadewch i ni ddechrau llunio ein rhestr o gamau CI. Fel arfer byddech chi'n dechrau'r cam hwn trwy wirio'r fersiwn ddiweddaraf o'r cod o'r ystorfa bell, ond nid oes gennym ni ystorfa leol eto, felly rydyn ni'n ei glonio o'r un anghysbell yn lle hynny.

️ Tasg: diweddaru’r gadwrfa leol, creu cangen o master, dechrau gweithio

  1. Cloniwch y storfa cwrs o <URL репозитория>.
  2. Rhedeg npm install yng nghyfeirlyfr cadwrfa'r cwrs; Mae ei angen arnom i osod Jest, yr ydym yn ei ddefnyddio i redeg profion.
  3. Creu cangen a'i henwi feature. Newidiwch i'r edefyn hwn.
  4. Ychwanegu cod prawf i ci.test.js rhwng sylwadau yn gofyn i mi wneud hyn.

    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. Ychwanegu testun gyda'r 4 cam cyntaf i'r ffeil 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.  

    Timau

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

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

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

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

Creu yn ymrwymo ar gangen newydd, adeiladu a phrofi yn lleol

Rydyn ni'n mynd i sefydlu'r profion i'w rhedeg cyn ymrwymo, ac yna ymrwymo'r cod.

Senarios nodweddiadol pan fydd profion yn rhedeg yn awtomatig

  • Yn lleol:
    • Yn barhaus neu mewn ymateb i newidiadau cod priodol;
    • Wrth gadw (ar gyfer ieithoedd wedi'u dehongli neu ieithoedd a luniwyd gan JIT);
    • Yn ystod y gwasanaeth (pan fydd angen llunio);
    • Ar ymrwymo;
    • Wrth gyhoeddi i gadwrfa a rennir.

  • Ar y gweinydd adeiladu neu'r amgylchedd adeiladu:
    • Pan fydd cod yn cael ei gyhoeddi i gangen/storfa bersonol.
    • Mae'r cod yn yr edefyn hwn yn cael ei brofi.
    • Mae canlyniad posibl yr uno yn cael ei brofi (fel arfer gyda master).
    • Fel cam integreiddio parhaus / piblinell gyflenwi barhaus

Yn nodweddiadol, po gyflymaf y mae ystafell brawf yn rhedeg, y mwyaf aml y gallwch fforddio ei rhedeg. Gallai dosbarthiad cam nodweddiadol edrych fel hyn.

  • Profion uned cyflym - yn ystod adeiladu, ar y gweill CI
  • Profion uned araf, cydran cyflym a phrofion integreiddio - ar ymrwymiad, ar y gweill CI
  • Profion cydran ac integreiddio araf - ar y gweill CI
  • Profion diogelwch, profion llwyth a phrofion eraill sy'n cymryd llawer o amser neu'n ddrud - ar y gweill CI/CD, ond dim ond mewn rhai moddau/camau/piblinellau o'r adeiladu, er enghraifft, wrth baratoi ymgeisydd rhyddhau neu wrth redeg â llaw.

️Tasg

Rwy'n awgrymu rhedeg y profion â llaw yn gyntaf gan ddefnyddio'r gorchymyn npm test. Ar ôl hynny, gadewch i ni ychwanegu bachyn git i redeg ein profion ar ymrwymo. Mae un daliad: nid yw bachau git yn cael eu hystyried yn rhan o'r ystorfa ac felly ni ellir eu clonio o GitHub ynghyd â gweddill deunyddiau'r cwrs. I osod bachyn mae angen i chi redeg install_hook.sh neu gopïwch y ffeil repo/hooks/pre-commit i'r cyfeiriadur lleol .git/hooks/.
Pan fyddwch chi'n ymrwymo, fe welwch fod profion yn cael eu rhedeg ac maen nhw'n gwirio i weld a yw rhai geiriau allweddol yn bresennol yn y rhestr.

  1. Rhedeg y profion â llaw trwy redeg y gorchymyn npm test yn ffolder cadwrfa eich cwrs. Gwiriwch fod y profion wedi'u cwblhau.
  2. Gosodwch fachyn ymrwymo (bachyn rhag-ymrwymo) trwy redeg install_hook.sh.
  3. Ymrwymwch eich newidiadau i'ch cadwrfa leol.
  4. Gwnewch yn siŵr bod profion yn cael eu cynnal cyn ymrwymo.

Dylai eich cadwrfa edrych fel hyn ar ôl dilyn y camau hyn.
Sefyllfaoedd nodweddiadol gydag integreiddio parhaus

Timau

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

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

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

Cyhoeddi cod i gadwrfa bell neu gangen bell

Unwaith y byddant wedi gorffen gweithio'n lleol, mae datblygwyr fel arfer yn sicrhau bod eu cod ar gael i'r cyhoedd fel y gellir ei integreiddio â'r cyhoedd yn y pen draw. Gyda GitHub, cyflawnir hyn fel arfer trwy gyhoeddi'r gwaith naill ai i gopi personol o'r gadwrfa (fforc personol) neu gangen bersonol.

  • Gyda ffyrc, mae datblygwr yn clonio ystorfa a rennir o bell, gan greu copi personol o bell ohoni, a elwir hefyd yn fforc. Yna mae'n clonio'r ystorfa bersonol hon i weithio gyda hi'n lleol. Pan fydd y gwaith wedi'i gwblhau a'r ymrwymiadau wedi'u gwneud, mae'n eu gwthio i'w fforc, lle maent ar gael i eraill ac y gellir eu hintegreiddio i'r gadwrfa gyffredin. Defnyddir y dull hwn yn gyffredin mewn prosiectau ffynhonnell agored ar GitHub. Mae hefyd yn cael ei ddefnyddio yn fy nghwrs uwch [Gwaith Tîm a CI gyda Git] (http://devops.redpill.solutions/).
  • Dull arall yw defnyddio un ystorfa bell yn unig a chyfrif y gangen yn unig master cadwrfa a rennir "gwarchodedig". Yn y senario hwn, mae datblygwyr unigol yn cyhoeddi eu cod i ganghennau ystorfa anghysbell fel y gall eraill edrych ar y cod hwn, os yw popeth mewn trefn, ei gyfuno â master storfa a rennir.

Yn y cwrs penodol hwn, byddwn yn defnyddio llif gwaith sy'n defnyddio canghennau.

Gadewch i ni gyhoeddi ein cod.

️Tasg

  • Cyhoeddi newidiadau i gangen bell gyda'r un enw â'ch cangen waith

Timau

git push --set-upstream origin feature

Creu cais tynnu

Creu cais tynnu gyda theitl Adolygiad camau. Gosod feature fel "cangen pen" a master fel "cangen sylfaen".

Gwnewch yn siŵr eich bod wedi gosod master yn ei fforch yr ystorfa Fel "cangen sylfaen", ni fyddaf yn ymateb i geisiadau am newidiadau i'r storfa deunyddiau cwrs.

Yn GitHub lingo, y "gangen sylfaen" yw'r gangen yr ydych yn seilio'ch gwaith arni, a'r "pen gangen" yw'r gangen sy'n cynnwys y newidiadau arfaethedig.

Trafod y newidiadau, ychwanegu ymrwymiadau newydd wrth i'r drafodaeth barhau

Cais tynnu (PR)

Cais tynnu (PR) yn ffordd i drafod a dogfennu cod, yn ogystal ag adolygu cod cynnal. Enwir ceisiadau tynnu ar ôl y ffordd gyffredinol o integreiddio newidiadau unigol i'r cod cyffredinol. Yn nodweddiadol, mae person yn clonio storfa swyddogol anghysbell y prosiect ac yn gweithio ar y cod yn lleol. Ar ôl hyn, mae'n gosod y cod yn ei gadwrfa bell bersonol ac yn gofyn i'r rhai sy'n gyfrifol am y gadwrfa swyddogol ei godi(tynnu) ei god yn eu cadwrfeydd lleol, lle maent yn adolygu ac o bosibl yn integreiddio(uno) ei. Mae'r cysyniad hwn hefyd yn cael ei adnabod gan enwau eraill, er enghraifft, cais uno.

Nid oes rhaid i chi ddefnyddio'r nodwedd cais tynnu GitHub neu lwyfannau tebyg mewn gwirionedd. Gall timau datblygu ddefnyddio dulliau eraill o gyfathrebu, gan gynnwys cyfathrebu wyneb yn wyneb, galwadau llais, neu e-bost, ond mae nifer o resymau o hyd i ddefnyddio ceisiadau tynnu arddull fforwm. Dyma rai ohonynt:

  • trafodaethau wedi'u trefnu yn ymwneud â newidiadau cod penodol;
  • fel lle i weld adborth ar waith sydd ar y gweill gan awtoprofwyr a chydweithwyr;
  • ffurfioli adolygiadau cod;
  • fel y gallwch ddarganfod yn ddiweddarach y rhesymau a'r ystyriaethau y tu ôl i hyn neu'r darn hwnnw o god.

Yn nodweddiadol, rydych chi'n creu cais tynnu pan fydd angen i chi drafod rhywbeth neu gael adborth. Er enghraifft, os ydych chi'n gweithio ar nodwedd y gellid ei gweithredu mewn mwy nag un ffordd, gallwch greu cais tynnu cyn ysgrifennu'r llinell gyntaf o god i rannu'ch syniadau a thrafod eich cynlluniau gyda'ch cydweithwyr. Os yw'r gwaith yn symlach, agorir cais tynnu pan fydd rhywbeth eisoes wedi'i wneud, wedi'i ymrwymo, a gellir ei drafod. Mewn rhai sefyllfaoedd, efallai y byddwch am agor PR yn unig am resymau rheoli ansawdd: i redeg profion awtomataidd neu gychwyn adolygiadau cod. Beth bynnag y byddwch chi'n ei benderfynu, peidiwch ag anghofio @crybwyll y bobl yr hoffech eu cymeradwyaeth yn eich cais tynnu.

Yn nodweddiadol, wrth greu cysylltiadau cyhoeddus, rydych chi'n gwneud y canlynol.

  • Nodwch beth rydych yn bwriadu ei newid ac ymhle.
  • Ysgrifennwch ddisgrifiad yn egluro pwrpas y newidiadau. Efallai y byddwch eisiau:
    • ychwanegu unrhyw beth pwysig nad yw'n amlwg o'r cod, neu rywbeth defnyddiol ar gyfer deall y cyd-destun, megis #bugs perthnasol ac ymrwymo rhifau;
    • @crybwyllwch unrhyw un yr hoffech ddechrau gweithio gyda nhw, neu gallwch @crybwyll yn y sylwadau yn ddiweddarach;
    • gofyn i gydweithwyr helpu gyda rhywbeth neu wirio rhywbeth penodol.

Unwaith y byddwch chi'n agor y cysylltiadau cyhoeddus, mae'r profion sydd wedi'u ffurfweddu i redeg mewn achosion o'r fath yn cael eu gweithredu. Yn ein hachos ni, dyma fydd yr un set o brofion ag y gwnaethom ni eu cynnal yn lleol, ond mewn prosiect go iawn efallai y bydd profion a gwiriadau ychwanegol.

Arhoswch tra bydd y profion wedi'u cwblhau. Gallwch weld statws y profion ar waelod y drafodaeth cysylltiadau cyhoeddus yn y rhyngwyneb GitHub. Parhewch pan fydd y profion wedi'u cwblhau.

️ Ychwanegu nodyn am haprwydd y rhestr o gamau CI

Mae'r rhestr a ddefnyddir yn y cwrs hwn yn fympwyol ac yn oddrychol, dylem ychwanegu nodyn am hyn.

️ Tasg: creu cais tynnu ar gyfer y nodyn hwn

  1. Newid i gangen master.
  2. Creu cangen o'r enw bugfix.
  3. Ychwanegu testun nodyn at ddiwedd y ffeil 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. Ymrwymo'r newidiadau.
  5. Cyhoeddi'r edefyn bugfix i ystorfa bell.
  6. Creu cais tynnu a enwir Ychwanegu sylw gyda changen pen bugfix a'r gangen sylfaenmaster.

Gwnewch yn siŵr eich bod wedi gosod master yn ei fforch yr ystorfa Fel "cangen sylfaen", ni fyddaf yn ymateb i geisiadau am newidiadau i'r storfa deunyddiau cwrs.

Dyma sut y dylai eich storfa edrych.
Sefyllfaoedd nodweddiadol gydag integreiddio parhaus

Timau

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

Cymeradwyo cais tynnu "Ychwanegu sylw"

️Tasg

  1. Creu cais tynnu.
  2. Cliciwch "Uno cais tynnu".
  3. Cliciwch "Cadarnhau uno".
  4. Cliciwch "Dileu cangen", nid oes ei angen arnom mwyach.

Dyma ddiagram o ymrwymiadau ar ôl uno.
Sefyllfaoedd nodweddiadol gydag integreiddio parhaus

️ Parhewch i weithio ac ychwanegu profion

Mae cydweithio ar gais tynnu yn aml yn arwain at waith ychwanegol. Mae hyn fel arfer o ganlyniad i adolygiad cod neu drafodaeth, ond yn ein cwrs rydym yn mynd i fodelu hyn drwy ychwanegu eitemau newydd at ein rhestr o gamau CI.

Mae integreiddio parhaus fel arfer yn cynnwys rhywfaint o sylw prawf. Mae gofynion darpariaeth prawf yn amrywio ac fe'u ceir fel arfer mewn dogfen o'r enw rhywbeth fel "canllawiau cyfraniadau". Byddwn yn ei gadw'n syml ac yn ychwanegu prawf ar gyfer pob llinell yn ein rhestr wirio.

Wrth redeg aseiniadau, ceisiwch gyflawni'r profion yn gyntaf. Os gwnaethoch osod yn gywir pre-commit bachu yn gynharach, bydd y prawf sydd newydd ei ychwanegu yn cael ei redeg, yn methu, ac ni fydd unrhyw beth yn cael ei ymrwymo. Sylwch mai dyma sut rydyn ni'n gwybod bod ein profion yn profi rhywbeth mewn gwirionedd. Yn ddiddorol, pe baem yn dechrau gyda'r cod cyn y profion, gallai pasio'r profion naill ai olygu bod y cod yn gweithio yn ôl y disgwyl, neu nad oedd y profion yn profi unrhyw beth mewn gwirionedd. Hefyd, pe na baem wedi ysgrifennu'r profion yn y lle cyntaf, efallai y byddem wedi anghofio amdanynt yn gyfan gwbl, gan na fyddai dim wedi ein hatgoffa ohono.

Datblygiad a yrrir gan Brawf (TDD)

Mae TDD yn argymell ysgrifennu profion cyn cod. Mae llif gwaith nodweddiadol gan ddefnyddio TDD yn edrych fel hyn.

  1. Ychwanegu prawf.
  2. Rhedeg pob prawf a sicrhau bod y prawf newydd yn methu.
  3. Ysgrifennwch y cod.
  4. Cynhaliwch y profion, gwnewch yn siŵr bod pob prawf yn pasio.
  5. Ailffactoriwch eich cod.
  6. Ailadrodd.

Oherwydd bod canlyniadau profion sy'n methu fel arfer yn cael eu dangos mewn coch, a'r rhai a basiodd fel arfer yn cael eu dangos mewn gwyrdd, gelwir y cylchred hefyd yn adweithydd coch-gwyrdd.

️Tasg

Yn gyntaf, ceisiwch gyflawni'r profion a gadael iddynt fethu, yna ychwanegwch ac ymrwymo testun y rhestr camau CI ei hun. Fe welwch fod y profion yn mynd heibio ("gwyrdd").
Yna cyhoeddwch y cod newydd i'r ystorfa bell a gwyliwch y profion yn rhedeg yn y rhyngwyneb GitHub ar waelod y drafodaeth cais tynnu a'r diweddariad statws PR.

  1. Newid i gangen feature.
  2. Ychwanegwch y profion hyn at ci.test.js ar ôl yr alwad olaf 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. Ceisiwch gyflawni'r profion. Os pre-commit bachyn wedi'i osod, bydd yr ymgais ymrwymo yn methu.
  4. Yna ychwanegwch y testun hwn at 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. Gwneud ac ymrwymo newidiadau yn lleol.
  6. Postio newidiadau i'r gangen feature.

Dylech nawr gael rhywbeth fel hyn
Sefyllfaoedd nodweddiadol gydag integreiddio parhaus

Timau


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

Cyfuno gwrthdaro

Ewch i Cais am Newid Adolygiad camau.

Er na wnaethom unrhyw beth o'i le a bod y profion ar gyfer ein cod wedi pasio, ni allwn uno'r gangen o hyd feature и master. Mae'n oherwydd y llinyn arall bugfix ei huno â master tra roeddem yn gweithio ar y PR hwn.
Mae hyn yn creu sefyllfa lle mae'r gangen anghysbell master mae ganddo fersiwn mwy diweddar na'r un y seiliwyd y gangen arno feature. Oherwydd hyn ni allwn ailddirwyn PEN yn unig master i ddiwedd yr edefyn feature. Yn y sefyllfa hon, mae angen inni naill ai uno neu gymhwyso ymrwymiadau feature ailseilio master. Gall GitHub berfformio uno awtomatig os nad oes unrhyw wrthdaro. Ysywaeth, yn ein sefyllfa ni, mae gan y ddwy gangen newidiadau cystadleuol yn y ffeil ci.md. Gelwir y sefyllfa hon yn wrthdaro uno, ac mae angen inni ei datrys â llaw.

Cyfuno neu ailosod

Cyfuno

  • Yn creu ymrwymiad uno ychwanegol ac yn arbed yr hanes gwaith.
    • Yn cadw ymrwymiadau gwreiddiol canghennau gyda'u stampiau amser a'u hawduron gwreiddiol.
    • Yn arbed yr SHA o ymrwymiadau a dolenni iddynt mewn trafodaethau cais am newid.
  • Angen datrys gwrthdaro un-amser.
  • Yn gwneud y stori yn aflinol.
    • Gall y stori fod yn anodd ei darllen oherwydd y nifer fawr o ganghennau (sy'n atgoffa rhywun o gebl IDE).
    • Yn gwneud dadfygio awtomatig yn fwy anodd, e.e. git bisect yn llai defnyddiol - dim ond yr ymrwymiad uno fydd yn dod o hyd iddo.

Ad-daliad

  • Mae replays yn ymrwymo o'r gangen gyfredol ar ben y gangen sylfaen un ar ôl y llall.
    • Cynhyrchir ymrwymiadau newydd gyda SHAs newydd, gan achosi i'r ymrwymiadau yn GitHub gyd-fynd â'r ceisiadau tynnu gwreiddiol, ond nid y sylwadau cyfatebol.
    • Gellir ailgyfuno ac addasu ymrwymiadau yn y broses, neu hyd yn oed eu huno yn un.
  • Efallai y bydd angen datrys gwrthdaro lluosog.
  • Yn eich galluogi i gynnal stori linol.
    • Efallai y bydd y stori yn haws i'w darllen cyn belled nad yw'n rhy hir heb unrhyw reswm rhesymol.
    • Mae dadfygio a datrys problemau awtomatig ychydig yn haws: yn ei gwneud hi'n bosibl git bisect, yn gallu gwneud dychweliadau awtomatig yn gliriach ac yn fwy rhagweladwy.
  • Yn gofyn am gyhoeddi cangen ag ymrwymiadau mudol gyda baner --force pan gaiff ei ddefnyddio gyda cheisiadau tynnu.

Yn nodweddiadol, mae timau'n cytuno i ddefnyddio'r un strategaeth bob amser pan fydd angen iddynt gyfuno newidiadau. Gallai hyn fod yn gyfuniad "pur" neu ymrwymiad "pur" ar ei ben, neu rywbeth yn y canol, fel ymrwymo ar ben yn rhyngweithiol (git rebase -i) yn lleol ar gyfer canghennau nas cyhoeddwyd i'r gadwrfa gyhoeddus, ond uno ar gyfer canghennau "cyhoeddus".

Yma byddwn yn defnyddio uno.

️Tasg

  1. Sicrhewch fod y cod mewn cangen leol master diweddaru o gadwrfa bell.
  2. Newid i gangen feature.
  3. Cychwyn uno â changen master. Mae gwrthdaro uno oherwydd newidiadau cystadleuol i'r ci.md.
  4. Datrys y gwrthdaro fel bod ein rhestr o gamau CI a nodyn amdano yn aros yn y testun.
  5. Cyhoeddi ymrwymiad uno i gangen anghysbell feature.
  6. Gwiriwch statws y cais tynnu yn y GitHub UI ac aros nes bod yr uno wedi'i ddatrys.

Timau

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

Swydd ardderchog!

Rydych chi wedi gorffen gyda'r rhestr a nawr mae angen i chi gymeradwyo'r cais tynnu i mewn master.

️ Tasg: Cymeradwyo cais tynnu "Adolygiad Camau"

  1. Agor cais tynnu.
  2. Cliciwch "Uno cais tynnu".
  3. Cliciwch "Cadarnhau uno".
  4. Cliciwch "Dileu cangen" gan nad oes ei angen arnom mwyach.

Dyma eich cadwrfa ar hyn o bryd
Sefyllfaoedd nodweddiadol gydag integreiddio parhaus

Gwall cynnyrch

Dywedir “gellir defnyddio profion i ddangos presenoldeb gwallau, ond byth i ddangos eu habsenoldeb.” Er i ni gael profion ac na ddangoson nhw unrhyw wallau i ni, daeth byg llechwraidd i mewn i gynhyrchu.

Mewn sefyllfa o'r fath, mae angen i ni ofalu am:

  • beth sy'n cael ei ddefnyddio wrth gynhyrchu;
  • cod yn yr edefyn master gyda gwall, y gall datblygwyr ddechrau gwaith newydd ohono.

A ddylwn i rolio'n ôl neu ei drwsio yn y fersiwn nesaf?

Rholio'n ôl yw'r broses o ddefnyddio fersiwn gynharach dda hysbys i gynhyrchu a dychwelyd ymrwymiadau sy'n cynnwys y gwall. "Fixing forward" yw ychwanegu atgyweiriad i'r master a defnyddio'r fersiwn newydd cyn gynted â phosibl. Oherwydd bod APIs a sgemâu cronfa ddata yn newid wrth i god gael ei ddefnyddio i gynhyrchu, gyda darpariaeth barhaus a sylw prawf da, mae treiglo'n ôl fel arfer yn llawer anoddach a pheryglus na'i drwsio yn y fersiwn nesaf.

Gan nad yw treigl yn ôl yn peri unrhyw risg yn ein hachos ni, byddwn yn mynd y llwybr hwn, oherwydd mae'n caniatáu i ni

  • trwsio'r gwall ar y cynnyrch cyn gynted â phosibl;
  • gwneud cod i mewn master addas ar unwaith ar gyfer dechrau swydd newydd.

️Tasg

  1. Newid i gangen master yn lleol.
  2. Diweddaru'r ystorfa leol o'r ystorfa bell.
  3. Dychwelyd yr ymrwymiad i uno cysylltiadau cyhoeddus Adolygiad camau в master.
  4. Cyhoeddi newidiadau i gadwrfa bell.

Dyma hanes ystorfa gydag ymrwymiad uno wedi'i ddychwelyd
Sefyllfaoedd nodweddiadol gydag integreiddio parhaus

Timau

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

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

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

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

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

️ Hunan-brawf

Sicrhewch hynny ci.md bellach yn cynnwys y testun "byg slei" ar ôl dychwelyd ymrwymiad uno.

Trwsiwch y rhestr o gamau CI a'i dychwelyd i'r meistr

Rydym wedi gwrthdroi ymrwymiad uno'r gangen yn llwyr. feature. Y newyddion da yw nad oes gennym ni ddim camgymeriad erbyn hyn master. Y newyddion drwg yw bod ein rhestr werthfawr o gamau integreiddio parhaus wedi mynd hefyd. Felly, yn ddelfrydol, mae angen inni gymhwyso'r atgyweiriad i'r ymrwymiadau o feature a dychwelyd iddynt master ynghyd â'r atgyweiriad.

Gallwn fynd i’r afael â’r broblem mewn gwahanol ffyrdd:

  • dychwelyd ymrwymiad sy'n dadwneud uno feature с master;
  • symud yn ymrwymo o'r cyntaf feature.

Mae gwahanol dimau datblygu yn defnyddio gwahanol ddulliau yn yr achos hwn, ond byddwn yn symud ymrwymiadau defnyddiol i gangen ar wahân ac yn creu cais tynnu ar wahân ar gyfer y gangen newydd hon.

️Tasg

  1. Creu edefyn o'r enw feature-fix a newid iddo.
  2. Ymfudo pob ymrwymiad o'r gangen flaenorol feature i edefyn newydd. Datrys gwrthdaro uno a ddigwyddodd yn ystod y mudo.

    Sefyllfaoedd nodweddiadol gydag integreiddio parhaus

  3. Ychwanegu prawf atchweliad i ci.test.js:

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

  4. Cynhaliwch y profion yn lleol i sicrhau nad ydynt yn methu.
  5. Tynnwch y testun "with a sneaky bug" i mewn ci.md.
  6. Ychwanegu newidiadau prawf a newidiadau rhestr cam i'r mynegai a'u hymrwymo.
  7. Cyhoeddi'r gangen i gadwrfa bell.

Dylech chi gael rhywbeth tebyg i hyn yn y pen draw:
Sefyllfaoedd nodweddiadol gydag integreiddio parhaus

Timau

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

Creu cais tynnu.

Creu cais tynnu gyda theitl Trwsio'r nodwedd. Gosod feature-fix fel "cangen pen" a master fel "cangen sylfaen".
Arhoswch tra bydd y profion wedi'u cwblhau. Gallwch weld statws y profion ar waelod y drafodaeth PR.

Gwnewch yn siŵr eich bod wedi gosod master yn ei fforch yr ystorfa Fel "cangen sylfaen", ni fyddaf yn ymateb i geisiadau am newidiadau i'r storfa deunyddiau cwrs.

Cymeradwyo cais tynnu "Trwsio'r nodwedd"

Diolch am gywiro! Cymeradwywch y newidiadau i master o gais tynnu.

️Tasg

  1. Cliciwch "Uno cais tynnu".
  2. Cliciwch "Cadarnhau uno".
  3. Cliciwch "Dileu cangen" gan nad oes ei angen arnom mwyach.

Dyma beth ddylech chi ei gael ar hyn o bryd.
Sefyllfaoedd nodweddiadol gydag integreiddio parhaus

Llongyfarchiadau!

Rydych chi wedi cwblhau'r holl gamau y mae pobl fel arfer yn eu cymryd yn ystod integreiddio parhaus.

Os byddwch chi'n sylwi ar unrhyw broblemau gyda'r cwrs neu'n gwybod sut i'w wella, crewch broblem yn storfeydd gyda deunyddiau cwrs. Mae gan y cwrs hwn hefyd fersiwn rhyngweithiol defnyddio GitHub Learning Lab fel llwyfan.

Ffynhonnell: hab.com

Ychwanegu sylw