ʻO ka pilikia o ka hoʻomaʻemaʻe "akamai" i nā kiʻi pahu a me kāna hopena i werf

ʻO ka pilikia o ka hoʻomaʻemaʻe "akamai" i nā kiʻi pahu a me kāna hopena i werf

Kūkākūkā ka ʻatikala i nā pilikia o ka hoʻomaʻemaʻe ʻana i nā kiʻi i hōʻiliʻili ʻia i loko o nā waihona registries (Docker Registry a me kāna mau analogues) i ka ʻoiaʻiʻo o nā pipeline CI / CD hou no nā noi ʻōiwi kapua i hāʻawi ʻia iā Kubernetes. Hāʻawi ʻia nā kumu nui no ka pili ʻana o nā kiʻi a me nā pilikia i ka hoʻomaʻemaʻe ʻana i ka hoʻomaʻemaʻe, mālama i ka wahi a me ka hālāwai ʻana i nā pono o nā hui. ʻO ka hope, me ka hoʻohana ʻana i ka laʻana o kahi papahana Open Source kikoʻī, e haʻi mākou iā ʻoe pehea e hiki ai ke lanakila i kēia mau pilikia.

Hōʻike

Hiki ke ulu wikiwiki ka helu o nā kiʻi i loko o kahi waihona waihona, e lawe ana i nā wahi waihona a pēlā e hoʻonui nui ai i kona kumukūʻai. No ka hoʻomalu, palena a mālama paha i ka ulu ʻana o ka wahi i noho ʻia ma ke kākau inoa, ʻae ʻia:

  1. hoʻohana i ka helu paʻa o nā hōʻailona no nā kiʻi;
  2. hoʻomaʻemaʻe i nā kiʻi ma kekahi ʻano.


Hiki ke ʻae ʻia ka palena mua i kekahi manawa no nā hui liʻiliʻi. Inā lawa nā hōʻailona paʻa o nā mea hoʻomohala (latest, main, test, boris etc.), ʻaʻole e pehu ka registry i ka nui a no ka manawa lōʻihi ʻaʻole pono ʻoe e noʻonoʻo e hoʻomaʻemaʻe iā ia. Ma hope o nā mea a pau, holoi ʻia nā kiʻi pili ʻole, a ʻaʻohe hana i koe no ka hoʻomaʻemaʻe ʻana (ua hana ʻia nā mea āpau e ka ʻohi ʻōpala maʻamau).

Eia naʻe, ua kaupalena kēia ala i ka hoʻomohala ʻana a ʻaʻole hiki ke hoʻohana ʻia i nā papahana CI/CD hou. ʻO kahi hapa nui o ka hoʻomohala ʻana ke automation, hiki iā ʻoe ke hoʻāʻo, hoʻolaha a hāʻawi i nā hana hou i nā mea hoʻohana me ka wikiwiki. No ka laʻana, ma kā mākou papahana āpau, hana ʻia kahi pipeline CI me kēlā me kēia hana. I loko o ia mea, ʻākoakoa ʻia ke kiʻi, hoʻāʻo ʻia, ʻōwili ʻia i nā ʻāpana Kubernetes like ʻole no ka debugging a me ke koena o nā loiloi, a inā maikaʻi nā mea a pau, hiki nā loli i ka mea hoʻohana hope. A ʻaʻole kēia he ʻepekema rocket, akā he hanana i kēlā me kēia lā no nā mea he nui - ʻoi aku paha iā ʻoe, ʻoiai ke heluhelu nei ʻoe i kēia ʻatikala.

Ma muli o ka hoʻoponopono ʻana i nā pōpoki a me ka hoʻomohala ʻana i nā hana hou e hana like ʻia, a hiki ke hana ʻia nā hoʻokuʻu ʻana i nā manawa he nui i ka lā, ʻike ʻia ke kaʻina hana hoʻomohala e hele pū me ka nui o nā hana, ʻo ia hoʻi. he helu nui o nā kiʻi i loko o ke kākau inoa. ʻO ka hopena, ua kū mai ka pilikia o ka hoʻonohonoho ʻana i ka hoʻomaʻemaʻe hoʻomaʻemaʻe o ka papa inoa, ʻo ia hoʻi. ka wehe ʻana i nā kiʻi pili ʻole.

