Nā kūlana maʻamau me ka hoʻohui mau

Ua aʻo anei ʻoe i nā kauoha Git akā makemake ʻoe e noʻonoʻo pehea e hana mau ai ka hoʻohui ʻana (CI) i ka ʻoiaʻiʻo? A i ʻole makemake paha ʻoe e hoʻomaikaʻi i kāu mau hana i kēlā me kēia lā? Hāʻawi kēia papa iā ʻoe i nā mākau kūpono i ka hoʻohui mau ʻana me ka hoʻohana ʻana i kahi waihona GitHub. ʻAʻole i manaʻo ʻia kēia papa e lilo i wizard hiki iā ʻoe ke kaomi wale; akā, e hana ʻoe i nā hana like a ka poʻe e hana maoli ai ma ka hana, e like me kā lākou hana ʻana. E wehewehe au i ke kumumanaʻo i kou hele ʻana i nā ʻanuʻu e pili ana.

He aha kā mākou e hana ai?

Ke holomua nei mākou, e hana mālie mākou i kahi papa inoa o nā ʻanuʻu CI maʻamau, kahi ala maikaʻi loa e hoʻomanaʻo ai i kēia papa inoa. I nā huaʻōlelo ʻē aʻe, e hana mākou i kahi papa inoa o nā hana a nā mea hoʻomohala e hana i ka wā e hana ana i ka hoʻohui mau, e hana ana i ka hoʻohui mau. E hoʻohana pū mākou i kahi hoʻokolohua maʻalahi e hoʻokokoke i kā mākou kaʻina CI i ka mea maoli.

Hōʻike maʻalahi kēia GIF i nā hana i kāu waihona i kou holomua ʻana ma ka papa. E like me kāu e ʻike ai, ʻaʻohe mea paʻakikī ma aneʻi a ʻo ka mea pono wale nō.

Nā kūlana maʻamau me ka hoʻohui mau

E hele ʻoe i nā hiʻohiʻona CI maʻamau:

  • Hana ma kahi hiʻohiʻona;
  • Hoʻohana i nā hoʻokolohua automated e hōʻoia i ka maikaʻi;
  • Ka hoʻokō ʻana i ka hana mua;
  • ʻO ka hoʻoholo hoʻopaʻapaʻa i ka hoʻohui ʻana i nā lālā (hui i ka hakakā);
  • Loaʻa ka hewa ma kahi hana hana.

He aha kāu e aʻo ai?

Hiki iā ʻoe ke pane i kēia mau nīnau:

  • He aha ka hoʻohui mau (CI)?
  • He aha nā ʻano o nā hoʻokolohua automated i hoʻohana ʻia ma CI, a i ka pane ʻana i nā hana e hoʻoulu ʻia ai?
  • He aha nā noi huki a i ka manawa hea e pono ai?
  • He aha ka Test Driven Development (TDD) a pehea e pili ai me CI?
  • Pono au e hoʻohui a hoʻihoʻi hou i nā loli?
  • E huli i hope a hoʻoponopono paha i ka mana aʻe?

I ka wā mua ua unuhi au i nā mea e like me "nā noi huki" ma nā wahi a pau, akā ma muli o ka hopena ua hoʻoholo wau e hoʻihoʻi i nā huaʻōlelo ma ka ʻōlelo Pelekania ma kekahi mau wahi e hōʻemi i ke kiʻekiʻe o ka pupule ma ka kikokikona. E hoʻohana wau i kekahi manawa i ka "programmer surzhik" e like me ka huaʻōlelo kupanaha "commit" kahi e hoʻohana maoli ai ka poʻe ma ka hana.

He aha ka hoʻohui mau?

Hoʻohui mau, a i ʻole CI, he hana ʻenehana kahi e hoʻohui ai kēlā me kēia lālā o ka hui i kā lākou code i loko o kahi waihona maʻamau ma kahi o hoʻokahi manawa i ka lā, a pono e kūkulu ʻia ka code hopena me ka ʻole o nā hewa.

Aia nā kuʻikahi e pili ana i kēia huaʻōlelo

ʻO ke kumu o ka paio ka pinepine o ka hoʻohui. Ke hoʻopaʻapaʻa nei kekahi ʻaʻole lawa ka hoʻohui ʻana i ka code hoʻokahi wale nō i ka lā no ka hoʻohui mau ʻana. Hāʻawi ʻia kahi laʻana o kahi hui kahi e lawe ai nā mea a pau i ke code hou i ke kakahiaka a hoʻohui ʻia i hoʻokahi manawa i ke ahiahi. ʻOiai he kūʻē kūpono kēia, ua manaʻo nui ʻia ʻo ka wehewehe ʻana i hoʻokahi lā he kūpono kūpono, kikoʻī, a kūpono hoʻi no nā hui o nā ʻano nui like ʻole.

ʻO kekahi mea ʻē aʻe, ʻaʻole ʻo C ++ wale nō ka ʻōlelo i hoʻohana ʻia i ka hoʻomohala ʻana, a ʻo ke koi wale ʻana i ka hui hewa ʻole e like me ke ala o ka hōʻoia ʻana ua nāwaliwali. Pono e ho'opau pono kekahi mau ho'ā'o (no ka la'ana, ho'ā'o 'āpana i hana 'ia ma ka 'āina). I kēia manawa, ke neʻe nei ke kaiāulu i ka hana ʻana i kēia koi, a i ka wā e hiki mai ana, e lilo paha nā "kūkulu + unit test" i mea maʻamau, inā ʻaʻole i hana.

