Aṣoju awọn ipo pẹlu lemọlemọfún Integration

Njẹ o ti kọ ẹkọ awọn aṣẹ Git ṣugbọn o fẹ lati fojuinu bawo ni iṣọpọ ilọsiwaju (CI) ṣe n ṣiṣẹ ni otitọ? Tabi boya o fẹ lati mu awọn iṣẹ ojoojumọ rẹ dara si? Ẹkọ yii yoo fun ọ ni awọn ọgbọn adaṣe ni isọpọ igbagbogbo nipa lilo ibi ipamọ GitHub kan. Iṣẹ-ẹkọ yii ko pinnu lati jẹ oluṣeto ti o le tẹ larọwọto; ni ilodi si, iwọ yoo ṣe awọn iṣe kanna ti eniyan ṣe ni iṣẹ gangan, ni ọna kanna ti wọn ṣe. Mo ti yoo se alaye awọn yii bi o ti lọ nipasẹ awọn igbesẹ lowo.

Kini a ṣe?

Bi a ṣe nlọsiwaju, a yoo maa ṣẹda atokọ ti awọn igbesẹ CI aṣoju, eyiti o jẹ ọna nla lati ranti atokọ yii. Ni awọn ọrọ miiran, a yoo ṣẹda atokọ ti awọn iṣe ti awọn olupilẹṣẹ ṣe lakoko ṣiṣe iṣọpọ lemọlemọfún, ṣiṣe iṣọpọ lemọlemọfún. A yoo tun lo eto ti o rọrun ti awọn idanwo lati mu ilana CI wa sunmọ ti gidi.

GIF yii ni ọna ṣiṣe n ṣe afihan awọn iṣẹ inu ibi ipamọ rẹ bi o ṣe nlọsiwaju nipasẹ iṣẹ-ẹkọ naa. Bi o ti le ri, ko si ohun idiju nibi ati ki o nikan pataki julọ.

Aṣoju awọn ipo pẹlu lemọlemọfún Integration

Iwọ yoo lọ nipasẹ awọn oju iṣẹlẹ CI boṣewa wọnyi:

  • Ṣiṣẹ lori ẹya ara ẹrọ;
  • Ohun elo ti awọn idanwo adaṣe lati rii daju didara;
  • Imuse ti ayo -ṣiṣe;
  • Ipinnu rogbodiyan nigbati o ba dapọ awọn ẹka (idapọpọ rogbodiyan);
  • Aṣiṣe waye ni agbegbe iṣelọpọ.

Kini iwọ yoo kọ?

Iwọ yoo ni anfani lati dahun awọn ibeere wọnyi:

  • Kini isọdọkan lemọlemọfún (CI)?
  • Awọn iru awọn idanwo adaṣe wo ni a lo ni CI, ati ni idahun si awọn iṣe wo ni wọn fa?
  • Kini awọn ibeere fifa ati nigbawo ni wọn nilo?
  • Kini Idagbasoke Idagbasoke Idanwo (TDD) ati bawo ni o ṣe ni ibatan si CI?
  • Ṣe Mo yẹ ki o dapọ tabi tun awọn ayipada ba?
  • Yipada sẹhin tabi ṣe atunṣe ni ẹya atẹle?

Ni akọkọ Mo tumọ awọn nkan bii “awọn ibeere fa” nibi gbogbo, ṣugbọn bi abajade Mo pinnu lati da awọn gbolohun pada ni Gẹẹsi ni awọn aaye kan lati dinku iwọn isinwin ninu ọrọ naa. Emi yoo ma lo “programmer surzhik” bii ọrọ-ìse agbayanu naa “ṣe” nibiti awọn eniyan ti lo ni iṣẹ ṣiṣe.

Kini isọdọkan lemọlemọfún?

Itẹsiwaju Integration, tabi CI, jẹ iṣe imọ-ẹrọ ninu eyiti ọmọ ẹgbẹ kọọkan ṣepọ koodu wọn sinu ibi ipamọ ti o wọpọ ni o kere ju lẹẹkan lojoojumọ, ati pe koodu abajade gbọdọ ni o kere ju kọ laisi awọn aṣiṣe.

Awọn iyapa wa nipa ọrọ yii

Ojuami ti ariyanjiyan ni igbohunsafẹfẹ ti iṣọpọ. Diẹ ninu awọn jiyan pe koodu idapọ nikan ni ẹẹkan ọjọ kan ko to lati ṣepọ ni igbagbogbo. Apeere kan ni a fun ni ẹgbẹ kan nibiti gbogbo eniyan gba koodu tuntun ni owurọ ati ṣepọ rẹ lẹẹkan ni irọlẹ. Lakoko ti eyi jẹ atako ti o ni oye, o gbagbọ ni gbogbogbo pe asọye lẹẹkan-ọjọ kan jẹ iwulo to wulo, pato, ati pe o dara fun awọn ẹgbẹ ti awọn titobi oriṣiriṣi.

Atako miiran ni pe C ++ kii ṣe ede nikan ti a lo ninu idagbasoke, ati pe o kan nilo apejọ ti ko ni aṣiṣe bi ọna afọwọsi jẹ alailagbara. Diẹ ninu ṣeto awọn idanwo (fun apẹẹrẹ, awọn idanwo ẹyọkan ti a ṣe ni agbegbe) gbọdọ tun pari ni aṣeyọri. Ni akoko yii, agbegbe n lọ si ṣiṣe eyi ni ibeere, ati ni ọjọ iwaju “awọn idanwo ile + apakan” yoo ṣee ṣe iṣe ti o wọpọ, ti ko ba si tẹlẹ.