Akā pehea ʻoe e hoʻoholo ai inā pili ke kiʻi?

Paʻa no ka pili o ke kiʻi

I ka hapa nui o nā hihia, ʻo nā kumu nui e:

1. ʻO ka mua (ʻo ka mea maopopo loa a koʻikoʻi o nā mea a pau) ʻo ia nā kiʻi hoʻohana ʻia i kēia manawa ma Kubernetes. ʻO ka wehe ʻana i kēia mau kiʻi e hiki ke hopena i nā kumukūʻai hoʻopau hana nui (no ka laʻana, koi ʻia nā kiʻi no ka hana hou ʻana) a i ʻole e hōʻole i ka hoʻoikaika ʻana o ka hui e hoʻopau i kekahi o nā puka lou. (No kēia kumu ua hana mākou i kahi kūikawā Prometheus mea hoʻopuka, ka mea e hahai ana i ka loaʻa ʻole o ia mau kiʻi ma kekahi pūʻulu Kubernetes.)

2. ʻO ka lua (ʻaʻole maopopo, akā nui loa a pili hou i ka hoʻohana ʻana) - nā kiʻi koi ʻia no ka rollback inā ʻike ʻia nā pilikia koʻikoʻi i ka mana o keia manawa. No ka laʻana, i ka hihia o Helm, he mau kiʻi kēia i hoʻohana ʻia i nā mana i mālama ʻia o ka hoʻokuʻu. (Ma ke ala, ma ka Helm ka palena he 256 mau hoʻoponopono, akā ʻaʻole pono paha kekahi e hoʻopakele. pela he helu nui o nā mana?..) Ma hope o nā mea a pau, mākou, ma ke ʻano, mālama i nā mana i hiki iā mākou ke hoʻohana iā lākou ma hope, ʻo ia. "roll back" iā lākou inā pono.

3. ʻEkolu - mea hoʻomohala pono: Nā kiʻi a pau e pili ana i kā lākou hana i kēia manawa. No ka laʻana, inā mākou e noʻonoʻo ana i kahi PR, a laila kūpono ke waiho ʻana i kahi kiʻi e pili ana i ka hana hope a, e ʻōlelo, ka hana mua: ma kēia ala e hiki ai i ka mea hoʻomohala ke hoʻi wikiwiki i kekahi hana a hana me nā loli hou.

4. ʻEhā - nā kiʻi i pili i nā mana o kā mākou noi, i.e. nā huahana hope loa: v1.0.0, 20.04.01/XNUMX/XNUMX, sierra, etc.

NB: Ua hoʻokumu ʻia nā pae hoʻohālike i wehewehe ʻia ma muli o ka ʻike i ka launa pū ʻana me ka nui o nā hui hoʻomohala mai nā hui like ʻole. Eia nō naʻe, ʻoiaʻiʻo, ma muli o nā kikoʻī i nā kaʻina hana hoʻomohala a me nā ʻōnaehana i hoʻohana ʻia (no ka laʻana, ʻaʻole hoʻohana ʻia ʻo Kubernetes), ʻokoʻa paha kēia mau pae.

ʻO ke kūpono a me nā hoʻonā e kū nei

ʻO nā lawelawe kaulana me nā hoʻopaʻa inoa pahu, e like me ke kānāwai, hāʻawi i kā lākou mau kulekele hoʻomaʻemaʻe kiʻi: i loko o ia mau mea hiki iā ʻoe ke wehewehe i nā kūlana kahi i wehe ʻia ai kahi hōʻailona mai ka papa inoa. Eia nō naʻe, ua kaupalena ʻia kēia mau kūlana e nā ʻāpana e like me nā inoa, ka manawa hana, a me ka helu o nā hōʻailona*.