Hoʻohui mau ʻokoʻa mai hāʻawi mau (Continuous Delivery, CD) ʻaʻole ia e koi aku i kahi moho hoʻokuʻu ma hope o kēlā me kēia pōʻaiapili hoʻohui.

Ka papa inoa o nā ʻanuʻu a mākou e hoʻohana ai i ka papa

  1. Huki i ke code hou loa. Hana i lālā mai master. E hoʻomaka i ka hana.
  2. E hana i nā commit ma kāu lālā hou. E kūkulu a hoʻāʻo ma ka ʻāina. Pass? E hele i ka ʻanuʻu aʻe. hāʻule? Hoʻoponopono i nā hewa a i ʻole nā ​​hoʻāʻo a hoʻāʻo hou.
  3. E kaomi i kāu waihona mamao a i ʻole ka lālā mamao.
  4. E hana i kahi noi huki. E kūkākūkā i nā hoʻololi, e hoʻohui i nā hana hou aʻe i ka wā e hoʻomau ai ke kūkākūkā. E ho'āʻo ma ka lālā hiʻona.
  5. Hoʻohui/rebase hana mai ka haku. E hoʻoholo i nā hoʻokolohua ma ka hopena hoʻohui.
  6. E hoʻolālā mai ka lālā hiʻohiʻona i ka hana.
  7. Inā maikaʻi nā mea a pau i ka hana ʻana no kekahi manawa, hoʻohui i nā loli i ka haku.

Nā kūlana maʻamau me ka hoʻohui mau

️ Hoʻomākaukau

E hōʻoia iā ʻoe ka lako polokalamu pono

No ka lawe ʻana i kēia papa pono ʻoe Node.js и Mea kūʻai aku ʻo Git.

Hiki iā ʻoe ke hoʻohana i kekahi mea kūʻai aku ʻo Git, akā hāʻawi wau i nā kauoha no ka laina kauoha.

E hōʻoia ʻoe ua hoʻokomo ʻia kahi mea kūʻai aku Git e kākoʻo ana i ka laina kauoha

Inā ʻaʻohe āu mea kūʻai aku Git e kākoʻo ana i ka laina kauoha, hiki iā ʻoe ke ʻike i nā ʻōlelo kuhikuhi maanei.

E hoʻomākaukau i ka waihona

Pono ʻoe e hana i kope pilikino (fork) waihona waihona me ke code no ka papa ma GitHub. E ʻae kākou e kāhea i kēia kope pilikino waihona papa.

Pau? Inā ʻaʻole ʻoe i hoʻololi i nā hoʻonohonoho paʻamau, ua kapa ʻia paha kāu waihona papa continuous-integration-team-scenarios-students, aia i loko o kāu moʻokāki GitHub a ua like ka URL me kēia

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

E kāhea wale aku au i kēia helu wahi <URL репозитория>.

ʻO nā pale kihi e like me <тут> ʻo ia hoʻi, pono ʻoe e hoʻololi i kēlā ʻōlelo me ka waiwai kūpono.

E hōʻoia i kēlā Nā hana GitHub hoʻokomo ʻia no kēia waihona papa. Inā ʻaʻole hiki iā lākou, e ʻoluʻolu e ʻae iā lākou ma ke kaomi ʻana i ke pihi nui i waenakonu o ka ʻaoʻao, hiki iā ʻoe ke kiʻi ma ke kaomi ʻana i nā Hana ma ke kikowaena GitHub.

ʻAʻole hiki iā ʻoe ke hoʻopau i ka papa ma hope o kaʻu mau ʻōlelo inā ʻaʻole hiki ke hana ʻo GitHub Actions.

Nā kūlana maʻamau me ka hoʻohui mau

Hiki iā ʻoe ke hoʻohana mau i ka mana o GitHub e hāʻawi iā Markdown e ʻike i ke kūlana o kēia manawa o ka papa inoa a mākou e haku nei.

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

No nā pane

ʻOiai ʻo ke ala maikaʻi loa e hoʻopau ai i kēia papa ʻo ka hana ʻana iā ʻoe iho, loaʻa paha iā ʻoe kekahi mau pilikia.

Inā manaʻo ʻoe ʻaʻole maopopo ʻoe i ka mea e hana ai a ʻaʻole hiki ke hoʻomau, hiki iā ʻoe ke nānā i ka pae solution, aia ma kāu waihona hoʻomaka.
Mai hoʻohui ʻoe solution в master i ka wā o ka papa. Hiki iā ʻoe ke hoʻohana i kēia lālā e noʻonoʻo i ka mea e hana ai, a i ʻole e hoʻohālikelike i kāu code me ka mea kākau, me ka hoʻohana ʻana i nā mana āpau a Git i hāʻawi mai iā mākou. Inā nalowale loa ʻoe, hiki iā ʻoe ke pani i kāu lālā master ma kahi lālā solution a laila hoʻihoʻi hou i kāu papa kuhikuhi hana i ka pae papa āu e pono ai.

E hoʻohana wale i kēia inā pono ʻoe

Hāʻawi i kāu code

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