Itẹsiwaju Integration yato si lati lemọlemọfún ifijiṣẹ (Ifijiṣẹ Ilọsiwaju, CD) ni pe ko nilo oludije itusilẹ lẹhin ọmọ iṣọpọ kọọkan.

Akojọ awọn igbesẹ ti a yoo lo jakejado iṣẹ ikẹkọ naa

  1. Fa ni titun koodu. Ṣẹda ẹka lati master. Bẹrẹ ṣiṣẹ.
  2. Ṣẹda awọn adehun lori ẹka tuntun rẹ. Kọ ati idanwo ni agbegbe. Kọja? Lọ si nigbamii ti igbese. Ikuna? Ṣe atunṣe awọn aṣiṣe tabi awọn idanwo ati gbiyanju lẹẹkansi.
  3. Titari si ibi ipamọ latọna jijin rẹ tabi ẹka latọna jijin.
  4. Ṣẹda a fa ìbéèrè. Ṣe ijiroro lori awọn ayipada, ṣafikun awọn adehun diẹ sii bi ijiroro ti n tẹsiwaju. Ṣe awọn idanwo kọja lori ẹka ẹya.
  5. Dapọ / rebase ṣe lati titunto si. Ṣe awọn idanwo kọja lori abajade apapọ.
  6. Firanṣẹ lati ẹka ẹya si iṣelọpọ.
  7. Ti ohun gbogbo ba dara ni iṣelọpọ fun igba diẹ, dapọ awọn ayipada si titunto si.

Aṣoju awọn ipo pẹlu lemọlemọfún Integration

️ Igbaradi

Rii daju pe o ni software ti o tọ

Lati gba ikẹkọ yii iwọ yoo nilo Node.js и Git onibara.

O le lo eyikeyi alabara Git, ṣugbọn Emi yoo pese awọn aṣẹ fun laini aṣẹ nikan.

Rii daju pe o ni alabara Git ti o fi sori ẹrọ ti o ṣe atilẹyin laini aṣẹ

Ti o ko ba ni alabara Git kan ti o ṣe atilẹyin laini aṣẹ, o le wa awọn ilana fifi sori ẹrọ nibi.

Ṣetan ibi ipamọ naa

Iwọ yoo nilo lati ṣẹda ẹda ti ara ẹni (orita) ibi ipamọ awoṣe pẹlu koodu fun dajudaju lori GitHub. Jẹ ki a gba lati pe ẹda ti ara ẹni yii ibi ipamọ dajudaju.

Ti ṣe? Ti o ko ba ti yi awọn eto aiyipada pada, o ṣee ṣe pe ibi ipamọ iṣẹ rẹ ni a pe continuous-integration-team-scenarios-students, o wa ninu akọọlẹ GitHub rẹ ati pe URL naa dabi eyi

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

Emi yoo kan pe adirẹsi yii <URL репозитория>.

Igun biraketi bi <тут> yoo tunmọ si wipe o gbọdọ ropo iru ikosile pẹlu awọn yẹ iye.

Rii daju pe Awọn iṣe GitHub to wa fun ibi ipamọ iṣẹ-ẹkọ yii. Ti wọn ko ba ṣiṣẹ, jọwọ mu wọn ṣiṣẹ nipa tite bọtini nla ni aarin oju-iwe naa, eyiti o le de ọdọ nipa tite Awọn iṣe ni wiwo GitHub.

Iwọ kii yoo ni anfani lati pari iṣẹ-ẹkọ naa ni atẹle awọn ilana mi ti Awọn iṣe GitHub ko ba ṣiṣẹ.

Aṣoju awọn ipo pẹlu lemọlemọfún Integration

O le nigbagbogbo lo agbara GitHub lati ṣe Markdown lati rii ipo lọwọlọwọ ti atokọ ti a n ṣajọ nibi

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

Nipa awọn idahun

Lakoko ti ọna ti o dara julọ lati pari iṣẹ-ẹkọ yii ni lati ṣe funrararẹ, o le ni awọn iṣoro diẹ.

Ti o ba lero pe o ko loye kini lati ṣe ati pe ko le tẹsiwaju, o le wo inu okun naa solution, eyiti o wa ninu ibi ipamọ ibẹrẹ rẹ.
Jọwọ maṣe dapọ solution в master nigba ti dajudaju. O le lo ẹka yii lati mọ kini lati ṣe, tabi lati ṣe afiwe koodu rẹ pẹlu ti onkọwe, ni lilo gbogbo awọn agbara ti Git fun wa. Ti o ba sọnu patapata, o le rọpo ẹka rẹ patapata master lori ẹka kan solution ati lẹhinna tunto ilana iṣẹ rẹ si igbesẹ ipa-ọna ti o nilo.

Lo eyi nikan ti o ba nilo rẹ gaan

Fi koodu rẹ silẹ

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

Awọn aṣẹ wọnyi

  • lorukọ mii master в master-backup;
  • lorukọ mii solution в master;
  • ṣayẹwo si titun kan ẹka master ki o si tun kọ awọn akoonu ti awọn ṣiṣẹ liana;
  • Ṣẹda ẹka "ojutu" lati "titunto si" (eyiti o jẹ "ojutu") ti o ba nilo ẹka "ojutu" ni ojo iwaju.

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