* Ma muli o nā hoʻokō kikoʻī kikoʻī kikoʻī. Ua noʻonoʻo mākou i nā hiki o kēia mau hoʻonā: Azure CR, Docker Hub, ECR, GCR, GitHub Packages, GitLab Container Registry, Harbour Registry, JFrog Artifactory, Quay.io - ma Sepatemaba'2020.

Ua lawa loa kēia hoʻonohonoho o nā ʻāpana e hoʻokō i ka helu ʻehā - ʻo ia hoʻi, e koho i nā kiʻi e pili ana i nā mana. Eia nō naʻe, no nā koina ʻē aʻe a pau, pono e koho kekahi i kekahi ʻano hoʻoholo kuʻikahi (kahi ʻoi aku ka paʻakikī a i ʻole, ʻoi aku ka ʻoluʻolu o nā kulekele) - ma muli o nā manaʻolana a me nā hiki kālā.

No ka laʻana, hiki ke hoʻoholo ʻia ke kolu o ka pae - pili i nā pono o nā mea hoʻomohala - ma ka hoʻonohonoho ʻana i nā kaʻina hana i loko o nā hui: inoa kikoʻī o nā kiʻi, mālama i nā papa inoa ʻae kūikawā a me nā ʻaelike kūloko. Akā, i ka hopena, pono e hoʻohana ʻia. A inā ʻaʻole lawa nā mana o nā hoʻonā mākaukau, pono ʻoe e hana i kāu mea ponoʻī.

Ua like ke kūlana me nā pae mua ʻelua: ʻaʻole hiki iā lākou ke ʻoluʻolu me ka loaʻa ʻole o ka ʻikepili mai kahi ʻōnaehana waho - kahi i kau ʻia ai nā noi (i kā mākou hihia, Kubernetes).

Hōʻike o ka holo hana ma Git

E ʻōlelo mākou ke hana nei ʻoe i kahi mea e like me kēia ma Git:

ʻO ka pilikia o ka hoʻomaʻemaʻe "akamai" i nā kiʻi pahu a me kāna hopena i werf

ʻO ka ikona me ke poʻo ma ke kiʻikuhi e hōʻike ana i nā kiʻi pahu e kau ʻia nei ma Kubernetes no nā mea hoʻohana (nā mea hoʻohana hope, nā mea hoʻāʻo, nā mana, a me nā mea ʻē aʻe) a i hoʻohana ʻia e nā mea hoʻomohala no ka debugging a me nā kumu like.

He aha ka hopena inā ʻae nā kulekele hoʻomaʻemaʻe e mālama i nā kiʻi (ʻaʻole holoi ʻia) ma nā inoa inoa i hāʻawi ʻia?

ʻO ka pilikia o ka hoʻomaʻemaʻe "akamai" i nā kiʻi pahu a me kāna hopena i werf

ʻOiaʻiʻo, ʻaʻole e hauʻoli kekahi i kēlā ʻano hiʻohiʻona.

He aha ka mea e hoʻololi ai inā ʻae nā kulekele ʻaʻole e holoi ʻia nā kiʻi? e like me ka manawa manawa / helu o nā hana hope?

ʻO ka pilikia o ka hoʻomaʻemaʻe "akamai" i nā kiʻi pahu a me kāna hopena i werf

Ua ʻoi aku ka maikaʻi o ka hopena, akā mamao loa ia mai ka maikaʻi. Ma hope o nā mea a pau, loaʻa iā mākou nā mea hoʻomohala e pono ai nā kiʻi i loko o ke kākau inoa (a i ʻole i kau ʻia ma K8s) no ka debug bugs...

No ka hōʻuluʻulu ʻana i ke kūlana mākeke o kēia manawa: ʻaʻole hāʻawi nā hana i loaʻa i loko o nā waihona registry i ka hiki ke hoʻomaʻemaʻe, a ʻo ke kumu nui o kēia. ʻaʻohe ala e launa pū me ka honua o waho. ʻIke ʻia e koi ʻia nā hui e koi i kēlā ʻano maʻalahi e hoʻokō kūʻokoʻa i ka holoi ʻana i ke kiʻi "mai waho", me ka hoʻohana ʻana i ka Docker Registry API (a i ʻole ka API maoli o ka hoʻokō kūpono).