ʻO kēia mau kauoha

  • inoa hou master в master-backup;
  • inoa hou solution в master;
  • hoʻokaʻawale i kahi lālā hou master a kākau hou i nā mea i loko o ka papa kuhikuhi hana;
  • E hana i lālā "solution" mai "master" (ʻo ia ka "solution") inā makemake ʻoe i kahi lālā "solution" i ka wā e hiki mai ana.

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

Ma hope o kēia mau hana hiki iā ʻoe ke hoʻohana git log master e noʻonoʻo i ka hana āu e pono ai.
Hiki iā ʻoe ke hoʻonohonoho hou i kāu papa kuhikuhi hana i kēia commit e like me kēia:

git reset --hard <the SHA you need>

Inā hauʻoli ʻoe i ka hopena, i kekahi manawa pono ʻoe e hoʻolaha i kāu mana o ka waihona i kahi waihona mamao. Mai poina e wehewehe pono i ka lālā mamao ke hana ʻoe i kēia.

git push --force origin master

E ʻoluʻolu e hoʻohana mākou git push --force. ʻAʻole paha makemake ʻoe e hana pinepine i kēia, akā loaʻa iā mākou kahi hiʻohiʻona kikoʻī ma aneʻi me hoʻokahi mea hoʻohana waihona, ʻo ia hoʻi, hoʻomaopopo i kāna hana.

Hoʻomaka i ka hana

Nā kūlana maʻamau me ka hoʻohui mau

E hoʻomaka kākou e hōʻuluʻulu i kā mākou papa inoa o nā ʻanuʻu CI. E hoʻomaka ʻoe i kēia ʻanuʻu ma ka nānā ʻana i ka mana hou loa o ke code mai ka waihona mamao, akā ʻaʻohe o mākou hale waihona kūloko, no laila mākou clone ia mai kahi mamao.

️ Hana: hoʻohou i ka waihona kūloko, hana i kahi lālā mai master, hoʻomaka i ka hana

  1. Clone i ka waihona papa mai <URL репозитория>.
  2. Holo npm install ma ka papa kuhikuhi waihona papa; Pono mākou e hoʻokomo iā Jest, a mākou e hoʻohana ai e holo i nā hoʻokolohua.
  3. E hana i lālā a kapa inoa feature. E hoʻololi i kēia pae.
  4. Hoʻohui i ke code hoʻāʻo i ci.test.js ma waena o nā manaʻo e noi ana iaʻu e hana i kēia.

    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. Hoʻohui i nā kikokikona me nā ʻanuʻu mua 4 i ka faila 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.  

    Nā Pūʻulu

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

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

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

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

E hana i nā commits ma kahi lālā hou, kūkulu a hoʻāʻo ma ka ʻāina

E hoʻonohonoho mākou i nā hoʻāʻo e holo ma mua o ka hana ʻana, a laila e hana i ke code.

Nā hiʻohiʻona maʻamau ke holo ʻakomi nā hoʻokolohua

  • Ma ka ʻāina:
    • Hoʻomau a pane paha i nā hoʻololi code kūpono;
    • Ma ka mālama ʻana (no nā ʻōlelo i unuhi ʻia a i ʻole JIT-hui ʻia);
    • I ka wā e hui ai (i ka wā e koi ʻia ai ka hui ʻana);
    • Ma ka hana;
    • Ke paʻi ʻia i kahi waihona waihona.

  • Ma ke kikowaena kūkulu a kūkulu ʻia paha:
    • Ke paʻi ʻia ke code i kahi lālā pilikino / waihona.
    • Ke hoʻāʻo ʻia nei ke code ma kēia pae.
    • Hoʻāʻo ʻia ka hopena kūpono o ka hui ʻana (maʻamau me master).
    • Ma ke ʻano he pae hoʻohui hoʻomau / pipeline hoʻouna mau

ʻO ka maʻamau, ʻoi aku ka wikiwiki o ka holo ʻana o kahi suite hoʻāʻo, ʻoi aku ka nui o ka hiki iā ʻoe ke holo. E like paha ke ʻano o ka puʻunaue pae maʻamau.

  • Nā hoʻāʻo ʻāpana wikiwiki - i ka wā kūkulu, i ka pipeline CI
  • Nā hoʻāʻo ʻāpana lohi, nā ʻāpana wikiwiki a me nā hoʻāʻo hoʻohui - ma ka hana, ma ka pipeline CI
  • ʻO nā ho'āʻo lohi a me ka hoʻohui ʻana - i ka pipeline CI
  • ʻO ka hoʻāʻo palekana, ka hoʻāʻo ʻana i ka ukana a me nā hoʻāʻo ʻana i ka manawa a i ʻole ke kumukūʻai - ma nā paipu CI/CD, akā ma kekahi mau ʻano/pae/pipeline o ke kūkulu ʻana, no ka laʻana, i ka wā e hoʻomākaukau ai i kahi moho hoʻokuʻu a i ka holo lima ʻana.

️Ka hana