Lẹhin awọn igbesẹ wọnyi o le lo git log master lati mọ iru iṣẹ ti o nilo.
O le tun ilana ilana iṣẹ rẹ ṣe si iṣẹ yii bii eyi:

git reset --hard <the SHA you need>

Ti o ba ni idunnu pẹlu abajade, ni aaye kan iwọ yoo nilo lati ṣe atẹjade ẹya rẹ ti ibi ipamọ si ibi ipamọ latọna jijin. Maṣe gbagbe lati pato ẹka latọna jijin nigbati o ba ṣe eyi.

git push --force origin master

Jọwọ ṣe akiyesi pe a lo git push --force. Ko ṣee ṣe pe iwọ yoo fẹ lati ṣe eyi nigbagbogbo, ṣugbọn a ni oju iṣẹlẹ kan pato nibi pẹlu olumulo ibi ipamọ kan ti, ni afikun, loye ohun ti o n ṣe.

Bibẹrẹ ṣiṣẹ

Aṣoju awọn ipo pẹlu lemọlemọfún Integration

Jẹ ki a bẹrẹ ṣiṣe akojọpọ atokọ wa ti awọn igbesẹ CI. Ni deede o yoo bẹrẹ igbesẹ yii nipa ṣiṣe ayẹwo ẹya tuntun ti koodu lati ibi ipamọ latọna jijin, ṣugbọn a ko ni ibi ipamọ agbegbe sibẹsibẹ, nitorinaa a ṣe ẹda oniye lati isakoṣo latọna jijin dipo.

️ Iṣẹ-ṣiṣe: ṣe imudojuiwọn ibi ipamọ agbegbe, ṣẹda ẹka kan lati master, bẹrẹ ṣiṣẹ

  1. Oniiye ibi ipamọ dajudaju lati <URL репозитория>.
  2. Ṣiṣe npm install ninu itọsọna ibi ipamọ papa; A nilo rẹ lati fi sori ẹrọ Jest, eyiti a lo lati ṣiṣe awọn idanwo.
  3. Ṣẹda ẹka kan ki o lorukọ rẹ feature. Yipada si okun yi.
  4. Ṣafikun koodu idanwo si ci.test.js laarin comments béèrè mi lati ṣe eyi.

    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. Ṣafikun ọrọ pẹlu awọn igbesẹ mẹrin akọkọ si faili naa 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.  

    Awọn ofin

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

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

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

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

Ṣẹda awọn adehun lori ẹka tuntun, kọ ati idanwo ni agbegbe

A yoo ṣeto awọn idanwo lati ṣiṣe ṣaaju ṣiṣe, ati lẹhinna ṣe koodu naa.

Awọn oju iṣẹlẹ deede nigbati awọn idanwo nṣiṣẹ laifọwọyi

  • Ni agbegbe:
    • Tẹsiwaju tabi ni idahun si awọn iyipada koodu ti o yẹ;
    • Lori fifipamọ (fun itumọ tabi awọn ede ti a kojọ JIT);
    • Lakoko apejọ (nigbati o ba nilo akopọ);
    • Lori ifarabalẹ;
    • Nigbati o ba ṣe atẹjade si ibi ipamọ ti o pin.

  • Lori olupin kikọ tabi agbegbe ile:
    • Nigbati koodu ti wa ni atẹjade si ẹka ti ara ẹni/ibi ipamọ.
    • Awọn koodu ni yi o tẹle ara ti wa ni idanwo.
    • Abajade ti o pọju ti iṣọpọ jẹ idanwo (nigbagbogbo pẹlu master).
    • Gẹgẹbi ipele iṣọpọ lemọlemọfún / opo gigun ti epo ifijiṣẹ tẹsiwaju

Ni deede, iyara yara idanwo kan nṣiṣẹ, diẹ sii nigbagbogbo o le ni anfani lati ṣiṣe. Pinpin ipele aṣoju le dabi eyi.

  • Awọn idanwo ẹyọ iyara - lakoko kikọ, ni opo gigun ti epo CI
  • Awọn idanwo ẹyọ ti o lọra, paati iyara ati awọn idanwo isọpọ - lori ifaramọ, ninu opo gigun ti epo CI
  • Awọn paati ti o lọra ati awọn idanwo isọpọ - ni opo gigun ti epo CI
  • Idanwo aabo, idanwo fifuye ati awọn idanwo akoko-n gba tabi gbowolori - ni awọn opo gigun ti CI / CD, ṣugbọn ni awọn ipo kan / awọn ipele / awọn opo gigun ti ikole, fun apẹẹrẹ, nigbati o ngbaradi oludibo itusilẹ tabi nigbati o nṣiṣẹ pẹlu ọwọ.

️Ṣiṣẹ