Eia nō naʻe, ke ʻimi nei mākou i kahi hoʻonā honua e hoʻomaʻemaʻe i nā kiʻi no nā hui like ʻole me ka hoʻohana ʻana i nā papa inoa ʻokoʻa ...

ʻO kā mākou ala i ka hoʻomaʻemaʻe kiʻi āpau

No hea mai kēia pono? ʻO ka ʻoiaʻiʻo ʻaʻole mākou he hui kaʻawale o nā mea hoʻomohala, akā he hui e lawelawe ana i nā mea he nui i ka manawa hoʻokahi, e kōkua ana i ka hoʻoponopono piha ʻana i nā pilikia CI/CD. A ʻo ka mea hana ʻenehana nui no kēia ʻo ka Open Source utility werf. ʻO kona hiʻohiʻona, ʻaʻole ia e hana i kahi hana hoʻokahi, akā hele pū me nā kaʻina hana hoʻomau i nā pae āpau: mai ka hui ʻana a hiki i ke kau ʻana.

ʻO ka paʻi ʻana i nā kiʻi i ke kākau inoa * (ma hope koke o ke kūkulu ʻia ʻana) he hana maopopo ia o ia mea pono. A no ka waiho ʻana o nā kiʻi ma laila no ka mālama ʻana, a laila - inā ʻaʻole palena ʻole kāu mālama - pono ʻoe e kuleana no kā lākou hoʻomaʻemaʻe ʻana. Pehea mākou i hoʻokō ai i ka kūleʻa i kēia, me ka hoʻokō ʻana i nā pae hoʻohālike āpau, e kūkākūkā hou ʻia.

* ʻOiai ʻokoʻa paha nā papa inoa iā lākou iho (Docker Registry, GitLab Container Registry, Harbor, a me nā mea ʻē aʻe), ke kū nei kā lākou mea hoʻohana i nā pilikia like. ʻAʻole hilinaʻi ka hopena o ke ao holoʻokoʻa i kā mākou hihia i ka hoʻokō ʻana o ke kākau inoa, no ka mea holo ma waho o nā papa inoa a hāʻawi i ka ʻano like no kēlā me kēia.

ʻOiai ke hoʻohana nei mākou i ka werf ma ke ʻano he laʻana hoʻokō, manaʻolana mākou e pono nā ala i hoʻohana ʻia i nā hui ʻē aʻe i kū i nā pilikia like.

No laila ua hana mākou kūwaho ka hoʻokō ʻana i kahi hana no ka hoʻomaʻemaʻe ʻana i nā kiʻi - ma kahi o kēlā mau mana i kūkulu ʻia i loko o nā papa inoa no nā ipu. ʻO ka hana mua e hoʻohana i ka Docker Registry API e hana i nā kulekele primitive like no ka helu o nā hōʻailona a me ka manawa o kā lākou hana ʻana (i ʻōlelo ʻia ma luna). Hoʻohui ʻia iā lākou ʻae i ka papa inoa e pili ana i nā kiʻi i hoʻohana ʻia i nā ʻōnaehana i hoʻonohonoho ʻia, i.e. Kubernetes. No ka mea hope, ua lawa ka hoʻohana ʻana i ka Kubernetes API e hoʻomaʻamaʻa i nā kumuwaiwai āpau a loaʻa i kahi papa inoa o nā waiwai. image.

Ua hoʻoponopono kēia ʻano hana liʻiliʻi i ka pilikia koʻikoʻi loa (ka helu helu 1), akā ʻo ka hoʻomaka wale nō ia o kā mākou huakaʻi e hoʻomaikaʻi i ka mīkini hoʻomaʻemaʻe. ʻO ka hana aʻe - a ʻoi aku ka hoihoi - ʻo ia ka hoʻoholo hoʻopili i nā kiʻi i paʻi ʻia me ka mōʻaukala Git.

Hoʻopili i nā papa hana