Manaʻo wau e holo mua i nā hoʻokolohua me ka hoʻohana ʻana i ke kauoha npm test. Ma hope o kēlā, e hoʻohui i kahi hook git e holo i kā mākou mau ho'āʻo ma ka commit. Aia hoʻokahi hopu: ʻAʻole manaʻo ʻia nā makau Git he ʻāpana o ka waihona a no laila ʻaʻole hiki ke hoʻopaʻa ʻia mai GitHub me ke koena o nā mea papa. No ke kau ʻana i ka hook pono ʻoe e holo install_hook.sh a kope paha i ka faila repo/hooks/pre-commit i ka papa kuhikuhi kūloko .git/hooks/.
Ke hana ʻoe, e ʻike ʻoe ua holo nā hoʻokolohua a nānā lākou e ʻike inā aia kekahi mau huaʻōlelo i ka papa inoa.

  1. E holo lima i nā hoʻokolohua ma ka holo ʻana i ke kauoha npm test ma kāu waihona waihona papa. E hōʻoia ua pau nā hoʻokolohua.
  2. E hoʻonoho i ka hook commit (pre-commit hook) ma ka holo install_hook.sh.
  3. Hāʻawi i kāu mau hoʻololi i kāu waihona kūloko.
  4. E hōʻoia i ka holo ʻana o nā hoʻokolohua ma mua o ka hana ʻana.

Pono kāu waihona e like me kēia ma hope o ka hahai ʻana i kēia mau hana.
Nā kūlana maʻamau me ka hoʻohui mau

Nā Pūʻulu

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

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

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

Hoʻopuka i ke code i kahi waihona mamao a i ʻole lālā mamao

