ProHoster > Blogs > AdministrÄcija > Docker attÄlu dinamiska montÄža un izvietoÅ”ana ar werf, izmantojot versijas dokumentÄcijas vietnes piemÄru
Docker attÄlu dinamiska montÄža un izvietoÅ”ana ar werf, izmantojot versijas dokumentÄcijas vietnes piemÄru
MÄs jau vairÄk nekÄ vienu reizi esam runÄjuÅ”i par mÅ«su GitOps rÄ«ku. werf, un Å”oreiz vÄlamies dalÄ«ties pieredzÄ par vietnes komplektÄÅ”anu ar paÅ”a projekta dokumentÄciju - werf.io (tÄ krievu versija ir en.werf.io). Å Ä« ir parasta statiska vietne, taÄu tÄs montÄža ir interesanta ar to, ka tÄ ir veidota, izmantojot dinamisku artefaktu skaitu.
Iedziļinieties vietnes struktÅ«ras niansÄs: kopÄjas izvÄlnes Ä£enerÄÅ”ana visÄm versijÄm, lapas ar informÄciju par izlaidumiem utt. - mÄs to nedarÄ«sim. TÄ vietÄ pievÄrsÄ«simies dinamiskÄs montÄžas problÄmÄm un iezÄ«mÄm un nedaudz uz pavadoÅ”ajiem CI/CD procesiem.
Ievads: kÄ vietne darbojas
SÄkumÄ werf dokumentÄcija tiek saglabÄta kopÄ ar tÄs kodu. Tas uzliek noteiktas izstrÄdes prasÄ«bas, kas parasti neietilpst Ŕī panta darbÄ«bas jomÄ, taÄu vismaz var teikt, ka:
Jaunas werf funkcijas nedrÄ«kst izlaist, neatjauninot dokumentÄciju, un, gluži pretÄji, jebkuras izmaiÅas dokumentÄcijÄ nozÄ«mÄ jaunas werf versijas izlaiÅ”anu;
Projektam ir diezgan intensÄ«va attÄ«stÄ«ba: jaunas versijas var izdot vairÄkas reizes dienÄ;
Visas manuÄlÄs darbÄ«bas, lai izvietotu vietni ar jaunu dokumentÄcijas versiju, ir vismaz nogurdinoÅ”as;
Projekts izmanto semantisko pieeju versiju veidoÅ”ana, ar 5 stabilitÄtes kanÄliem. IzlaiÅ”anas process ietver secÄ«gu versiju pÄreju pa kanÄliem, lai palielinÄtu stabilitÄti: no alfa uz cieto;
Vietnei ir versija krievu valodÄ, kas ādzÄ«vo un attÄ«stÄsā (t.i., kuras saturs tiek atjauninÄts) paralÄli galvenajai (t.i., angļu valodas) versijai.
Lai noslÄptu visu Å”o āiekÅ”Äjo virtuviā no lietotÄja, piedÄvÄjot viÅam kaut ko, kas āvienkÄrÅ”i darbojasā, mÄs to darÄ«jÄm atseviŔķs werf instalÄÅ”anas un atjauninÄÅ”anas rÄ«ks -Å o multiwerf. Jums vienkÄrÅ”i jÄnorÄda izlaiduma numurs un stabilitÄtes kanÄls, kuru esat gatavs izmantot, un multiwerf pÄrbaudÄ«s, vai kanÄlÄ ir jauna versija, un nepiecieÅ”amÄ«bas gadÄ«jumÄ to lejupielÄdÄs.
TÄ«mekļa vietnes versiju izvÄles izvÄlnÄ ir pieejamas jaunÄkÄs werf versijas katrÄ kanÄlÄ. PÄc noklusÄjuma, pÄc adreses werf.io/documentation tiek atvÄrta visstabilÄkÄ kanÄla versija jaunÄkajam izlaidumam - to indeksÄ arÄ« meklÄtÄjprogrammas. KanÄla dokumentÄcija ir pieejama atseviŔķÄs adresÄs (piemÄram, werf.io/v1.0-beta/documentation beta versijai 1.0).
KopumÄ vietnei ir pieejamas Å”Ädas versijas:
sakne (atveras pÄc noklusÄjuma),
katram katra laidiena aktÄ«vajam atjauninÄÅ”anas kanÄlam (piemÄram, werf.io/v1.0-beta).
Lai Ä£enerÄtu konkrÄtu vietnes versiju, parasti pietiek ar tÄs kompilÄÅ”anu, izmantojot Jekyllpalaižot direktorijÄ /docs werf repozitorija atbilstoÅ”Ä komanda (jekyll build), pÄc pÄrslÄgÅ”anÄs uz vajadzÄ«gÄs versijas Git tagu.
Atliek tikai piebilst, ka:
montĞai tiek izmantota pati lietderība (werf);
CI/CD procesi ir veidoti uz GitLab CI bÄzes;
un tas viss, protams, darbojas Kubernetes.
uzdevumi
Tagad formulÄsim uzdevumus, kuros Åemta vÄrÄ visa aprakstÄ«tÄ specifika:
PÄc werf versijas maiÅas jebkurÄ atjauninÄÅ”anas kanÄlÄ dokumentÄcija vietnÄ ir automÄtiski jÄatjaunina.
Lai attÄ«stÄ«tu, jums dažreiz ir jÄspÄj skatiet vietnes priekÅ”skatÄ«juma versijas.
Vietne ir jÄpÄrkompilÄ pÄc versijas maiÅas jebkurÄ kanÄlÄ no atbilstoÅ”ajiem Git tagiem, taÄu attÄla veidoÅ”anas procesÄ mÄs iegÅ«sim Å”Ädas funkcijas:
TÄ kÄ kanÄlu versiju saraksts mainÄs, ir nepiecieÅ”ams tikai atjaunot dokumentÄciju tiem kanÄliem, kuru versija ir mainÄ«jusies. Galu galÄ atkal visu pÄrbÅ«vÄt nav Ä«paÅ”i jauki.
Izlaidumu kanÄlu kopa var mainÄ«ties. PiemÄram, kÄdÄ brÄ«dÄ« kanÄlos var nebÅ«t stabilÄkas versijas par agrÄ«nÄs piekļuves 1.1 versiju, taÄu laika gaitÄ tÄs parÄdÄ«sies ā vai Å”ajÄ gadÄ«jumÄ nevajadzÄtu manuÄli mainÄ«t komplektÄciju?
IzrÄdÄs, ka montÄža ir atkarÄ«ga no ÄrÄjo datu maiÅas.
IevieŔana
Pieejas izvÄle
Varat arÄ« palaist katru nepiecieÅ”amo versiju kÄ atseviŔķu aplikÄciju pakalpojumÄ Kubernetes. Å Ä« opcija nozÄ«mÄ lielÄku objektu skaitu klasterÄ«, kas pieaugs, palielinoties stabilo werf izlaidumu skaitam. Un tas, savukÄrt, nozÄ«mÄ sarežģītÄku apkopi: katrai versijai ir savs HTTP serveris un ar nelielu slodzi. Protams, tas rada arÄ« lielÄkas resursu izmaksas.
MÄs gÄjÄm to paÅ”u ceļu visu nepiecieÅ”amo versiju salikÅ”ana vienÄ attÄlÄ. Visu vietnes versiju apkopotÄ statistika atrodas konteinerÄ ar NGINX, un datplÅ«sma uz atbilstoÅ”o izvietoÅ”anu tiek nodroÅ”inÄta, izmantojot NGINX Ingress. VienkÄrÅ”a struktÅ«ra - bezvalsts lietojumprogramma - ļauj viegli mÄrogot izvietoÅ”anu (atkarÄ«bÄ no slodzes), izmantojot paÅ”u Kubernetes.
PrecÄ«zÄk sakot, mÄs apkopojam divus attÄlus: vienu ražoÅ”anas Ä·Ädei, otrs ir papildu attÄls izstrÄdes shÄmai. Papildu attÄls tiek izmantots (palaists) tikai izstrÄdÄtÄju shÄmÄ kopÄ ar galveno, un tajÄ ir vietnes versija no pÄrskatÄ«Å”anas saistÄ«bas, un marÅ”rutÄÅ”ana starp tiem tiek veikta, izmantojot Ingress resursus.
werf vs git klons un artefakti
KÄ jau minÄts, lai Ä£enerÄtu vietnes statiku konkrÄtai dokumentÄcijas versijai, jums ir jÄveido, pÄrslÄdzoties uz atbilstoÅ”o repozitorija tagu. To var izdarÄ«t arÄ«, klonÄjot repozitoriju katru reizi, kad veidojat, sarakstÄ atlasot atbilstoÅ”os tagus. TaÄu Ŕī ir diezgan resursietilpÄ«ga darbÄ«ba un turklÄt prasa rakstÄ«t netriviÄlas instrukcijas... VÄl viens nopietns trÅ«kums ir tas, ka ar Å”o pieeju montÄžas laikÄ nav iespÄjams kaut ko saglabÄt keÅ”atmiÅÄ.
Å eit mums palÄ«gÄ nÄk pati werf utilÄ«ta, ievieÅ”ot viedÄ keÅ”atmiÅa un ļaujot jums izmantot ÄrÄjÄs krÄtuves. Izmantojot werf, lai pievienotu kodu no repozitorija, ievÄrojami paÄtrinÄs bÅ«vniecÄ«bu, jo werf bÅ«tÄ«bÄ vienreiz klonÄ repozitoriju un pÄc tam izpilda tikaifetch ja nepiecieÅ”ams. TurklÄt, pievienojot datus no repozitorija, mÄs varam atlasÄ«t tikai nepiecieÅ”amos direktorijus (mÅ«su gadÄ«jumÄ tas ir direktorijs docs), kas ievÄrojami samazinÄs pievienoto datu apjomu.
TÄ kÄ Jekyll ir rÄ«ks, kas paredzÄts statisku datu apkopoÅ”anai un nav vajadzÄ«gs galÄ«gajÄ attÄlÄ, bÅ«tu loÄ£iski apkopot werf artefakts, un gala attÄlÄ importÄt tikai apkopoÅ”anas rezultÄtu.
MÄs rakstÄm werf.yaml
TÄpÄc mÄs nolÄmÄm, ka mÄs apkoposim katru versiju atseviÅ”Ä·Ä werf artefaktÄ. TomÄr mÄs mÄs nezinÄm, cik daudz Å”o artefaktu bÅ«s montÄžas laikÄ, tÄpÄc mÄs nevaram uzrakstÄ«t fiksÄtu bÅ«vÄjuma konfigurÄciju (stingri sakot, mÄs joprojÄm varam, taÄu tas nebÅ«s pilnÄ«gi efektÄ«vs).
werf ļauj izmantot Iet uz veidnÄm konfigurÄcijas failÄ (werf.yaml), un tas padara to iespÄjamu Ä£enerÄt konfigurÄciju lidojumÄ atkarÄ«bÄ no ÄrÄjiem datiem (kas jums nepiecieÅ”ams!). ÄrÄjie dati mÅ«su gadÄ«jumÄ ir informÄcija par versijÄm un izlaidumiem, uz kuru pamata mÄs savÄcam nepiecieÅ”amo artefaktu skaitu un rezultÄtÄ iegÅ«stam divus attÄlus: werf-doc Šø werf-dev darboties dažÄdÄs Ä·ÄdÄs.
ÄrÄjie dati tiek nodoti caur vides mainÄ«gajiem. Å eit ir viÅu sastÄvs:
RELEASES ā rinda ar izlaidumu sarakstu un atbilstoÅ”o paÅ”reizÄjo werf versiju ar atstarpi atdalÄ«ta vÄrtÄ«bu saraksta formÄ formÄtÄ <ŠŠŠŠŠ _Š ŠŠŠŠŠ>%<ŠŠŠŠŠ _ŠŠŠ Š”ŠŠ>. PiemÄrs: 1.0%v1.0.4-beta.20
CHANNELS ā rinda ar kanÄlu sarakstu un atbilstoÅ”o paÅ”reizÄjo werf versiju ar atstarpi atdalÄ«ta vÄrtÄ«bu saraksta formÄ formÄtÄ <ŠŠŠŠŠ>%<ŠŠŠŠŠ _ŠŠŠ Š”ŠŠ>. PiemÄrs: 1.0-beta%v1.0.4-beta.20 1.0-alpha%v1.0.5-alpha.22
ROOT_VERSION ā werf izlaiduma versija, kas pÄc noklusÄjuma tiek rÄdÄ«ta vietnÄ (ne vienmÄr ir nepiecieÅ”ams parÄdÄ«t dokumentÄciju pÄc lielÄkÄ izlaiduma numura). PiemÄrs: v1.0.4-beta.20
REVIEW_SHA ā pÄrskatÄ«Å”anas saistÄ«bu jaucÄjkods, no kura jums ir jÄizveido testa cilpas versija.
Å ie mainÄ«gie tiks aizpildÄ«ti GitLab CI konveijerÄ, un kÄ tieÅ”i tas ir rakstÄ«ts tÄlÄk.
PirmkÄrt, ÄrtÄ«bas labad mÄs definÄjam werf.yaml Dodieties uz veidÅu mainÄ«gajiem, pieŔķirot tiem vÄrtÄ«bas no vides mainÄ«gajiem:
Vietnes statiskÄs versijas apkopoÅ”anai paredzÄtÄ artefakta apraksts parasti ir vienÄds visiem mums nepiecieÅ”amajiem gadÄ«jumiem (tostarp saknes versijas Ä£enerÄÅ”anai, kÄ arÄ« izstrÄdes shÄmas versijai). TÄpÄc mÄs to pÄrvietosim atseviÅ”Ä·Ä blokÄ, izmantojot funkciju define - turpmÄkai atkÄrtotai lietoÅ”anai include. MÄs nodosim veidnei Å”Ädus argumentus:
Version ā Ä£enerÄtÄ versija (taga nosaukums);
Channel ā tÄ atjauninÄÅ”anas kanÄla nosaukums, kuram artefakts ir Ä£enerÄts;
Commit ā veikt hash, ja artefakts ir Ä£enerÄts pÄrskatÄ«Å”anas saistÄ«bÄm;
Artefakta nosaukumam ir jÄbÅ«t unikÄlam. MÄs to varam panÄkt, piemÄram, pievienojot kanÄla nosaukumu (mainÄ«gÄ vÄrtÄ«ba .Channel) kÄ artefakta nosaukuma sufiksu: artifact: doc-{{ .Channel }}. Bet jums ir jÄsaprot, ka, importÄjot no artefaktiem, jums bÅ«s jÄatsaucas uz tiem paÅ”iem nosaukumiem.
Aprakstot artefaktu, tiek izmantota Å”Äda werf funkcija: montÄža. MontÄža, kas norÄda servisa direktoriju build_dir ļauj saglabÄt Jekyll keÅ”atmiÅu starp konveijera palaiÅ”anu, kas ievÄrojami paÄtrina montÄžu.
IespÄjams, arÄ« esat pamanÄ«jis faila izmantoÅ”anu releases.yml ir YAML fails ar laidiena datiem, kas pieprasÄ«ti no github.com (artefakts, kas iegÅ«ts, izpildot cauruļvadu). Tas ir nepiecieÅ”ams, veidojot vietni, bet raksta kontekstÄ tas mums ir interesants, jo tas ir atkarÄ«gs no tÄ stÄvokļa tikai viena artefakta montÄža ā vietnes saknes versijas artefakts (citos artefaktos tas nav vajadzÄ«gs).
Tas tiek Ä«stenots, izmantojot nosacÄ«jumu paziÅojumu if Iet uz veidnÄm un dizainu {{ $Root.Files.Get "releases.yml" | sha256sum }} stadijÄ posmos. Tas darbojas Å”Ädi: veidojot artefaktu saknes versijai (mainÄ«gais .Channel vienÄds root) failu hash releases.yml ietekmÄ visa posma parakstu, jo tÄ ir daļa no Ansible uzdevuma nosaukuma (parametrs name). TÄdÄjÄdi, mainot saturu failu releases.yml attiecÄ«gais artefakts tiks salikts no jauna.
LÅ«dzu, pievÄrsiet uzmanÄ«bu arÄ« darbam ar ÄrÄju repozitoriju. Artefakta attÄlÄ no werf repozitorijs, tiek pievienots tikai direktorijs /docs, un atkarÄ«bÄ no nodotajiem parametriem nekavÄjoties tiek pievienoti vajadzÄ«gÄ taga vai pÄrskatÄ«Å”anas saistÄ«bas dati.
Lai izmantotu artefakta veidni, lai izveidotu kanÄlu un laidienu pÄrsÅ«tÄ«to versiju artefakta aprakstu, mainÄ«gajam tiek organizÄta cilpa. .WerfVersions Š² werf.yaml:
{{ range .WerfVersions -}}
{{ $VersionsDict := splitn "%" 2 . -}}
{{ dict "Version" $VersionsDict._1 "Channel" $VersionsDict._0 "Root" $Root | include "doc_artifact" }}
---
{{ end -}}
Jo cilpa Ä£enerÄs vairÄkus artefaktus (mÄs tÄ ceram), ir jÄÅem vÄrÄ atdalÄ«tÄjs starp tiem - secÄ«ba --- (PapildinformÄciju par konfigurÄcijas faila sintaksi skatiet sadaÄ¼Ä dokumentÄcija). KÄ definÄts iepriekÅ”, izsaucot veidni cilpÄ, mÄs nododam versijas parametrus, URL un saknes kontekstu.
LÄ«dzÄ«gi, bet bez cilpas, mÄs saucam artefakta veidni āÄ«paÅ”iem gadÄ«jumiemā: saknes versijai, kÄ arÄ« versijai no pÄrskatÄ«Å”anas saistÄ«bas:
{{ dict "Version" .WerfRootVersion "Channel" "root" "Root" $Root | include "doc_artifact" }}
---
{{- if .WerfReviewCommit }}
{{ dict "Version" "review" "Channel" "review" "Commit" .WerfReviewCommit "Root" $Root | include "doc_artifact" }}
{{- end }}
LÅ«dzu, Åemiet vÄrÄ, ka artefakts pÄrskatÄ«Å”anas saistÄ«bÄm tiks izveidots tikai tad, ja ir iestatÄ«ts mainÄ«gais .WerfReviewCommit.
Artefakti ir gatavi ā ir pienÄcis laiks sÄkt importÄÅ”anu!
PÄdÄjais attÄls, kas paredzÄts darbam ar Kubernetes, ir parasts NGINX ar pievienotu servera konfigurÄcijas failu nginx.conf un statiski no artefaktiem. Papildus vietnes saknes versijas artefaktam mums ir jÄatkÄrto mainÄ«gÄ cilpa .WerfVersions lai importÄtu kanÄlu un laidiena versiju artefaktus + ievÄrojiet artefaktu nosaukÅ”anas noteikumu, ko mÄs pieÅÄmÄm iepriekÅ”. TÄ kÄ katrÄ artefaktÄ tiek glabÄtas vietnes versijas divÄm valodÄm, mÄs tÄs importÄjam konfigurÄcijas nodroÅ”inÄtajÄs vietÄs.
Papildu attÄlÄ, kas kopÄ ar galveno tiek palaists izstrÄdes Ä·ÄdÄ, ir tikai divas vietnes versijas: versija no pÄrskatÄ«Å”anas saistÄ«bas un vietnes saknes versija (ir vispÄrÄ«gi lÄ«dzekļi un, ja atceraties , izlaiduma dati). TÄdÄjÄdi papildu attÄls no galvenÄ atŔķirsies tikai importa sadaÄ¼Ä (un, protams, nosaukumÄ):
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 }}
KÄ minÄts iepriekÅ”, artefakts pÄrskatÄ«Å”anas saistÄ«bÄm tiks Ä£enerÄts tikai tad, kad tiks palaists iestatÄ«tais vides mainÄ«gais REVIEW_SHA. Ja nav vides mainÄ«gÄ, werf-dev attÄlu varÄtu neÄ£enerÄt vispÄr REVIEW_SHA, bet lai tÄ«rÄ«Å”ana pÄc politikÄm Docker attÄli werf darbojÄs werf-dev attÄlam, mÄs atstÄsim to veidot tikai ar saknes versijas artefaktu (tas jau ir uzbÅ«vÄts tik un tÄ), lai vienkÄrÅ”otu cauruļvada struktÅ«ru.
MontÄža ir gatava! PÄriesim pie CI/CD un svarÄ«gÄm niansÄm.
Cauruļvads GitLab CI un dinamiskÄs veidoÅ”anas funkcijas
Palaižot bÅ«vÄjumu, mums ir jÄiestata izmantotie vides mainÄ«gie werf.yaml. Tas neattiecas uz mainÄ«go REVIEW_SHA, ko iestatÄ«sim, izsaucot konveijeru no GitHub ÄÄ·a.
MÄs Ä£enerÄsim nepiecieÅ”amos ÄrÄjos datus Bash skriptÄ generate_artifacts, kas Ä£enerÄs divus GitLab cauruļvada artefaktus:
fails releases.yml ar izlaiduma datiem,
fails common_envs.sh, kas satur eksportÄjamos vides mainÄ«gos.
Faila saturs generate_artifacts jÅ«s atradÄ«siet mÅ«su krÄtuves ar piemÄriem. Pati datu saÅemÅ”ana nav raksta priekÅ”mets, bet gan fails common_envs.sh mums ir svarÄ«gi, jo no tÄ ir atkarÄ«gs werfa darbs. TÄs satura piemÄrs:
Å Äda skripta izvadi var izmantot, piemÄram, izmantojot funkciju Bash source.
Tagad nÄk jautrÄkÄ daļa. Lai gan lietojumprogrammas izveide, gan izvietoÅ”ana darbotos pareizi, tas ir jÄnodroÅ”ina werf.yaml bija tas pats vismaz viena cauruļvada ietvaros. Ja Å”is nosacÄ«jums nav izpildÄ«ts, tad to posmu paraksti, kurus werf aprÄÄ·ina montÄžas un, piemÄram, izvietoÅ”anas laikÄ, bÅ«s atŔķirÄ«gi. Tas radÄ«s izvietoÅ”anas kļūdu, jo... izvietoÅ”anai nepiecieÅ”amÄ attÄla trÅ«ks.
Citiem vÄrdiem sakot, ja vietnes attÄla montÄžas laikÄ informÄcija par laidieniem un versijÄm ir vienÄda un izvietoÅ”anas laikÄ tiek izlaista jauna versija un vides mainÄ«gajiem ir atŔķirÄ«gas vÄrtÄ«bas, izvietoÅ”ana neizdosies ar kļūdu: galu galÄ jaunÄs versijas artefakts vÄl nav uzbÅ«vÄts.
Ja paaudze werf.yaml ir atkarÄ«gs no ÄrÄjiem datiem (piemÄram, paÅ”reizÄjo versiju saraksta, kÄ mÅ«su gadÄ«jumÄ), tad Å”Ädu datu sastÄvs un vÄrtÄ«bas ir jÄreÄ£istrÄ cauruļvadÄ. Tas ir Ä«paÅ”i svarÄ«gi, ja ÄrÄjie parametri mainÄs diezgan bieži.
MÄs bÅ«sim saÅemt un ierakstÄ«t ÄrÄjos datus cauruļvada pirmajÄ posmÄ GitLab (IepriekÅ”Äja uzbÅ«ve) un pÄrsÅ«tiet tos tÄlÄk formÄ GitLab CI artefakts. Tas ļaus palaist un restartÄt konveijera darbus (veidot, izvietot, tÄ«rÄ«t) ar tÄdu paÅ”u konfigurÄciju werf.yaml.
Skatuves saturs IepriekÅ”Äja uzbÅ«ve failu .gitlab-ci.yml:
PÄc ÄrÄjo datu tverÅ”anas artefaktÄ varat izveidot un izvietot, izmantojot standarta GitLab CI konveijera posmus: Build un Deploy. MÄs palaižam paÅ”u cauruļvadu, izmantojot ÄÄ·us no werf GitHub repozitorijas (t.i., kad GitHub repozitorijÄ ir izmaiÅas). Datus par tiem var atrast GitLab projekta rekvizÄ«tos sadaÄ¼Ä CI/CD iestatÄ«jumi -> Cauruļvada aktivizÄtÄjiun pÄc tam izveidojiet atbilstoÅ”o tÄ«mekļa aizÄ·eri GitHub (IestatÄ«jumi -> TÄ«mekļa aizÄ·eres).
GitLab pievienos divus artefaktus no skatuves izveides stadijai IepriekÅ”Äja uzbÅ«ve, tÄpÄc mÄs eksportÄjam mainÄ«gos ar sagatavotiem ievades datiem, izmantojot konstrukciju source common_envs.sh. MÄs sÄkam bÅ«vniecÄ«bas posmu visos gadÄ«jumos, izÅemot cauruļvada palaiÅ”anu saskaÅÄ ar grafiku. AtbilstoÅ”i grafikam izvadÄ«sim cauruļvadu tÄ«rÄ«Å”anai - Å”ajÄ gadÄ«jumÄ nav jÄveic montÄža.
IzvietoÅ”anas posmÄ mÄs aprakstÄ«sim divus uzdevumus ā atseviŔķi izvietoÅ”anai ražoÅ”anas un izstrÄdes shÄmÄs, izmantojot YAML veidni:
Uzdevumi bÅ«tÄ«bÄ atŔķiras tikai ar to, ka tiek norÄdÄ«ts klastera konteksts, kurÄ werf jÄveic izvietoÅ”ana (WERF_KUBE_CONTEXT) un cilpas vides mainÄ«go iestatÄ«Å”ana (environment.name Šø environment.url), kuras pÄc tam tiek izmantotas Helm diagrammas veidnÄs. VeidÅu saturu nesniegsim, jo... tur nav nekÄ interesanta par attiecÄ«go tÄmu, bet tos var atrast raksta krÄtuves.
GalÄ«gais pieskÄriens
TÄ kÄ werf versijas tiek izlaistas diezgan bieži, jauni attÄli tiks veidoti bieži, un Docker reÄ£istrs pastÄvÄ«gi pieaugs. TÄpÄc ir obligÄti jÄkonfigurÄ automÄtiskÄ attÄla tÄ«rÄ«Å”ana, pamatojoties uz politikÄm. Tas ir ļoti viegli izdarÄms.
GandrÄ«z visu to jau esam redzÄjuÅ”i nedaudz augstÄk ā tikai lai to notÄ«rÄ«tu, vispirms jÄpiesakÄs Docker reÄ£istrÄ ar marÄ·ieri, kuram ir tiesÄ«bas dzÄst attÄlus Docker reÄ£istrÄ (automÄtiski izsniegtais GitLab CI uzdevuma marÄ·ieris to nedara ir Å”Ädas tiesÄ«bas). Tokens ir jÄizveido GitLab iepriekÅ” un tÄ vÄrtÄ«ba jÄnorÄda vides mainÄ«gajÄ WERF_IMAGES_CLEANUP_PASSWORD projekts (CI/CD iestatÄ«jumi -> MainÄ«gie).
TīrīŔanas uzdevuma pievienoŔana ar nepiecieŔamo grafiku tiek veikta CI/CD ->
Grafiki.
Tas arÄ« viss: projekts Docker reÄ£istrÄ vairs nepÄrtraukti neizaugs no neizmantotiem attÄliem.
PraktiskÄs daļas beigÄs atgÄdinÄÅ”u, ka pilni saraksti no raksta ir pieejami Git:
MÄs saÅÄmÄm loÄ£isku montÄžas struktÅ«ru: viens artefakts katrÄ versijÄ.
MontÄža ir universÄla un neprasa manuÄlas izmaiÅas, kad tiek izlaistas jaunas werf versijas: dokumentÄcija vietnÄ tiek automÄtiski atjauninÄta.
Divi attÄli ir salikti dažÄdÄm kontÅ«rÄm.
Tas darbojas Ätri, jo KeÅ”atmiÅa tiek izmantota pÄc iespÄjas vairÄk ā kad tiek izlaista jauna werf versija vai GitHub ÄÄ·is tiek izsaukts pÄrskatÄ«Å”anai, tiek pÄrbÅ«vÄts tikai atbilstoÅ”ais artefakts ar mainÄ«to versiju.
Nav jÄdomÄ par neizmantoto attÄlu dzÄÅ”anu: tÄ«rÄ«Å”ana saskaÅÄ ar werf politikÄm uzturÄs Docker reÄ£istru kÄrtÄ«bÄ.
Atzinumi
Izmantojot werf, montÄža var darboties Ätri, jo tiek saglabÄta keÅ”atmiÅa gan paÅ”ai montÄžai, gan keÅ”atmiÅai, strÄdÄjot ar ÄrÄjÄm krÄtuvÄm.
StrÄdÄjot ar ÄrÄjÄm Git krÄtuvÄm, nav nepiecieÅ”ams katru reizi klonÄt visu repozitoriju vai no jauna izgudrot riteni, izmantojot sarežģītu optimizÄcijas loÄ£iku. werf izmanto keÅ”atmiÅu un veic klonÄÅ”anu tikai vienu reizi un pÄc tam izmanto fetch un tikai nepiecieÅ”amÄ«bas gadÄ«jumÄ.
IespÄja izmantot Go veidnes bÅ«vÄjuma konfigurÄcijas failÄ werf.yaml ļauj aprakstÄ«t montÄžu, kuras rezultÄts ir atkarÄ«gs no ÄrÄjiem datiem.
MontÄžas izmantoÅ”ana werf ievÄrojami paÄtrina artefaktu vÄkÅ”anu, pateicoties keÅ”atmiÅai, kas ir kopÄ«ga visiem cauruļvadiem.
werf ļauj viegli konfigurÄt tÄ«rÄ«Å”anu, kas ir Ä«paÅ”i svarÄ«gi, veidojot dinamiski.