Mo daba ṣiṣe awọn idanwo pẹlu ọwọ ni akọkọ nipa lilo aṣẹ naa npm test. Lẹhin iyẹn, jẹ ki a ṣafikun git kio lati ṣiṣe awọn idanwo wa lori ifaramọ. Apeja kan wa: Awọn kio Git ko jẹ apakan ti ibi ipamọ ati nitorinaa ko le ṣe cloned lati GitHub pẹlu iyoku awọn ohun elo ikẹkọ. Lati fi sori ẹrọ kio o nilo lati ṣiṣe install_hook.sh tabi daakọ faili naa repo/hooks/pre-commit to agbegbe liana .git/hooks/.
Nigbati o ba ṣe, iwọ yoo rii pe awọn idanwo ti ṣiṣẹ ati pe wọn ṣayẹwo lati rii boya awọn koko-ọrọ kan wa ninu atokọ naa.

  1. Ṣiṣe awọn idanwo pẹlu ọwọ nipa ṣiṣe aṣẹ naa npm test ninu rẹ dajudaju ibi ipamọ folda. Rii daju pe awọn idanwo naa ti pari.
  2. Ṣeto kio ifaramọ (ikọ-iṣaaju iṣaaju) nipasẹ ṣiṣe install_hook.sh.
  3. Fi awọn ayipada rẹ si ibi ipamọ agbegbe rẹ.
  4. Rii daju pe awọn idanwo ti wa ni ṣiṣe ṣaaju ṣiṣe.

Ibi ipamọ rẹ yẹ ki o dabi eyi lẹhin ti o tẹle awọn igbesẹ wọnyi.
Aṣoju awọn ipo pẹlu lemọlemọfún Integration

Awọn ofin

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

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

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

Ṣe atẹjade koodu si ibi ipamọ latọna jijin tabi ẹka jijin