I ka hoʻomaka ʻana, ua koho mākou i kahi ala e mālama ai ke kiʻi hope i ka ʻike e pono ai no ka hoʻomaʻemaʻe ʻana, a kūkulu i ke kaʻina hana ma nā papa kuhikuhi. I ka paʻi ʻana i kahi kiʻi, ua koho ka mea hoʻohana i kahi koho hōʻailona kikoʻī (git-branch, git-commit ai ole ia, git-tag) a hoʻohana i ka waiwai kūpono. I nā ʻōnaehana CI, ua hoʻonohonoho ʻia kēia mau waiwai e pili ana i nā ʻano hoʻololi kaiapuni. I ka ʻoiaʻiʻo ua pili ke kiʻi hope me kahi Git primitive, mālama i ka ʻikepili pono no ka hoʻomaʻemaʻe ʻana i nā lepili.

Ua hopena kēia ala i kahi hoʻonohonoho o nā kulekele i ʻae ʻia e hoʻohana ʻia ʻo Git i kumu hoʻokahi o ka ʻoiaʻiʻo:

  • I ka holoi ʻana i kahi lālā/tag ma Git, ua hoʻopau ʻia nā kiʻi pili i ka papa inoa.
  • Hiki ke hoʻomalu ʻia ka helu o nā kiʻi e pili ana i nā huaʻōlelo Git a me nā commit e ka helu o nā hōʻailona i hoʻohana ʻia i ka schema i koho ʻia a me ka manawa i hana ʻia ai ka hana pili.

Ma ke ʻano holoʻokoʻa, ua hoʻokō ka hopena o ka hoʻokō ʻana i kā mākou pono, akā ua kali koke mai kahi pilikia hou iā mākou. ʻO ka mea ʻoiaʻiʻo, ʻoiai e hoʻohana ana i nā hoʻolālā e pili ana i ka Git primitives, ua hālāwai mākou i kekahi mau hemahema. (Ma muli o kā lākou wehewehe ʻana ma waho o ke kiko o kēia ʻatikala, hiki i nā mea āpau ke hoʻomaʻamaʻa iā lākou iho me nā kikoʻī maanei.) No laila, i ka hoʻoholo ʻana e hoʻololi i kahi ala ʻoi aku ka maikaʻi o ka hoʻopaʻa inoa ʻana (content-based tagging), pono mākou e noʻonoʻo hou i ka hoʻokō ʻana i ka hoʻomaʻemaʻe kiʻi.

ʻO ka algorithm hou

No ke aha mai? Me ka hoʻopili ʻana i ka ʻikepili, hiki i kēlā me kēia tag ke hoʻokō i nā hana he nui ma Git. Ke hoʻomaʻemaʻe i nā kiʻi, ʻaʻole hiki iā ʻoe ke manaʻo hou wale mai ka commit kahi i hoʻohui ʻia ai ka inoa hou i ka papa inoa.

No ka algorithm hoʻomaʻemaʻe hou, ua hoʻoholo ʻia e neʻe aku mai ka hoʻopaʻa inoa ʻana a kūkulu kaʻina hana kiʻi meta, mālama ʻia kēlā me kēia mea i kahi pūʻulu o:

  • ka hana i hoʻokō ʻia ai ka paʻi ʻana (ʻaʻole pili i ka hoʻohui ʻia ʻana o ke kiʻi, hoʻololi ʻia a hoʻomau ʻia paha i loko o ka waihona waihona);
  • a me kā mākou mea hōʻike kūloko e pili ana i ke kiʻi i hui ʻia.

ʻO ia hoʻi, ua hoʻolako ʻia ka hoʻopili ʻana i nā hōʻailona i paʻi ʻia me nā commits ma Git.

Hoʻonohonoho hope a me ka algorithm maʻamau