Pau ka hana ʻana ma ka ʻāina, hoʻolaha maʻamau nā mea hoʻomohala i kā lākou code i hiki ke hoʻohui ʻia me ka lehulehu. Me GitHub, loaʻa kēia ma ka hoʻopuka ʻana i ka hana i kahi kope pilikino o ka waihona (personal fork) a i kahi lālā pilikino.

  • Me nā ʻōpuʻu, hoʻopili ka mea hoʻomohala i kahi waihona kaʻana like mamao, e hana ana i kahi kope mamao pilikino o ia mea, ʻike ʻia hoʻi ʻo ka fork. Hoʻopili ia i kēia waihona pilikino e hana pū me ka ʻāina. Ke hoʻopau ʻia ka hana a hana ʻia nā hana, hoʻolei ʻo ia iā lākou i loko o kāna ʻōpala, kahi e loaʻa ai i nā poʻe ʻē aʻe a hiki ke hoʻohui ʻia i loko o ka waihona maʻamau. Hoʻohana mau ʻia kēia ala i nā papahana open source ma GitHub. Hoʻohana ʻia ia i kaʻu papa holomua [Team Work a me CI me Git] (http://devops.redpill.solutions/).
  • ʻO kekahi ala ʻē aʻe, ʻo ia ka hoʻohana ʻana i hoʻokahi waihona mamao a helu wale i ka lālā master waihona waihona "palekana". Ma kēia hiʻohiʻona, hoʻopuka nā mea hoʻomohala hoʻokahi i kā lākou code i nā lālā o kahi waihona mamao i hiki i nā poʻe ʻē aʻe ke nānā i kēia code, inā pololei nā mea a pau, hoʻohui me ia. master waihona waihona.

Ma kēia papa kūikawā, e hoʻohana mākou i kahi kaila hana e hoʻohana ana i nā lālā.

E hoʻolaha i kā mākou code.

️Ka hana

  • Hoʻopuka i nā loli i kahi lālā mamao me ka inoa like me kāu lālā hana

Nā Pūʻulu

git push --set-upstream origin feature

E hana i kahi noi huki

E hana i kahi noi huki me kahi poʻo inoa Nānā i nā ʻanuʻu. Hoʻokomo feature e like me "lālā poʻo" a master like me "lalana kumu".

E hōʻoia ua kau ʻoe master i kāna e wehe i ka waihona Ma ke 'ano he "lālā kumu", 'a'ole au e pane aku i nā noi no ka ho'ololi 'ana i ka waihona mea papa.

Ma ka lingo GitHub, ʻo ka "ala kumu" ka lālā āu e hoʻokumu ai i kāu hana, a ʻo ka "ala poʻo" ka lālā i loaʻa nā hoʻololi i manaʻo ʻia.

E kūkākūkā i nā loli, e hoʻohui i nā hana hou i ka wā e hoʻomau ai ke kūkākūkā

Noi huki (PR)

Noi huki (PR) He ala ia e kūkākūkā ai a me ka hoʻopaʻa ʻana i ke code, a me ka nānā ʻana i ke code. Ua kapa ʻia nā noi huki ma muli o ke ʻano maʻamau o ka hoʻohui ʻana i nā hoʻololi pākahi i loko o ke code holoʻokoʻa. ʻO ka maʻamau, hoʻopaʻa ke kanaka i ka waihona mana mamao o ka papahana a hana i ke code ma ka ʻāina. Ma hope o kēia, kau ʻo ia i ke code i loko o kāna waihona pilikino pilikino a noi i nā mea kuleana no ka waihona mana e kiʻi (huki) kona code i loko o kā lākou mau waihona kūloko, kahi e nānā ai a hoʻohui paha (Ho'ohui) kona. ʻIke ʻia kēia manaʻo e nā inoa ʻē aʻe, no ka laʻana, noi hui.

ʻAʻole pono ʻoe e hoʻohana i ka hiʻohiʻona noi huki o GitHub a i ʻole nā ​​​​pae like. Hiki i nā hui hoʻomohala ke hoʻohana i nā ala ʻē aʻe o ke kamaʻilio ʻana, me ke kamaʻilio alo-a-maka, kelepona leo, a i ʻole leka uila, akā he nui nā kumu e hoʻohana ai i nā noi huki kaila forum. Eia kekahi o lākou:

  • nā kūkākūkā i hoʻonohonoho ʻia e pili ana i nā hoʻololi code kikoʻī;
  • ma ke ʻano he wahi e ʻike ai i nā manaʻo manaʻo e pili ana i ka hana i ka holomua mai nā autotesters a me nā hoa;
  • ka hoʻokō ʻana i nā loiloi code;
  • no laila hiki iā ʻoe ke ʻike i nā kumu a me nā noʻonoʻo ma hope o kēia a i kēlā ʻāpana code.

ʻO ka maʻamau, hana ʻoe i kahi noi huki inā pono ʻoe e kūkākūkā i kekahi mea a i ʻole e loaʻa ka manaʻo. No ka laʻana, inā e hana ana ʻoe i kahi hiʻohiʻona i hiki ke hoʻokō ʻia ma mua o hoʻokahi ala, hiki iā ʻoe ke hana i kahi noi huki ma mua o ke kākau ʻana i ka laina mua o ke code e kaʻana like i kou mau manaʻo a kūkākūkā i kāu mau hoʻolālā me kāu mau hoa hana. Inā ʻoi aku ka maʻalahi o ka hana, wehe ʻia kahi noi huki inā ua hana ʻia kekahi mea, hana ʻia, a hiki ke kūkākūkā ʻia. I kekahi mau hiʻohiʻona, makemake paha ʻoe e wehe i kahi PR no nā kumu hoʻomalu maikaʻi wale nō: e holo i nā hoʻokolohua automated a i ʻole e hoʻomaka i nā loiloi code. ʻO nā mea a pau āu e hoʻoholo ai, mai poina ʻoe e @haʻi i ka poʻe āu e ʻae ai i kāu noi huki.

ʻO ka maʻamau, i ka wā e hana ai i kahi PR, hana ʻoe i kēia.

  • E hōʻike i kāu mea e manaʻo ai e hoʻololi a ma hea.
  • E kākau i kahi wehewehe e wehewehe ana i ke kumu o nā hoʻololi. Makemake paha ʻoe:
    • hoʻohui i kekahi mea koʻikoʻi i ʻike ʻole ʻia mai ke code, a i ʻole kekahi mea pono no ka hoʻomaopopo ʻana i ka pōʻaiapili, e like me nā #bugs pili a me nā helu commit;
    • @e haʻi aku i nā mea āu e makemake ai e hoʻomaka e hana pū me, a i ʻole hiki iā ʻoe ke @mention iā lākou ma nā manaʻo ma hope;
    • e noi i nā hoa hana e kōkua i kekahi mea a nānā paha i kekahi mea kikoʻī.

Ke wehe ʻoe i ka PR, hoʻokō ʻia nā hoʻokolohua i hoʻonohonoho ʻia e holo i ia mau hihia. I kā mākou hihia, ʻo ia ka hoʻonohonoho like o nā hoʻokolohua a mākou i holo ai ma ka ʻāina, akā i kahi papahana maoli aia paha nā hoʻokolohua hou aʻe.

E ʻoluʻolu e kali a pau nā hoʻāʻo. Hiki iā ʻoe ke ʻike i ke kūlana o nā hoʻāʻo ma lalo o ka kūkākūkā PR ma ke kikowaena GitHub. E hoʻomau i ka pau ʻana o nā hoʻokolohua.

️ Hoʻohui i kahi leka e pili ana i ka randomness o ka papa inoa o nā ʻanuʻu CI

ʻO ka papa inoa i hoʻohana ʻia ma kēia papa he mea ʻole a me ke kumuhana, pono mākou e hoʻohui i kahi leka e pili ana i kēia.

️ Hana: hana i kahi noi huki no kēia manaʻo

  1. E hoʻololi i ka lālā master.
  2. E hana i kahi lālā i kapa ʻia bugfix.
  3. E hoʻohui i ka kikokikona memo i ka hope o ka faila 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. Hāʻawi i nā hoʻololi.
  5. Hoʻopuka i ka pae bugfix i kahi waihona mamao.
  6. E hana i kahi noi huki i kapa ʻia Hoʻohui i kahi ʻōlelo me ka lala poo bugfix a me ka lala kumumaster.

E hōʻoia ua kau ʻoe master i kāna e wehe i ka waihona Ma ke 'ano he "lālā kumu", 'a'ole au e pane aku i nā noi no ka ho'ololi 'ana i ka waihona mea papa.

ʻO kēia ke ʻano o kāu waihona.
Nā kūlana maʻamau me ka hoʻohui mau

Nā Pūʻulu

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

E ʻae i ka noi huki "Hoʻohui i kahi ʻōlelo"

️Ka hana

  1. E hana i kahi noi huki.
  2. Kaomi "Merge pull request".
  3. Kaomi "Confirm merge".
  4. Kaomi "Delete branch", ʻaʻole pono mākou.

He kiʻikuhi kēia o nā hana ma hope o ka hui ʻana.
Nā kūlana maʻamau me ka hoʻohui mau

️ E hoʻomau i ka hana a hoʻohui i nā hoʻokolohua

ʻO ka hui pū ʻana ma kahi noi huki e hopena pinepine i ka hana hou. ʻO kēia ka hopena o ka loiloi code a kūkākūkā paha, akā i kā mākou papa e hana mākou i kēia ma ka hoʻohui ʻana i nā mea hou i kā mākou papa inoa o nā ʻanuʻu CI.

ʻO ka hoʻohui mau ʻana e pili ana i kekahi uhi hoʻāʻo. ʻOkoʻa nā koi hoʻāʻo hoʻāʻo a loaʻa pinepine ʻia ma kahi palapala i kapa ʻia he mea like me "nā alakaʻi hāʻawi". E mālama mākou i ka maʻalahi a hoʻohui i kahi hōʻike no kēlā me kēia laina i kā mākou papa inoa.

I ka holo ʻana i nā haʻawina, e hoʻāʻo e hana mua i nā hoʻokolohua. Inā hoʻokomo pono ʻoe pre-commit hook ma mua, e holo ka ho'āʻo hou i hoʻohui ʻia, e hāʻule, ʻaʻohe mea e hana ʻia. E hoʻomaopopo ʻo kēia ke ʻano o kā mākou hoʻāʻo ʻana e hoʻāʻo maoli nei i kekahi mea. ʻO ka mea mahalo, inā mākou i hoʻomaka me ke code ma mua o nā hoʻāʻo ʻana, ʻo ka hele ʻana i nā hoʻāʻo e manaʻo paha ua hana ke code e like me ka mea i manaʻo ʻia, a i ʻole ʻaʻole hoʻāʻo maoli nā hoʻāʻo i kekahi mea. Eia kekahi, inā ʻaʻole mākou i kākau mua i nā hoʻokolohua, poina paha mākou iā lākou, no ka mea, ʻaʻohe mea e hoʻomanaʻo mai iā mākou.

Hoʻoulu Hoʻāʻo ʻia (TDD)

Manaʻo ʻo TDD e kākau i nā hoʻokolohua ma mua o ke code. ʻO kahi kaʻina hana maʻamau e hoʻohana ana iā TDD e like me kēia.

  1. Hoʻohui i kahi ho'āʻo.
  2. E holo i nā hoʻāʻo a pau a hōʻoia i ka hāʻule ʻole o ka hoʻāʻo hou.
  3. Kākau i ke code.
  4. E holo i nā hoʻokolohua, e hōʻoia i ka holo ʻana o nā hoʻokolohua āpau.
  5. E hoʻololi hou i kāu code.
  6. E hana hou.

No ka mea, hōʻike pinepine ʻia nā hopena o nā hoʻokolohua i hāʻule i ka ʻulaʻula, a ʻo nā mea i hala e hōʻike pinepine ʻia i ka ʻōmaʻomaʻo, ua ʻike ʻia ka pōʻai he red-green-refactor.

️Ka hana

ʻO ka mea mua, e hoʻāʻo e hana i nā hoʻāʻo a hoʻokuʻu iā lākou e hāʻule, a laila hoʻohui a hoʻokomo i ka kikokikona o ka papa inoa pae CI ponoʻī. E ʻike ʻoe e hala ana nā hoʻokolohua ("'ōmaʻomaʻo").
A laila e paʻi i ke code hou i ka waihona mamao a nānā i nā hoʻokolohua e holo ana ma ka interface GitHub ma lalo o ke kūkākūkā noi huki a me ka hoʻonui kūlana PR.

  1. E hoʻololi i ka lālā feature.
  2. Hoʻohui i kēia mau hoʻāʻo i ci.test.js mahope o ke kahea hope ana 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. E ho'āʻo e hana i nā hoʻokolohua. Ina pre-commit hoʻokomo ʻia ka makau, e hāʻule ka hoʻāʻo commit.
  4. A laila hoʻohui i kēia kikokikona i 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. Hana a hana i nā hoʻololi kūloko.
  6. E kau i nā hoʻololi i ka lālā feature.

Pono ʻoe i kēia manawa e like me kēia
Nā kūlana maʻamau me ka hoʻohui mau

Nā Pūʻulu


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

Hoʻohui hakakā

E hele i ka Change Request Nānā i nā ʻanuʻu.

ʻOiai ʻaʻole mākou i hana hewa a ua hala nā hoʻāʻo no kā mākou code, ʻaʻole hiki iā mākou ke hoʻohui i ka lālā feature и master. No ka mea, ʻo ka pae ʻē aʻe bugfix ua hoʻohui ʻia me master oiai makou e hana ana ma keia PR.
Hoʻokumu kēia i kahi kūlana kahi o ka lālā mamao master he mana hou aʻe ma mua o ka mea a mākou i hoʻokumu ai i ka lālā feature. Ma muli o kēia ʻaʻole hiki iā mākou ke hoʻihoʻi wale i ke POO master i ka pau ana o ke kaula feature. I kēia kūlana, pono mākou e hoʻohui a hoʻopili paha i nā commits feature rebase master. Hiki iā GitHub ke hana i nā hui ʻokoʻa inā ʻaʻohe paio. Auē, i ko mākou kūlana, ua hoʻololi nā lālā ʻelua i ka faila ci.md. ʻIke ʻia kēia kūlana he paio hoʻohui, a pono mākou e hoʻoholo me ka lima.

Hoʻohui a hoʻopaʻa hou

Hoʻohui

  • Hoʻokumu i kahi hoʻohui hui hou a mālama i ka mōʻaukala hana.
    • Mālama i nā hana kumu o nā lālā me ko lākou mau kaha manawa mua a me nā mea kākau.
    • Mālama i ka SHA o nā hana a me nā loulou iā lākou i nā kūkākūkā noi hoʻololi.
  • Pono ka hoʻonā paio hoʻokahi manawa.
  • Hana i ka moʻolelo i laina ʻole.
    • Hiki ke paʻakikī ke heluhelu ʻia ka moʻolelo ma muli o ka nui o nā lālā (e hoʻomanaʻo ana i kahi kaula IDE).
    • ʻOi aku ka paʻakikī o ka hoʻopiʻi ʻakomi, e.g. git bisect ʻaʻole pono - e ʻike wale ʻia ka merge commit.

Rebase

  • Hoʻopaʻa hou ʻia mai ka lālā o kēia manawa ma luna o ka lālā kumu i kēlā me kēia.
    • Hoʻokumu ʻia nā hana hou me nā SHA hou, e hoʻohālikelike ai nā commits ma GitHub i nā noi huki kumu, akā ʻaʻole nā ​​manaʻo pili.
    • Hiki ke hoʻohui hou a hoʻololi ʻia nā commit ma ke kaʻina hana, a i ʻole hoʻohui ʻia i hoʻokahi.
  • Pono paha e hoʻoholo i nā paio lehulehu.
  • Hiki iā ʻoe ke mālama i kahi moʻolelo laina.
    • He maʻalahi paha ka heluhelu ʻana o ka moʻolelo inā ʻaʻole lōʻihi loa no ke kumu kūpono ʻole.
    • He mea maʻalahi ka hoʻopau ʻana a me ka hoʻoponopono pilikia: hiki ke hiki git bisect, hiki iā ia ke hoʻomaʻamaʻa i nā rollbacks ʻakomi a hiki ke wānana.
  • Pono e paʻi i kahi lālā me ka neʻe ʻana me ka hae --force ke hoʻohana ʻia me nā noi huki.

ʻO ka maʻamau, ʻae nā hui e hoʻohana mau i ka hoʻolālā like ke pono lākou e hoʻohui i nā loli. He hui "maʻemaʻe" paha kēia a i ʻole he hana "maʻemaʻe" ma luna, a i ʻole kekahi mea ma waena, e like me ka hana ʻana i ka hana ma luna me ka launa pū ʻana (git rebase -i) ma ka ʻāina no nā lālā ʻaʻole i paʻi ʻia i ka waihona lehulehu, akā hoʻohui ʻia no nā lālā "lehulehu".

Maanei e hoʻohana mākou i ka hui ʻana.

️Ka hana

  1. E hōʻoia i ke code ma kahi lālā kūloko master hōʻano hou ʻia mai kahi waihona mamao.
  2. E hoʻololi i ka lālā feature.
  3. E hoʻomaka i kahi hui me kahi lālā master. He paio hui ma muli o nā hoʻololi hoʻokūkū i ka ci.md.
  4. E hoʻoholo i ka paio i hiki i kā mākou papa inoa o nā ʻanuʻu CI a me kahi memo e pili ana iā ia e mau i ka kikokikona.
  5. E hoʻopuka i kahi hui hoʻohui i kahi lālā mamao feature.
  6. E nānā i ke kūlana o ka noi huki ma ka GitHub UI a kali a hiki i ka hoʻoholo ʻana o ka hui.

Nā Pūʻulu

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

ʻOihana nui!

Ua pau ʻoe i ka papa inoa a pono ʻoe e ʻae i ka noi huki master.

️ Hana: E ʻae i ka noi huki "Nā hana loiloi"

  1. E wehe i kahi noi huki.
  2. Kaomi "Merge pull request".
  3. Kaomi "Confirm merge".
  4. Kaomi "Delete branch" no ka mea ʻaʻole pono mākou.

ʻO kēia kāu waihona i kēia manawa
Nā kūlana maʻamau me ka hoʻohui mau

Kuhi hewa huahana

Ua ʻōlelo ʻia "hiki ke hoʻohana ʻia ka hoʻāʻo e hōʻike i ka hele ʻana o nā hewa, akā ʻaʻole e hōʻike i ko lākou hele ʻole." ʻOiai ua loaʻa iā mākou nā hoʻāʻo a ʻaʻole lākou i hōʻike mai iā mākou i nā hewa, ua komo mai kahi pahu hoʻopunipuni i ka hana.

Ma kahi ʻano like me kēia, pono mākou e mālama i:

  • ka mea i hoʻopili ʻia i ka hana;
  • code ma ka pae master me kahi hewa, kahi e hiki ai i nā mea hoʻomohala ke hoʻomaka i ka hana hou.

Pono au e ʻōwili i hope a hoʻoponopono paha i ka mana aʻe?

ʻO ka hoʻihoʻi ʻana ke kaʻina o ka lawe ʻana i kahi mana maikaʻi ma mua i ka hana ʻana a me ka hoʻihoʻi ʻana i nā hana i loaʻa ka hewa. ʻO "Fixing forward" ka hoʻohui ʻana i kahi hoʻoponopono i ka master a e kau ana i ka mana hou i ka hikiwawe loa. Ma muli o ka loli ʻana o nā API a me nā schemas database i ka wā e kau ʻia ai ke code i ka hana ʻana, me ka hāʻawi mau ʻana a me ka uhi hoʻāʻo maikaʻi, ʻoi aku ka paʻakikī a me ka pilikia o ka ʻōwili ʻana i hope ma mua o ka hoʻoponopono ʻana i ka mana aʻe.

No ka mea, ʻaʻohe pilikia o ka holo ʻana i hope i kā mākou hihia, e hele mākou i kēia ala, no ka mea hiki iā mākou

  • e hoʻoponopono i ka hewa ma ka huahana i ka hikiwawe;
  • hana code i loko master kūpono koke no ka hoʻomaka ʻana i kahi hana hou.

️Ka hana

  1. E hoʻololi i ka lālā master kūloko.
  2. Hoʻohou i ka waihona kūloko mai ka waihona mamao.
  3. E hoʻihoʻi i ka hana hoʻohui PR Nānā i nā ʻanuʻu в master.
  4. Hoʻopuka i nā hoʻololi i kahi waihona mamao.

ʻO kēia ka moʻolelo o kahi waihona me kahi hui hui i hoʻihoʻi ʻia
Nā kūlana maʻamau me ka hoʻohui mau

Nā Pūʻulu

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

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

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

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

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

️ Hoʻāʻo iā ʻoe iho

E hōʻoia i kēlā ci.md ʻaʻohe kikokikona "sneaky bug" ma hope o ka hoʻihoʻi ʻana i kahi hui hui.

Hoʻoponopono i ka papa inoa o nā ʻanuʻu CI a hoʻihoʻi i ka haku

Ua hoʻihoʻi loa mākou i ka hui ʻana o ka lālā. feature. ʻO ka nūhou maikaʻi ʻaʻole mākou hewa i kēia manawa master. ʻO ka nūhou maikaʻi ʻo kā mākou papa inoa nui o nā ʻanuʻu hoʻohui hoʻomau. No laila, ma ke kūpono, pono mākou e hoʻopili i ka hoʻoponopono i nā hana mai feature a hoihoi ia lakou i master me ka hoʻoponopono.

Hiki iā mākou ke hoʻokokoke i ka pilikia ma nā ʻano like ʻole:

  • e hoʻihoʻi i kahi hana e hoʻopau i kahi hui feature с master;
  • neʻe commit mai ka mua feature.

Hoʻohana nā hui hoʻomohala ʻokoʻa i nā ala like ʻole i kēia hihia, akā e hoʻoneʻe mākou i nā hana pono i kahi lālā ʻokoʻa a hana i kahi noi huki ʻokoʻa no kēia lālā hou.

️Ka hana

  1. E hana i kahi pae i kapa ʻia feature-fix a hoʻololi i laila.
  2. E neʻe i nā hana a pau mai ka lālā mua feature i kahi pae hou. E hoʻoholo i nā paio hoʻohui i hana ʻia i ka wā o ka neʻe ʻana.

    Nā kūlana maʻamau me ka hoʻohui mau

  3. Hoʻohui i kahi hoʻāʻo regression i ci.test.js:

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

  4. E holo i nā hoʻokolohua ma ka ʻāina e hōʻoia ʻaʻole e hāʻule.
  5. Wehe i ka kikokikona "me kahi ʻōpala sneaky" i loko ci.md.
  6. Hoʻohui i nā hoʻololi hoʻāʻo a me nā hoʻololi papa kuhikuhi i ka papa kuhikuhi a hoʻokō iā lākou.
  7. Hoʻopuka i ka lālā i kahi waihona mamao.

Pono ʻoe e hoʻopau i kahi mea like me kēia:
Nā kūlana maʻamau me ka hoʻohui mau

Nā Pūʻulu

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

E hana i kahi noi huki.

E hana i kahi noi huki me kahi poʻo inoa Hoʻoponopono i ka hiʻona. Hoʻokomo feature-fix e like me "lālā poʻo" a master like me "lalana kumu".
E ʻoluʻolu e kali a pau nā hoʻāʻo. Hiki iāʻoe keʻike i ke kūlana o nā ho'āʻo ma lalo o ka kūkākūkā PR.

E hōʻoia ua kau ʻoe master i kāna e wehe i ka waihona Ma ke 'ano he "lālā kumu", 'a'ole au e pane aku i nā noi no ka ho'ololi 'ana i ka waihona mea papa.

E ʻae i ka noi huki "Hoʻoponopono i ka hiʻohiʻona"

Mahalo no ka hoʻoponopono ʻana! E ʻoluʻolu e ʻae i nā hoʻololi i master mai noi huki.

️Ka hana

  1. Kaomi "Merge pull request".
  2. Kaomi "Confirm merge".
  3. Kaomi "Delete branch" no ka mea ʻaʻole pono mākou.

ʻO kēia ka mea e pono ai ʻoe i kēia manawa.
Nā kūlana maʻamau me ka hoʻohui mau

Hoʻomaikaʻi!

Ua hoʻopau ʻoe i nā ʻanuʻu āpau a nā kānaka e hana maʻamau i ka wā hoʻohui mau.

Inā ʻike ʻoe i kekahi pilikia me ka papa a ʻike paha pehea e hoʻomaikaʻi ai, e ʻoluʻolu e hana i kahi pilikia i loko nā waihona me nā mea papa. Loaʻa i kēia papa pāʻani pāʻani me ka hoʻohana ʻana iā GitHub Learning Lab ma ke ʻano he kahua.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka