Txhawm rau tsim kom muaj ib lub vev xaib tshwj xeeb, feem ntau, nws txaus los sau nws siv Jekylllos ntawm kev khiav hauv phau ntawv qhia /docs werf repository coj cov lus txib (jekyll build), tom qab hloov mus rau Git tag ntawm qhov xav tau version.
Nws tsuas yog tseem ntxiv qhov ntawd:
tus nqi hluav taws xob nws tus kheej (werf) yog siv los ua ke;
Cov txheej txheem CI / CD yog tsim los ntawm GitLab CI;
thiab tag nrho cov no, tau kawg, khiav hauv Kubernetes.
paub tab
Tam sim no cia peb tsim cov haujlwm uas coj mus rau hauv tus account tag nrho cov lus piav qhia tshwj xeeb:
Tom qab hloov lub werf version ntawm txhua qhov hloov tshiab channel cov ntaub ntawv ntawm lub xaib yuav tsum tau hloov kho tshiab.
Rau kev txhim kho koj yuav tsum muaj peev xwm qee zaum saib ua ntej versions ntawm lub site.
Lub vev xaib yuav tsum tau muab rov ua dua tom qab hloov pauv ntawm ib qho channel los ntawm Git tags, tab sis nyob rau hauv tus txheej txheem ntawm kev tsim cov duab peb yuav tau txais cov nram qab no nta:
Txij li thaum daim ntawv teev cov versions ntawm cov kev hloov pauv, tsuas yog cov ntaub ntawv rau cov channel uas cov version tau hloov yuav tsum tau rov tsim dua. Tom qab tag nrho, rov tsim dua txhua yam tsis zoo heev.
Cov txheej txheem ntawm kev tso tawm tuaj yeem hloov pauv. Nyob rau qee lub sijhawm, piv txwv li, tej zaum yuav tsis muaj ib qho version ntawm cov channel ruaj khov dua li qhov kev nkag mus rau 1.1 thaum ntxov, tab sis dhau sij hawm lawv yuav tshwm sim - qhov no, koj yuav tsum tsis txhob hloov lub rooj sib txoos manually?
Xwb, koj tuaj yeem khiav txhua qhov yuav tsum tau ua raws li cais cais hauv Kubernetes. Qhov kev xaiv no txhais tau hais tias muaj ntau yam khoom hauv pawg, uas yuav loj hlob nrog rau qhov nce ntawm qhov ruaj khov werf tso tawm. Thiab qhov no, nyob rau hauv lem, implies ntau complex txij nkawm: txhua version muaj nws tus kheej HTTP server, thiab nrog ib tug me me load. Ntawm chav kawm, qhov no kuj suav nrog cov nqi peev nyiaj ntau dua.
Peb coj tib txoj kev assembling tag nrho cov tsim nyog versions nyob rau hauv ib daim duab. Cov kev sib sau ua ke ntawm txhua qhov chaw ntawm qhov chaw nyob hauv ib lub thawv nrog NGINX, thiab kev khiav mus rau qhov kev xa mus los ntawm NGINX Ingress. Ib qho qauv yooj yim - daim ntawv thov tsis muaj neeg nyob - tso cai rau koj yooj yim teev Kev xa tawm (nyob ntawm qhov thauj khoom) siv Kubernetes nws tus kheej.
Txhawm rau kom meej meej, peb tab tom sau ob daim duab: ib qho rau cov khoom siv hluav taws xob, qhov thib ob yog ib qho ntxiv rau cov dev circuit. Cov duab ntxiv yog siv (launched) tsuas yog nyob rau hauv lub dev Circuit Court ua ke nrog lub ntsiab thiab muaj cov version ntawm lub xaib los ntawm kev tshuaj xyuas, thiab routing ntawm lawv yog ua los ntawm Ingress cov peev txheej.
werf vs git clone thiab artifacts
Raws li twb tau hais lawm, txhawm rau tsim kom muaj qhov chaw zoo li qub rau ib qho tshwj xeeb ntawm cov ntaub ntawv, koj yuav tsum tau tsim los ntawm kev hloov mus rau qhov tsim nyog repository tag. Koj tuaj yeem ua qhov no los ntawm cloning lub repository txhua zaus koj tsim, xaiv cov cim npe tsim nyog los ntawm ib daim ntawv teev npe. Txawm li cas los xij, qhov no yog kev ua haujlwm siv nyiaj ntau heev thiab, ntxiv rau, yuav tsum tau sau cov lus qhia tsis tseem ceeb ... Lwm qhov tsis zoo yog tias nrog txoj hauv kev no tsis muaj txoj hauv kev los cache ib yam dab tsi thaum lub rooj sib txoos.
Ntawm no lub werf utility nws tus kheej tuaj rau peb pab, siv ntse caching thiab tso cai rau koj siv sab nraud repositories. Siv werf ntxiv cov cai los ntawm lub chaw cia khoom yuav ua rau kom muaj kev tsim, vim werf yeej tseem ceeb clones lub repository ib zaug thiab ces executes tsuasfetch yog tias tsim nyog. Tsis tas li ntawd, thaum ntxiv cov ntaub ntawv los ntawm qhov chaw cia khoom, peb tuaj yeem xaiv tsuas yog cov npe tsim nyog (hauv peb cov ntaub ntawv no yog phau ntawv teev npe. docs), uas yuav txo tau tus nqi ntawm cov ntaub ntawv ntxiv.
Txij li Jekyll yog ib qho cuab yeej tsim los rau kev sau cov ntaub ntawv zoo li qub thiab tsis xav tau hauv daim duab kawg, nws yuav yog qhov tsim nyog los suav nrog hauv werf artifact, thiab mus rau hauv daim duab kawg import tsuas yog muab tso ua ke tshwm sim.
Peb sau werf.yaml
Yog li, peb txiav txim siab tias peb yuav suav txhua lub version hauv ib qho khoom siv werf cais. Txawm li cas los peb peb tsis paub tias muaj pes tsawg ntawm cov khoom qub no yuav muaj thaum lub rooj sib txoos, yog li peb tsis tuaj yeem sau ib qho kev teeb tsa ruaj khov (hais nruj me ntsis, peb tseem tuaj yeem ua tau, tab sis nws yuav tsis ua haujlwm tag nrho).
werf tso cai rau koj siv Mus rau templates hauv koj cov ntaub ntawv configuration (werf.yaml), thiab qhov no ua rau nws ua tau tsim config ntawm ya nyob ntawm cov ntaub ntawv sab nraud (qhov koj xav tau!). Cov ntaub ntawv sab nraud nyob rau hauv peb rooj plaub yog cov ntaub ntawv hais txog versions thiab tso tawm, nyob rau hauv lub hauv paus ntawm uas peb sau tus yuav tsum tau ntawm cov artifacts thiab yog li ntawd peb tau txais ob daim duab: werf-doc ΠΈ werf-dev khiav ntawm cov circuits sib txawv.
Cov ntaub ntawv sab nraud yog dhau los ntawm ib puag ncig hloov pauv. Ntawm no yog lawv cov composition:
ROOT_VERSION - werf tso tawm version kom pom los ntawm lub neej ntawd ntawm lub xaib (nws tsis yog ib txwm tsim nyog los tso saib cov ntaub ntawv los ntawm tus lej tshaj tawm tshaj tawm). Piv txwv: v1.0.4-beta.20
REVIEW_SHA - hash ntawm kev tshuaj xyuas cog lus los ntawm qhov koj xav tau los tsim cov version rau lub voj voog xeem.
Cov kev hloov pauv no yuav tau sau rau hauv GitLab CI pipeline, thiab yuav ua li cas raws nraim sau hauv qab no.
Ua ntej tshaj plaws, kom yooj yim, peb txhais hauv werf.yaml Mus rau template variables, assigns lawv qhov tseem ceeb los ntawm ib puag ncig variables:
Cov duab ntxiv, uas, ua ke nrog ib qho tseem ceeb, yog launched rau ntawm lub dev Circuit Court, tsuas muaj ob lub versions ntawm lub site: lub version los ntawm kev tshuaj ntsuam xyuas thiab lub hauv paus version ntawm lub site (muaj cov cuab tam dav thiab, yog hais tias koj nco ntsoov. , tso tawm cov ntaub ntawv). Yog li, cov duab ntxiv yuav txawv ntawm qhov tseem ceeb tsuas yog hauv ntu ntshuam (thiab, ntawm chav kawm, hauv lub npe):
image: werf-dev
...
import:
- artifact: doc-root
add: /app/_main_site
to: /app/main_site
before: setup
- artifact: doc-root
add: /app/_ru_site
to: /app/ru_site
before: setup
{{- if .WerfReviewCommit }}
- artifact: doc-review
add: /app/_main_site
to: /app/main_site/review
before: setup
- artifact: doc-review
add: /app/_ru_site
to: /app/ru_site/review
before: setup
{{- end }}
Raws li tau sau tseg saum toj no, cov khoom cuav rau kev tshuaj xyuas kev cog lus yuav raug tsim tsuas yog thaum lub teeb ib puag ncig hloov pauv tau khiav REVIEW_SHA. Nws yuav muaj peev xwm tsis tsim cov duab werf-dev txhua yog tias tsis muaj ib puag ncig hloov pauv REVIEW_SHA, tab sis nyob rau hauv thiaj li yuav ntxuav los ntawm txoj cai Docker dluab nyob rau hauv werf ua hauj lwm rau lub werf-dev duab, peb yuav cia nws yuav tsum tau ua tsuas yog nrog lub hauv paus version artifact (nws twb tau ua lawm), kom yooj yim rau lub pipeline qauv.
Lub rooj sib txoos yog npaj txhij! Cia peb txav mus rau CI / CD thiab cov nuances tseem ceeb.
Pipeline hauv GitLab CI thiab cov yam ntxwv ntawm kev tsim kom muaj zog
Thaum khiav qhov tsim peb yuav tsum teeb tsa ib puag ncig hloov pauv siv hauv werf.yaml. Qhov no tsis siv rau REVIEW_SHA qhov sib txawv, uas peb yuav teeb tsa thaum hu xov tooj los ntawm GitHub nuv.
Tam sim no los ntawm kev lom zem. Txhawm rau kom ob qho tib si tsim thiab xa tawm daim ntawv thov ua haujlwm kom raug, nws yog ib qho tsim nyog los xyuas kom meej tias werf.yaml yog tib yam tsawg kawg hauv ib lub raj xa dej. Yog tias qhov xwm txheej no tsis tau ntsib, ces kos npe ntawm cov theem uas werf suav thaum lub rooj sib txoos thiab, piv txwv li, kev xa tawm, yuav txawv. Qhov no yuav ua rau muaj kev ua yuam kev, vim ... daim duab xav tau rau kev xa tawm yuav ploj mus.
Nyob rau hauv lwm yam lus, yog hais tias thaum lub sij hawm sib sau ua ke ntawm lub site duab cov ntaub ntawv hais txog kev tso tawm thiab versions yog tib yam, thiab thaum lub sij hawm ntawm deploy ib tug tshiab version raug tso tawm thiab ib puag ncig variables muaj ntau yam tseem ceeb, ces lub deployment yuav ua tsis tau tejyam: tom qab tag nrho, lub artifact ntawm lub tshiab version tseem tsis tau tsim.
Yog tiam werf.yaml nyob ntawm cov ntaub ntawv sab nraud (piv txwv li, cov npe ntawm cov qauv tam sim no, zoo li hauv peb rooj plaub), tom qab ntawd cov ntaub ntawv muaj pes tsawg leeg thiab cov txiaj ntsig ntawm cov ntaub ntawv no yuav tsum tau sau tseg hauv cov raj xa dej. Qhov no yog qhov tseem ceeb tshwj xeeb tshaj yog tias cov kev txwv sab nraud hloov ntau zaus.
Peb yuav txais thiab sau cov ntaub ntawv sab nraud ntawm thawj theem ntawm cov kav dej hauv GitLab (Ua ntej) thiab xa lawv mus ntxiv rau hauv daim ntawv GitLab CI artifact. Qhov no yuav tso cai rau koj khiav thiab rov pib ua haujlwm hauv kav dej (tsim, xa tawm, ntxuav) nrog tib lub teeb tsa hauv werf.yaml.
Cov ntsiab lus ntawm theem Ua ntej ntaub ntawv .gitlab-ci.yml:
GitLab yuav ntxiv ob yam khoom qub los ntawm theem mus rau theem tsim Ua ntej, yog li peb xa tawm cov hloov pauv nrog cov ntaub ntawv npaj cov ntaub ntawv siv tus tsim source common_envs.sh. Peb pib tsim theem nyob rau hauv txhua rooj plaub, tshwj tsis yog rau kev tso lub raj xa dej raws li lub sijhawm. Raws li lub sijhawm teem tseg, peb yuav khiav lub raj xa dej rau kev tu - qhov no tsis tas yuav tsum ua kev sib dhos.
Peb tau txais cov qauv kev sib sau ua ke: ib qho khoom cuav rau ib qho version.
Lub rooj sib txoos yog universal thiab tsis tas yuav hloov phau ntawv hloov thaum tshiab versions ntawm werf raug tso tawm: cov ntaub ntawv ntawm lub vev xaib tau hloov kho tshiab.
Ob daim duab tau sib sau ua ke rau qhov sib txawv contours.
Nws ua haujlwm sai, vim Caching yog siv ntau li ntau tau - thaum ib tug tshiab version ntawm werf raug tso tawm los yog ib tug GitHub nuv yog hu rau ib tug tshuaj ntsuam xyuas, tsuas yog cov khoom sib thooj nrog cov hloov version yog rebuilt.
Tsis tas yuav xav txog kev rho tawm cov duab tsis siv: kev tu raws li werf txoj cai yuav ua rau Docker Registry nyob rau hauv kev txiav txim.
tshawb pom
Siv werf tso cai rau lub rooj sib txoos ua haujlwm sai vim yog caching ntawm ob lub rooj sib txoos nws tus kheej thiab caching thaum ua haujlwm nrog cov chaw cia sab nraud.
Ua haujlwm nrog cov chaw cia khoom sab nraud Git tshem tawm qhov xav tau los clone tag nrho cov chaw cia khoom txhua lub sijhawm lossis rov tsim lub log nrog kev ua kom zoo dua qub. werf siv lub cache thiab ua lub cloning ib zaug, thiab tom qab ntawd siv fetch thiab tsuas yog thaum tsim nyog.
Muaj peev xwm siv Go templates hauv cov ntaub ntawv teeb tsa werf.yaml tso cai rau koj piav qhia txog kev sib dhos uas nws qhov tshwm sim nyob ntawm cov ntaub ntawv sab nraud.
Kev siv mount nyob rau hauv werf ho ceev ceev cov khoom ntawm artifacts - vim lub cache, uas yog ib txwm rau tag nrho cov pipelines.
werf ua kom yooj yim rau kev teeb tsa kev ntxuav, uas yog qhov tseem ceeb tshwj xeeb tshaj yog thaum lub tsev dynamically.