Ni kete ti wọn ba ti ṣiṣẹ ni agbegbe, awọn olupilẹṣẹ nigbagbogbo jẹ ki koodu wọn wa ni gbangba ki o le bajẹ ṣepọ pẹlu gbogbo eniyan. Pẹlu GitHub, eyi ni deede waye nipasẹ titẹjade iṣẹ naa si boya ẹda ti ara ẹni ti ibi ipamọ (orita ti ara ẹni) tabi ẹka ti ara ẹni.

  • Pẹlu awọn orita, olupilẹṣẹ ṣe ere ibeji ibi ipamọ pinpin latọna jijin, ṣiṣẹda ẹda isakoṣo latọna jijin ti ara ẹni, ti a tun mọ si orita kan. Lẹhinna o ṣe ibeji ibi ipamọ ti ara ẹni lati ṣiṣẹ pẹlu agbegbe. Nigbati iṣẹ naa ba ti pari ati pe a ṣe awọn iṣẹ, o tẹ wọn sinu orita rẹ, nibiti wọn wa fun awọn miiran ati pe o le ṣepọ sinu ibi ipamọ ti o wọpọ. Ọna yii jẹ lilo nigbagbogbo ni awọn iṣẹ akanṣe orisun ṣiṣi lori GitHub. O tun lo ninu iṣẹ ilọsiwaju mi ​​[Iṣẹ Ẹgbẹ ati CI pẹlu Git] (http://devops.redpill.solutions/).
  • Ona miiran ni lati lo ibi ipamọ latọna jijin kan nikan ati pe o ka ẹka nikan master ibi ipamọ ti a pin "ni idaabobo". Ni oju iṣẹlẹ yii, awọn olupilẹṣẹ kọọkan ṣe atẹjade koodu wọn si awọn ẹka ti ibi ipamọ latọna jijin ki awọn miiran le wo koodu yii, ti ohun gbogbo ba wa ni ibere, dapọ pẹlu master ibi ipamọ ti o pin.

Ninu iṣẹ-ẹkọ pato yii, a yoo lo iṣan-iṣẹ ti o nlo awọn ẹka.

Jẹ ki ká jade wa koodu.

️Ṣiṣẹ

  • Ṣe atẹjade awọn ayipada si ẹka jijin pẹlu orukọ kanna bi ẹka iṣẹ rẹ

Awọn ofin

git push --set-upstream origin feature

Ṣẹda ibeere fifa

Ṣẹda ibeere fifa pẹlu akọle kan Atunwo Igbesẹ... Fi sori ẹrọ feature bi "ori ẹka" ati master bi "ẹka ipilẹ".

Rii daju pe o ti fi sori ẹrọ master ninu re orita ibi ipamọ Gẹgẹbi “ẹka ipilẹ”, Emi kii yoo dahun si awọn ibeere fun awọn ayipada si ibi ipamọ awọn ohun elo dajudaju.

Ni GitHub lingo, "ẹka ipilẹ" jẹ ẹka ti o ṣe ipilẹ iṣẹ rẹ, ati "ẹka ori" jẹ ẹka ti o ni awọn iyipada ti a dabaa.

Ṣe ijiroro lori awọn ayipada, ṣafikun awọn adehun tuntun bi ijiroro naa ti n tẹsiwaju

Fa ibeere (PR)

Fa ibeere (PR) jẹ ọna lati jiroro ati koodu iwe, bakanna bi atunyẹwo koodu. Awọn ibeere fifa ni orukọ lẹhin ọna gbogbogbo ti iṣakojọpọ awọn ayipada ẹni kọọkan sinu koodu gbogbogbo. Ni deede, eniyan ṣe ibeji ibi ipamọ osise latọna jijin ti iṣẹ akanṣe ati ṣiṣẹ lori koodu ni agbegbe. Lẹhin eyi, o gbe koodu naa sinu ibi ipamọ latọna jijin ti ara ẹni ati beere lọwọ awọn ti o ni iduro fun ibi ipamọ osise lati gbe (Fa) koodu rẹ sinu awọn ibi ipamọ agbegbe wọn, nibiti wọn ṣe atunyẹwo ati o ṣee ṣepọ (lọ) tirẹ. Ilana yii tun jẹ mimọ nipasẹ awọn orukọ miiran, fun apẹẹrẹ, ìbéèrè àkópọ.

O ko ni lati lo ẹya ibeere fifa ti GitHub tabi awọn iru ẹrọ ti o jọra. Awọn ẹgbẹ idagbasoke le lo awọn ọna ibaraẹnisọrọ miiran, pẹlu ibaraẹnisọrọ oju-si-oju, awọn ipe ohun, tabi imeeli, ṣugbọn awọn idi pupọ tun wa lati lo awọn ibeere fa ara apejọ. Eyi ni diẹ ninu wọn:

  • awọn ijiroro ṣeto ti o ni ibatan si awọn iyipada koodu kan pato;
  • bi aaye lati wo awọn esi lori iṣẹ-ilọsiwaju lati ọdọ awọn autotesters mejeeji ati awọn ẹlẹgbẹ;
  • formalization ti koodu agbeyewo;
  • ki nigbamii ti o le wa jade awọn idi ati riro sile yi tabi ti nkan ti koodu.

Ni igbagbogbo o ṣẹda ibeere fifa nigba ti o nilo lati jiroro nkan kan tabi gba esi. Fun apẹẹrẹ, ti o ba n ṣiṣẹ lori ẹya ti o le ṣe imuse ni ọna ti o ju ẹyọkan lọ, o le ṣẹda ibeere fifa ṣaaju kikọ laini koodu akọkọ lati pin awọn imọran rẹ ati jiroro awọn ero rẹ pẹlu awọn alabaṣiṣẹpọ rẹ. Ti iṣẹ naa ba rọrun, ibeere fifa kan ṣii nigbati ohun kan ti ṣe tẹlẹ, ṣe, ati pe o le jiroro. Ni diẹ ninu awọn oju iṣẹlẹ, o le fẹ ṣii PR nikan fun awọn idi iṣakoso didara: lati ṣiṣe awọn idanwo adaṣe tabi bẹrẹ awọn atunwo koodu. Ohunkohun ti o pinnu, maṣe gbagbe lati @darukọ awọn eniyan ti o fẹ ifọwọsi wọn ninu ibeere fifa rẹ.

Ni deede, nigba ṣiṣẹda PR, o ṣe atẹle naa.

  • Tọkasi ohun ti o daba lati yipada ati nibo.
  • Kọ apejuwe kan ti n ṣalaye idi ti awọn iyipada. O le fẹ:
    • ṣafikun ohunkohun pataki ti ko han gbangba lati koodu, tabi nkan ti o wulo fun agbọye ọrọ-ọrọ, gẹgẹbi awọn #bugs ti o yẹ ati awọn nọmba ṣe;
    • @ darukọ ẹnikẹni ti o fẹ lati bẹrẹ ṣiṣẹ pẹlu, tabi o le @ darukọ wọn ninu awọn comments nigbamii;
    • beere lọwọ awọn ẹlẹgbẹ lati ṣe iranlọwọ pẹlu nkan kan tabi ṣayẹwo lori nkan kan pato.

Ni kete ti o ṣii PR, awọn idanwo ti a tunto lati ṣiṣẹ ni iru awọn ọran naa ni a ṣe. Ninu ọran wa, eyi yoo jẹ eto awọn idanwo kanna ti a ṣiṣẹ ni agbegbe, ṣugbọn ninu iṣẹ akanṣe gidi kan le jẹ awọn idanwo afikun ati awọn sọwedowo.

Jọwọ duro lakoko ti awọn idanwo naa ti pari. O le wo ipo awọn idanwo ni isalẹ ti ijiroro PR ni wiwo GitHub. Tẹsiwaju nigbati awọn idanwo ba ti pari.

️ Ṣafikun akọsilẹ kan nipa aileto ti atokọ ti awọn igbesẹ CI

Atokọ ti a lo ninu iṣẹ-ẹkọ yii jẹ lainidii ati ara ẹni, o yẹ ki a ṣafikun akọsilẹ kan nipa eyi.

Iṣẹ-ṣiṣe: ṣẹda ibeere fa fun asọye yii

  1. Yipada si ẹka master.
  2. Ṣẹda ẹka ti a npè ni bugfix.
  3. Ṣafikun ọrọ akọsilẹ si ipari faili naa 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. Fi awọn ayipada silẹ.
  5. Ṣe atẹjade okun bugfix si ibi ipamọ latọna jijin.
  6. Ṣẹda a fa ìbéèrè ti a npè ni Fifi kan ifesi pẹlu ẹka ori bugfix ati ẹka ipilẹmaster.

Rii daju pe o ti fi sori ẹrọ master ninu re orita ibi ipamọ Gẹgẹbi “ẹka ipilẹ”, Emi kii yoo dahun si awọn ibeere fun awọn ayipada si ibi ipamọ awọn ohun elo dajudaju.

Eyi ni ohun ti ibi ipamọ rẹ yẹ ki o dabi.
Aṣoju awọn ipo pẹlu lemọlemọfún Integration

Awọn ofin

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

Fọwọsi ibeere fifa "Ṣafikun akiyesi kan"

️Ṣiṣẹ

  1. Ṣẹda ibeere fifa.
  2. Tẹ "Dapọ ìbéèrè fa".
  3. Tẹ "Jẹrisi iṣọpọ".
  4. Tẹ "Paarẹ ẹka", a ko nilo rẹ mọ.

Eyi jẹ aworan atọka ti awọn iṣẹ lẹhin iṣọpọ kan.
Aṣoju awọn ipo pẹlu lemọlemọfún Integration

️ Jeki ṣiṣẹ ati ṣafikun awọn idanwo

Ifowosowopo lori ibeere fifa nigbagbogbo n yọrisi iṣẹ afikun. Eyi nigbagbogbo jẹ abajade ti atunyẹwo koodu tabi ijiroro, ṣugbọn ninu ipa-ọna wa a yoo ṣe awoṣe eyi nipa fifi awọn nkan tuntun kun si atokọ ti awọn igbesẹ CI wa.

Ibarapọ tẹsiwaju ni igbagbogbo jẹ diẹ ninu agbegbe idanwo. Awọn ibeere agbegbe idanwo yatọ ati pe a maa n rii ni iwe-ipamọ kan ti a pe ni nkan bii “awọn ilana idasi”. A yoo jẹ ki o rọrun ati ṣafikun idanwo fun laini kọọkan ninu atokọ ayẹwo wa.

Nigbati o ba nṣiṣẹ awọn iṣẹ iyansilẹ, gbiyanju ṣiṣe awọn idanwo ni akọkọ. Ti o ba fi sori ẹrọ daradara pre-commit kio sẹyìn, awọn rinle fi kun igbeyewo yoo wa ni ṣiṣe, yoo kuna, ati ohunkohun yoo wa ni hù. Ṣe akiyesi pe eyi ni bii a ṣe mọ pe awọn idanwo wa n ṣe idanwo ohunkan gangan. O yanilenu, ti a ba bẹrẹ pẹlu koodu ṣaaju awọn idanwo, gbigbe awọn idanwo naa le boya tumọ si pe koodu naa ṣiṣẹ bi o ti ṣe yẹ, tabi pe awọn idanwo naa ko ni idanwo ohunkohun. Pẹlupẹlu, ti a ko ba ti kọ awọn idanwo naa ni ibẹrẹ, a le ti gbagbe nipa wọn patapata, niwon ko si ohun ti yoo ti leti wa nipa rẹ.

Idagbasoke Idagbasoke Idanwo (TDD)

TDD ṣe iṣeduro kikọ awọn idanwo ṣaaju koodu. A aṣoju bisesenlo lilo TDD wulẹ bi yi.

  1. Fi idanwo kan kun.
  2. Ṣiṣe gbogbo awọn idanwo ati rii daju pe idanwo tuntun kuna.
  3. Kọ koodu naa.
  4. Ṣiṣe awọn idanwo, rii daju pe gbogbo awọn idanwo kọja.
  5. Refactor koodu rẹ.
  6. Tun.

Nitoripe awọn abajade ti awọn idanwo ti o kuna ni a maa n han ni pupa, ati awọn ti o kọja ni a maa n han ni alawọ ewe, a tun mọ iyipo naa gẹgẹbi pupa-alawọ ewe-refactor.

️Ṣiṣẹ

Ni akọkọ, gbiyanju ṣiṣe awọn idanwo naa ki o jẹ ki wọn kuna, lẹhinna ṣafikun ati ṣe ọrọ ti atokọ igbesẹ CI funrararẹ. Iwọ yoo rii pe awọn idanwo naa n kọja (“alawọ ewe”).
Lẹhinna ṣe atẹjade koodu tuntun si ibi ipamọ latọna jijin ki o wo awọn idanwo ṣiṣe ni wiwo GitHub ni isalẹ ti ijiroro ibeere fa ati imudojuiwọn ipo PR.

  1. Yipada si ẹka feature.
  2. Fi awọn idanwo wọnyi kun ci.test.js lẹhin ti o kẹhin ipe 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. Gbiyanju lati ṣe awọn idanwo naa. Ti o ba jẹ pre-commit kio ti fi sori ẹrọ, igbiyanju igbiyanju yoo kuna.
  4. Lẹhinna ṣafikun ọrọ yii si 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. Ṣe ati ṣe awọn ayipada ni agbegbe.
  6. Fi awọn ayipada ranṣẹ si ẹka naa feature.

O yẹ ki o ni nkan bayi
Aṣoju awọn ipo pẹlu lemọlemọfún Integration

Awọn ofin


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

Idapọmọra ija

Lọ si Ibere ​​Iyipada Atunwo Igbesẹ.

Paapaa botilẹjẹpe a ko ṣe ohunkohun ti ko tọ ati pe awọn idanwo fun koodu wa kọja, a ko tun le dapọ ẹka naa feature и master. O jẹ nitori okun miiran bugfix ti a dapọ pẹlu master nigba ti a n ṣiṣẹ lori PR yii.
Eleyi ṣẹda a ipo ibi ti awọn latọna eka master ni ẹya tuntun ju eyi ti a da lori ẹka naa feature. Nitori eyi a ko le kan dapada sẹhin ORI master si opin okun feature. Ni ipo yii, a nilo lati dapọ tabi lo awọn adehun feature rebase master. GitHub le ṣe awọn akojọpọ aifọwọyi ti ko ba si awọn ija. Alas, ni ipo wa, awọn ẹka mejeeji ni awọn iyipada idije ninu faili naa ci.md. Ipo yii ni a mọ bi ija iṣọpọ, ati pe a nilo lati yanju rẹ pẹlu ọwọ.

Dapọ tabi rebase

Dapọ

  • Ṣẹda afikun ifarapọ ati fi itan-akọọlẹ iṣẹ pamọ.
    • Ṣe itọju awọn adehun atilẹba ti awọn ẹka pẹlu awọn aami akoko atilẹba wọn ati awọn onkọwe.
    • Ṣafipamọ SHA ti awọn adehun ati awọn ọna asopọ si wọn ni awọn ijiroro ibeere iyipada.
  • Nbeere ipinnu ija-akoko kan.
  • Ṣe itan naa kii ṣe laini.
    • Itan naa le nira lati ka nitori nọmba nla ti awọn ẹka (ni iranti ti okun IDE).
    • Mu ki n ṣatunṣe aṣiṣe laifọwọyi le nira, fun apẹẹrẹ. git bisect kere wulo - o yoo nikan ri awọn àkópọ ṣẹ.

Atunkun

  • Replays ṣẹ lati lọwọlọwọ ẹka lori oke ti awọn mimọ ẹka ọkan lẹhin ti miiran.
    • Awọn adehun tuntun pẹlu awọn SHA tuntun ti wa ni ipilẹṣẹ, nfa awọn iṣẹ ṣiṣe ni GitHub lati baamu awọn ibeere fa atilẹba, ṣugbọn kii ṣe awọn asọye ti o baamu.
    • Awọn ifaramọ le jẹ atunko ati tunṣe ninu ilana, tabi paapaa dapọ si ọkan.
  • Ọpọ ija le nilo lati yanju.
  • Gba ọ laaye lati ṣetọju itan laini kan.
    • Itan naa le rọrun lati ka niwọn igba ti ko ba gun ju laisi idi ti o ni oye.
    • N ṣatunṣe aṣiṣe aifọwọyi ati laasigbotitusita jẹ rọrun diẹ: jẹ ki o ṣee ṣe git bisect, le jẹ ki awọn yiyipo laifọwọyi ṣe kedere ati asọtẹlẹ diẹ sii.
  • Nbeere titẹjade ẹka kan pẹlu awọn adehun iṣilọ pẹlu asia kan --force nigba ti lo pẹlu fa ibeere.

Ni deede, awọn ẹgbẹ gba lati lo ilana kanna nigbagbogbo nigbati wọn nilo lati dapọ awọn ayipada. Eyi le jẹ idapọ “funfun” tabi ṣe “mimọ” lori oke, tabi nkankan laarin, gẹgẹ bi ṣiṣe ifaramo lori oke ni ibaraenisọrọ (git rebase -i) ni agbegbe fun awọn ẹka ti a ko tẹjade si ibi ipamọ gbogbo eniyan, ṣugbọn dapọ fun awọn ẹka “gbangba”.

Nibi a yoo lo apapọ.

️Ṣiṣẹ

  1. Rii daju pe koodu wa ni ẹka agbegbe kan master imudojuiwọn lati kan latọna ibi ipamọ.
  2. Yipada si ẹka feature.
  3. Ṣe ipilẹṣẹ akojọpọ pẹlu ẹka kan master. A dapọ rogbodiyan nitori idije ayipada si awọn ci.md.
  4. Yanju ija naa ki atokọ wa ti awọn igbesẹ CI mejeeji ati akọsilẹ kan nipa rẹ wa ninu ọrọ naa.
  5. Ṣe atẹjade adehun idapọ si ẹka ti o jina feature.
  6. Ṣayẹwo ipo ti ibeere fifa ni GitHub UI ki o duro titi ti idapọmọra yoo fi yanju.

Awọn ofin

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

Ise nla!

O ti ṣe pẹlu atokọ ati ni bayi o nilo lati fọwọsi ibeere fifa wọle master.

Iṣẹ-ṣiṣe: fọwọsi ibeere fifa "Atunyẹwo Awọn igbesẹ"

  1. Ṣii ibeere fifa.
  2. Tẹ "Dapọ ìbéèrè fa".
  3. Tẹ "Jẹrisi iṣọpọ".
  4. Tẹ "Paarẹ ẹka" niwon a ko nilo rẹ mọ.

Eyi ni ibi ipamọ rẹ ni akoko yii
Aṣoju awọn ipo pẹlu lemọlemọfún Integration

Aṣiṣe ọja

O sọ pe “a le lo idanwo lati ṣafihan wiwa awọn aṣiṣe, ṣugbọn lati ṣafihan isansa wọn rara.” Paapaa botilẹjẹpe a ni awọn idanwo ati pe wọn ko fihan wa awọn aṣiṣe, kokoro aibikita kan ti wọ inu iṣelọpọ.

Ni iru iṣẹlẹ bẹẹ, a nilo lati tọju:

  • ohun ti a gbejade ni iṣelọpọ;
  • koodu ni o tẹle ara master pẹlu aṣiṣe, lati eyiti awọn olupilẹṣẹ le bẹrẹ iṣẹ tuntun.

Ṣe Mo yẹ ki o yi pada tabi ṣe atunṣe ni ẹya atẹle?

Yiyi pada jẹ ilana ti imuṣiṣẹ ẹya ti tẹlẹ ti o dara ti o mọ si iṣelọpọ ati awọn iṣe ti o pada ti o ni aṣiṣe ninu. "Titunṣe siwaju" ni afikun ti a fix si awọn master ati ki o ran awọn titun ti ikede bi ni kete bi o ti ṣee. Nitori awọn API ati awọn ero data data yipada bi koodu ti gbe lọ si iṣelọpọ, pẹlu ifijiṣẹ lilọsiwaju ati agbegbe idanwo to dara, yiyi pada jẹ igbagbogbo nira pupọ ati eewu ju titunṣe ni ẹya atẹle.

Niwọn igba ti yiyi pada ko ni ewu eyikeyi ninu ọran wa, a yoo lọ ni ọna yii, nitori o gba wa laaye

  • ṣatunṣe aṣiṣe lori ọja ni kete bi o ti ṣee;
  • ṣe koodu sinu master lẹsẹkẹsẹ o dara fun bẹrẹ iṣẹ tuntun kan.

️Ṣiṣẹ

  1. Yipada si ẹka master tibile.
  2. Ṣe imudojuiwọn ibi ipamọ agbegbe lati ibi ipamọ latọna jijin.
  3. Yipada ifarapọ PR pada Atunwo Igbesẹ в master.
  4. Ṣe atẹjade awọn ayipada si ibi ipamọ latọna jijin.

Eyi ni itan-akọọlẹ ti ibi-ipamọ kan pẹlu ifarapọ ti o da
Aṣoju awọn ipo pẹlu lemọlemọfún Integration

Awọn ofin

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

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

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

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

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

️ Idanwo ara ẹni

Rii daju pe ci.md ko si ni ọrọ "bug sneaky" mọ lẹhin ti o tun ṣe atunṣe ifarapọ kan.

Ṣe atunṣe atokọ ti awọn igbesẹ CI ki o da pada si oluwa

A ti ṣe atunṣe ifarapọ ti ẹka naa patapata. feature. Irohin ti o dara ni pe a ko ni aṣiṣe ni bayi master. Awọn iroyin buburu ni pe atokọ iyebiye wa ti awọn igbesẹ iṣọpọ igbagbogbo ti lọ paapaa. Nitorinaa, apere, a nilo lati lo atunṣe si awọn adehun lati feature ki o si da wọn pada si master pẹlu atunṣe.

A le yanju iṣoro naa ni awọn ọna oriṣiriṣi:

  • yi ifaramo kan pada ti o ṣe atunṣe akojọpọ kan feature с master;
  • gbe ṣẹ lati tele feature.

Awọn ẹgbẹ idagbasoke oriṣiriṣi lo awọn ọna oriṣiriṣi ninu ọran yii, ṣugbọn a yoo gbe awọn adehun ti o wulo si ẹka ti o yatọ ati ṣẹda ibeere fifa lọtọ fun ẹka tuntun yii.

️Ṣiṣẹ

  1. Ṣẹda okun ti a npe ni feature-fix ki o si yipada si o.
  2. Gbe gbogbo awọn adehun lati ẹka iṣaaju feature si okun tuntun. Yanju awọn ija apapọ ti o waye lakoko ijira.

    Aṣoju awọn ipo pẹlu lemọlemọfún Integration

  3. Ṣafikun idanwo ifaseyin si ci.test.js:

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

  4. Ṣiṣe awọn idanwo ni agbegbe lati rii daju pe wọn ko kuna.
  5. Yọ ọrọ naa kuro "pẹlu kokoro sneaky" sinu ci.md.
  6. Ṣafikun awọn ayipada idanwo ati awọn ayipada atokọ igbesẹ si atọka ki o ṣe wọn.
  7. Ṣe atẹjade ẹka naa si ibi ipamọ latọna jijin.

O yẹ ki o pari pẹlu nkan ti o jọra si eyi:
Aṣoju awọn ipo pẹlu lemọlemọfún Integration

Awọn ofin

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

Ṣẹda ibeere fifa.

Ṣẹda ibeere fifa pẹlu akọle kan Titunṣe ẹya ara ẹrọ... Fi sori ẹrọ feature-fix bi "ori ẹka" ati master bi "ẹka ipilẹ".
Jọwọ duro nigbati awọn idanwo naa ti pari. O le wo ipo ti awọn idanwo ni isalẹ ti ijiroro PR.

Rii daju pe o ti fi sori ẹrọ master ninu re orita ibi ipamọ Gẹgẹbi “ẹka ipilẹ”, Emi kii yoo dahun si awọn ibeere fun awọn ayipada si ibi ipamọ awọn ohun elo dajudaju.

Fọwọsi ibeere fifa "Titunṣe ẹya naa"

O ṣeun fun atunse! Jọwọ fọwọsi awọn ayipada si master lati fa ìbéèrè.

️Ṣiṣẹ

  1. Tẹ "Dapọ ìbéèrè fa".
  2. Tẹ "Jẹrisi iṣọpọ".
  3. Tẹ "Paarẹ ẹka" niwon a ko nilo rẹ mọ.

Eyi ni ohun ti o yẹ ki o ni ni akoko yii.
Aṣoju awọn ipo pẹlu lemọlemọfún Integration

Oriire!

O ti pari gbogbo awọn igbesẹ ti eniyan maa n ṣe lakoko iṣọpọ lemọlemọfún.

Ti o ba ṣe akiyesi awọn iṣoro eyikeyi pẹlu iṣẹ ikẹkọ tabi mọ bi o ṣe le mu ilọsiwaju sii, jọwọ ṣẹda ọran kan ninu awọn ibi ipamọ pẹlu awọn ohun elo dajudaju. Eleyi dajudaju tun ni o ni ibanisọrọ version lilo GitHub Learning Lab bi pẹpẹ kan.

orisun: www.habr.com

Fi ọrọìwòye kun