I ka hoʻonohonoho ʻana i ka hoʻomaʻemaʻe, hiki i nā mea hoʻohana ke komo i nā kulekele e koho i nā kiʻi o kēia manawa. Ua wehewehe ʻia kēlā me kēia kulekele:

  • nui mau kuhikuhi, i.e. Nā inoa Git a i ʻole nā ​​lālā Git i hoʻohana ʻia i ka wā e nānā ana;
  • a me ka palena o nā kiʻi i ʻimi ʻia no kēlā me kēia kuhikuhi mai ka hoʻonohonoho.

No ka hōʻike ʻana, ʻo ia ke ʻano o ka hoʻonohonoho kulekele paʻamau e like me:

cleanup:
  keepPolicies:
  - references:
      tag: /.*/
      limit:
        last: 10
  - references:
      branch: /.*/
      limit:
        last: 10
        in: 168h
        operator: And
    imagesPerReference:
      last: 2
      in: 168h
      operator: And
  - references:  
      branch: /^(main|staging|production)$/
    imagesPerReference:
      last: 10

Aia i loko o kēia hoʻonohonoho ʻana i ʻekolu mau kulekele e pili ana i kēia mau lula:

  1. E mālama i ke kiʻi no nā hōʻailona 10 Git hope loa (ma ka lā hoʻokumu ʻia).
  2. Mai mālama i 2 mau kiʻi i paʻi ʻia i ka pule i hala no ka ʻoi aku ma mua o 10 mau pae me ka hana i ka pule i hala.
  3. E mālama i nā kiʻi 10 no nā lālā main, staging и production.

Hoʻopili ka algorithm hope i nā pae aʻe:

  • Ke kiʻi nei i nā hōʻike mai ka waihona waihona.
  • Haʻalele nā ​​kiʻi i hoʻohana ʻia ma Kubernetes, no ka mea Ua koho mua mākou iā lākou ma ke koho balota ʻana i ka K8s API.
  • Ke nānā nei i ka mōʻaukala Git a me ka haʻalele ʻana i nā kiʻi e pili ana i nā kulekele i kuhikuhi ʻia.
  • Ke wehe nei i nā kiʻi i koe.

Ke hoʻi nei i kā mākou kiʻi, eia ka mea e hana me werf:

ʻO ka pilikia o ka hoʻomaʻemaʻe "akamai" i nā kiʻi pahu a me kāna hopena i werf

Eia nō naʻe, inā ʻaʻole ʻoe e hoʻohana i ka werf, hiki ke hoʻohana ʻia kahi ala like me ka hoʻomaʻemaʻe kiʻi holomua - i hoʻokahi hoʻokō a i ʻole kekahi (e like me ke ala makemake i ka hoʻopili ʻana i nā kiʻi) - hiki ke hoʻohana ʻia i nā ʻōnaehana/pono. No ka hana ʻana i kēia, ua lawa ka hoʻomanaʻo ʻana i nā pilikia e kū mai ana a loaʻa i kēlā mau manawa i kāu waihona e hiki ai iā ʻoe ke hoʻohui i kā lākou hoʻonā e like me ka hiki. Manaʻo mākou e kōkua ke ala a mākou i hele ai e nānā i kāu hihia kūikawā me nā kikoʻī a me nā manaʻo hou.

hopena

  • Ma hope a ma hope paha, ʻike ka hapa nui o nā hui i ka pilikia o ka nui o ka hoʻopaʻa inoa.
  • I ka huliʻana i nā hoʻonā, pono mua e hoʻoholo i nā pae hoʻohālike no ka pili o ke kiʻi.
  • ʻO nā mea hana i hāʻawi ʻia e nā lawelawe hoʻopaʻa inoa pahu kaulana e ʻae iā ʻoe e hoʻonohonoho i kahi hoʻomaʻemaʻe maʻalahi ʻaʻole e noʻonoʻo i ka "honua waho": nā kiʻi i hoʻohana ʻia ma Kubernetes a me nā ʻano o nā kaila hana o ka hui.
  • Pono ka algorithm maʻalahi a maikaʻi e hoʻomaopopo i nā kaʻina CI / CD a hana ʻaʻole wale me ka ʻikepili kiʻi Docker.

PS

E heluhelu pū ma kā mākou blog:

Source: www.habr.com

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