Hiki iā ʻoe ke kūkulu i nā kiʻi Docker i werf me ka hoʻohana ʻana i kahi Dockerfile maʻamau
ʻOi aku ka lohi ma mua o ka ʻole. A i ʻole pehea mākou i hana hewa nui ma ka loaʻa ʻole o ke kākoʻo no nā Dockerfiles maʻamau e kūkulu i nā kiʻi noi.
E kamaʻilio mākou e pili ana werf — ʻO ka pono GitOps e hoʻohui pū me kekahi ʻōnaehana CI/CD a hāʻawi i ka hoʻokele o ke ola holoʻokoʻa holoʻokoʻa, e ʻae ana:
hōʻiliʻili a hoʻolaha i nā kiʻi,
kau i nā noi ma Kubernetes,
holoi i nā kiʻi i hoʻohana ʻole ʻia me ka hoʻohana ʻana i nā kulekele kūikawā.
ʻO ka manaʻo o ka papahana e hōʻiliʻili i nā mea hana haʻahaʻa i loko o kahi ʻōnaehana hui hoʻokahi e hāʻawi i nā ʻenekini DevOps ka mana ma luna o nā noi. Inā hiki, pono e hoʻohana i nā pono hana (e like me Helm a me Docker). Inā ʻaʻohe hopena i kahi pilikia, hiki iā mākou ke hana a kākoʻo i nā mea āpau e pono ai no kēia.
Ka hope: kāu ʻohi kiʻi ponoʻī
ʻO kēia ka mea i hana ʻia me ka ʻohi kiʻi ma werf: ʻaʻole lawa ka Dockerfile maʻamau iā mākou. Inā ʻoe e nānā wikiwiki i ka mōʻaukala o ka papahana, ua ʻike mua ʻia kēia pilikia i nā mana mua o werf (a laila aia nō. ʻike ʻia ʻo dapp).
ʻOiai e hana ana i kahi mea hana no ke kūkulu ʻana i nā noi i nā kiʻi Docker, ua ʻike koke mākou ʻaʻole kūpono ʻo Dockerfile iā mākou no kekahi mau hana kikoʻī:
Pono e kūkulu i nā polokalamu pūnaewele liʻiliʻi maʻamau e like me ka papahana maʻamau aʻe:
e hoʻokomo i nā mea hilinaʻi o ka ʻōnaehana holoʻokoʻa,
e hoʻouka i kahi pūʻulu o nā hale waihona puke hilinaʻi noiʻi,
ʻohi waiwai,
a ʻo ka mea nui loa, e hoʻohou i ke code ma ke kiʻi me ka wikiwiki a me ka maikaʻi.
Ke hoʻololi ʻia nā faila papahana, pono e hana koke ka mea hana i kahi papa hou ma ke kau ʻana i kahi pā i nā faila i hoʻololi ʻia.
Inā ua loli kekahi mau faila, a laila pono e kūkulu hou i ka pae hilinaʻi kūpono.
I kēia lā he nui nā mea ʻē aʻe o kā mākou ʻohi, akā ʻo ia nā makemake a me nā koi mua.
Ma keʻano laulā, me ka noʻonoʻo ʻole ʻelua, ua kāhiko mākou iā mākou iho me ka ʻōlelo papahana a mākou i hoʻohana ai (e nānā ma lalo) a ku i ke ala e hoʻokō pono'ī DSL! E like me nā pahuhopu, ua manaʻo ʻia e wehewehe i ke kaʻina hana i nā pae a hoʻoholo i nā hilinaʻi o kēia mau pae ma nā faila. A hoʻokō ʻia ʻohi ʻohi ponoʻī, ka mea i hoʻohuli i ka DSL i ka pahuhopu hope - he kiʻi i hui ʻia. I ka wā mua aia ka DSL ma Ruby, akā e like me hoʻololi i Golang - ua hoʻomaka ka config o kā mākou ʻohi ʻohi e wehewehe i kahi faila YAML.
Hoʻonohonoho kahiko no dapp ma Ruby
Hoʻonohonoho i kēia manawa no werf ma YAML
Ua hoʻololi ʻia ke ʻano o ka mea ʻohi i ka manawa. I ka wā mua, ua hana mākou i kahi Dockerfile manawaleʻa ma ka lele ʻana mai kā mākou hoʻonohonoho ʻana, a laila hoʻomaka mākou e holo i nā ʻōlelo aʻoaʻo i loko o nā pahu pōkole a hana.
NB: I kēia manawa, ua hoʻomohala ʻia kā mākou ʻohi, e hana ana me kāna config (ma YAML) a kapa ʻia ʻo Stapel collector, i mea hana ikaika loa. Pono kona wehewehe kikoʻī i nā ʻatikala kaʻawale, a hiki ke loaʻa nā kikoʻī kumu ma palapala.
Ka ʻike o ka pilikia
Akā, ua ʻike mākou, ʻaʻole koke, ua hana hewa mākou: ʻaʻole mākou i hoʻohui i ka hiki kūkulu i nā kiʻi ma o Dockerfile maʻamau a hoʻohui iā lākou i loko o ka ʻōnaehana hoʻokele hoʻokele hoʻokele hoʻokahi hopena (ʻo ia hoʻi, e hōʻiliʻili i nā kiʻi, kau a hoʻomaʻemaʻe iā lākou). Pehea e hiki ai ke hana i kahi mea hana no ka waiho ʻana ma Kubernetes a ʻaʻole hoʻokō i ke kākoʻo Dockerfile, ʻo ia hoʻi. ala maʻamau e wehewehe i nā kiʻi no ka hapa nui o nā papahana?..
Ma kahi o ka pane ʻana i kēia nīnau, hāʻawi mākou i kahi hopena. He aha inā inā loaʻa iā ʻoe kahi Dockerfile (a i ʻole kahi hoʻonohonoho o Dockerfiles) a makemake ʻoe e hoʻohana werf?
NB: Ma ke ala, no ke aha ʻoe e makemake ai e hoʻohana i ka werf? ʻO nā hiʻohiʻona nui e iho i lalo:
piha hoʻokele hoʻokele hoʻokele me ka hoʻomaʻemaʻe kiʻi;
ka hiki ke hoʻokele i ka hui ʻana o kekahi mau kiʻi i ka manawa hoʻokahi mai hoʻokahi config;
Hoʻomaikaʻi ʻia ke kaʻina hana no nā kiʻi paʻi Helm.
Hiki ke loaʻa kahi papa inoa piha o lākou ma ʻaoʻao papahana.
No laila, inā ua hāʻawi mua mākou e kākau hou i ka Dockerfile i kā mākou config, i kēia manawa e ʻōlelo mākou: "E hana mākou i kāu Dockerfiles!"
Pehea e hoʻohana ai?
Ua ʻike ʻia ka hoʻokō piha ʻana o kēia hiʻohiʻona i ka hoʻokuʻu werf v1.0.3-beta.1. He mea maʻalahi ka manaʻo nui: kuhikuhi ka mea hoʻohana i ke ala i kahi Dockerfile i loaʻa i ka werf config, a laila holo i ke kauoha werf build... a ʻo ia - na werf e hōʻuluʻulu i ke kiʻi. E nānā kākou i kekahi laʻana abstract.
E hoʻolaha kākou i ka mea aʻe Dockerfile ma ke kumu o ka papahana:
FROM ubuntu:18.04
RUN echo Building ...
A e hoʻolaha mākou werf.yamlka mea hoʻohana i kēia Dockerfile:
ʻO ka hope, kākoʻo pū ʻo ia i ka hoʻolilo ʻana i nā ʻāpana kūkulu hou, e like me --build-arg и --add-host - ma o werf config. Loaʻa kahi wehewehe piha o ka hoʻonohonoho kiʻi Dockerfile ma palapala palapala.
Pehea ia hana?
I ka wā o ke kaʻina hana, hana ka cache maʻamau o nā papa kūloko i Docker. Eia naʻe, ʻo ka mea nui ka werf pū kekahi hoʻohui i ka hoʻonohonoho Dockerfile i kāna ʻōnaehana. He aha ke ʻano o kēia?
ʻO kēlā me kēia kiʻi i kūkulu ʻia mai kahi Dockerfile i hoʻokahi pae i kapa ʻia dockerfile (hiki iā ʻoe ke heluhelu hou aʻe e pili ana i nā pae i ka werf maanei).
No ke kahua dockerfile Werf e helu i kahi pūlima e pili ana i nā mea o ka hoʻonohonoho Dockerfile. Ke hoʻololi ka hoʻonohonoho Dockerfile, hoʻololi ke kau inoa dockerfile a hoʻomaka ʻo werf i kahi kūkulu hou ʻana i kēia kaʻina me kahi config Dockerfile hou. Inā ʻaʻole e loli ka pūlima, a laila lawe ʻo werf i ke kiʻi mai ka cache (ʻO nā kikoʻī hou aku e pili ana i ka hoʻohana ʻana i nā pūlima ma werf ua wehewehe ʻia ma keia hoike).
A laila, hiki ke paʻi ʻia nā kiʻi i hōʻiliʻili ʻia me ke kauoha werf publish (ai ole werf build-and-publish) a hoʻohana iā ia no ka hoʻolaha ʻana iā Kubernetes. E hoʻomaʻemaʻe ʻia nā kiʻi i paʻi ʻia i ka Docker Registry me ka hoʻohana ʻana i nā mea hoʻomaʻemaʻe werf maʻamau, ʻo ia hoʻi. E hoʻomaʻemaʻe ʻia nā kiʻi kahiko (ʻoi aku ma mua o N mau lā), nā kiʻi pili me nā lālā Git ʻole, a me nā kulekele ʻē aʻe.
Hiki ke loaʻa nā kikoʻī hou aku e pili ana i nā helu i wehewehe ʻia ma ka palapala:
I kēia manawa ʻaʻole kākoʻo ʻia ka hoʻohana ʻana i kahi URL waho ma kahi kuhikuhi ADD. ʻAʻole e hoʻomaka ʻo Werf i kahi hana hou i ka wā e hoʻololi ai ke kumu i ka URL i kuhikuhi ʻia. Hoʻolālā mākou e hoʻohui koke i kēia hiʻohiʻona.
2. ʻAʻole hiki iā ʻoe ke hoʻohui i ka .git i ke kiʻi
ʻO ka mea maʻamau, hoʻohui i kahi papa kuhikuhi .git i ke kiʻi - he hana ʻino ʻino a eia ke kumu:
ina .git noho i ke kiʻi hope loa, ʻaʻole kēia i nā loina 12 kumu app: No ka mea pono e hoʻopili ʻia ke kiʻi hope i hoʻokahi commit, ʻaʻole hiki ke hana git checkout hana kūʻokoʻa.
.git hoʻonui i ka nui o ke kiʻi (hiki ke nui ka waihona ma muli o ka hoʻohui ʻana o nā faila nui iā ia a laila holoi ʻia). ʻAʻole hilinaʻi ka nui o kahi lāʻau hana i pili wale me kahi hana kikoʻī i ka mōʻaukala o nā hana ma Git. I kēia hihia, ka hoʻohui a me ka wehe ʻana ma hope .git mai ke kiʻi hope ʻaʻole e hana: e loaʻa mau ke kiʻi i kahi papa ʻokoʻa - ʻo ia ke ʻano o ka hana ʻana o Docker.
Hiki iā Docker ke hoʻomaka i kahi kūkulu hou ʻole, ʻoiai ke kūkulu ʻia nei ka hana like, akā mai nā lāʻau hana like ʻole. No ka laʻana, hana ʻo GitLab i nā papa kuhikuhi cloned kaʻawale /home/gitlab-runner/builds/HASH/[0-N]/yourproject ke hiki ke hui like. ʻO ka hoʻohui hou ʻana ma muli o ka ʻoiaʻiʻo o ka papa kuhikuhi .git ʻokoʻa i nā ʻano cloned like ʻole o ka waihona hoʻokahi, ʻoiai ke kūkulu ʻia ka hana like.
Loaʻa ka hopena hope loa i ka hoʻohana ʻana i ka werf. Pono ʻo Werf i ka cache i kūkulu ʻia i ka wā e holo ana i kekahi mau kauoha (e.g. werf deploy). Ke holo nei kēia mau kauoha, helu ʻo werf i nā pūlima pae no nā kiʻi i kuhikuhi ʻia ma werf.yaml, a pono lākou i loko o ka cache hui - inā ʻaʻole hiki i ke kauoha ke hoʻomau i ka hana. Inā pili ka pūlima pae i ka ʻike .git, a laila loaʻa iā mākou kahi cache i paʻa ʻole i nā hoʻololi i nā faila pili ʻole, a ʻaʻole hiki iā werf ke kala i kēlā ʻano nānā (no nā kikoʻī hou aku, ʻike. palapala).
Ma ka laulā hoʻohui wale i kekahi mau faila pono ma o na kuhikuhi ADD i kekahi hihia e hoʻonui i ka pono a me ka hilinaʻi o ka mea kākau Dockerfile, a hoʻomaikaʻi pū i ka paʻa o ka cache i hōʻiliʻili ʻia no kēia Dockerfile, i nā hoʻololi pili ʻole ma Git.
ʻO ka hopena
ʻO kā mākou ala mua i ke kākau ʻana i kā mākou mea hana no nā pono kikoʻī he paʻakikī, pololei a pololei: ma kahi o ka hoʻohana ʻana i nā koʻokoʻo ma luna o ka Dockerfile maʻamau, ua kākau mākou i kā mākou hopena me ka syntax maʻamau. A ua loaʻa kēia i kāna mau mea maikaʻi: ua hoʻokō pono ka ʻohi Stapel i kāna hana.
Eia nō naʻe, i ke kaʻina o ke kākau ʻana i kā mākou mea hana ponoʻī, ua nalowale mākou i ke kākoʻo no nā Dockerfiles. Ua hoʻopaʻa ʻia kēia hemahema, a i ka wā e hiki mai ana mākou e hoʻolālā e hoʻomohala i ke kākoʻo Dockerfile me kā mākou mea hana Stapel maʻamau no nā kūkulu māhele ʻia a no ke kūkulu ʻana me nā Kubernetes (ʻo ia hoʻi.
No laila, inā loaʻa koke iā ʻoe kekahi mau Dockerfiles e moe ana a puni ... e hoʻāʻo werf!
PS Papa inoa o nā palapala e pili ana i ke kumuhana