werf 1.1 rilaxx: titjib għall-bennej illum u pjanijiet għall-futur
werf hija l-utilità CLI GitOps ta’ sors miftuħ tagħna għall-bini u l-kunsinna ta’ applikazzjonijiet lil Kubernetes. Kif imwiegħed, rilaxx tal-verżjoni v1.0 immarka l-bidu taż-żieda ta 'karatteristiċi ġodda għall-werf u r-reviżjoni ta' approċċi tradizzjonali. Issa għandna pjaċir nippreżentaw ir-rilaxx v1.1, li huwa pass kbir fl-iżvilupp u pedament għall-futur kollettur werf. Il-verżjoni bħalissa hija disponibbli fi kanal 1.1 ea.
Il-bażi tar-rilaxx hija l-arkitettura l-ġdida tal-ħażna tal-istadju u l-ottimizzazzjoni tax-xogħol taż-żewġ kolletturi (għal Stapel u Dockerfile). L-arkitettura l-ġdida tal-ħażna tiftaħ il-possibbiltà li jiġu implimentati assemblaġġi distribwiti minn hosts multipli u assemblaġġi paralleli fuq l-istess host.
L-ottimizzazzjoni tax-xogħol tinkludi t-tneħħija ta 'kalkoli mhux meħtieġa fl-istadju tal-kalkolu tal-firem tal-istadju u t-tibdil tal-mekkaniżmi għall-kalkolu tas-summar tal-fajls għal oħrajn aktar effiċjenti. Din l-ottimizzazzjoni tnaqqas il-ħin medju tal-bini tal-proġett bl-użu tal-werf. U idle builds, meta l-istadji kollha jeżistu fil-cache stadji-ħażna, issa huma verament mgħaġġla. Fil-biċċa l-kbira tal-każijiet, il-bidu mill-ġdid tal-bini jieħu inqas minn sekonda! Dan japplika wkoll għall-proċeduri għall-verifika tal-istadji fil-proċess tax-xogħol tat-timijiet. werf deploy и werf run.
F'dan ir-rilaxx ukoll, dehret strateġija għall-immarkar ta' immaġini skont il-kontenut - tikkettjar ibbażat fuq il-kontenut, li issa hija attivata awtomatikament u l-unika waħda rakkomandata.
Ejja nagħtu ħarsa aktar mill-qrib lejn l-innovazzjonijiet ewlenin f'werf v1.1, u fl-istess ħin ngħidulek dwar pjanijiet għall-futur.
X'inbidel f'werf v1.1?
Format u algoritmu tal-ismijiet tal-istadji ġodda għall-għażla tal-istadji mill-cache
Regola ġdida tal-ġenerazzjoni tal-ismijiet tal-istadju. Issa kull stadju build jiġġenera isem tal-istadju uniku, li jikkonsisti minn 2 partijiet: firma (kif kienet fil-v1.0) flimkien ma 'identifikatur temporanju uniku.
Pereżempju, l-isem sħiħ tal-immaġni tal-istadju jista' jidher bħal dan:
SIGNATURE hija firma tal-istadju, li tirrappreżenta l-identifikatur tal-kontenut tal-istadju u tiddependi fuq l-istorja tal-editjar f'Git li wassal għal dan il-kontenut;
TIMESTAMP_MILLISEC huwa identifikatur ta' immaġini uniku garantit li jiġi ġġenerat fil-ħin li tinbena immaġini ġdida.
L-algoritmu għall-għażla tal-istadji mill-cache huwa bbażat fuq il-verifika tar-relazzjoni tal-impenji Git:
Werf jikkalkula l-firma ta 'ċertu stadju.
В stadji-ħażna Jista' jkun hemm diversi stadji għal firma partikolari. Werf jagħżel l-istadji kollha li jaqblu mal-firma.
Jekk l-istadju attwali huwa marbut ma 'Git (git-archive, stadju tad-dwana b'garża Git: install, beforeSetup, setup; jew git-latest-patch), allura werf jagħżel biss dawk l-istadji li huma assoċjati ma 'commit li huwa antenat tal-commit attwali (li għalih tissejjaħ il-build).
Mill-istadji xierqa li jifdal, jintgħażel wieħed - l-eqdem skond id-data tal-ħolqien.
Stadju għal fergħat Git differenti jista' jkollu l-istess firma. Iżda werf se jipprevjeni li l-cache assoċjata ma 'fergħat differenti tintuża bejn dawn il-fergħat, anke jekk il-firem jaqblu.
Algoritmu ġdid għall-ħolqien u l-iffrankar ta 'stadji fil-ħażna tal-istadju
Jekk, meta tagħżel stadji mill-cache, werf ma jsibx stadju xieraq, allura jinbeda l-proċess ta 'assemblaġġ ta' stadju ġdid.
Innota li proċessi multipli (fuq host wieħed jew aktar) jistgħu jibdew jibnu l-istess stadju bejn wieħed u ieħor fl-istess ħin. Werf juża algoritmu ta 'imblukkar ottimist stadji-ħażna fil-mument li tissejvja l-immaġni miġbura friska fi stadji-ħażna. Dan il-mod, meta l-bini tal-istadju l-ġdid ikun lest, werf blocks stadji-ħażna u jiffranka immaġini miġbura friska hemmhekk biss jekk immaġini xierqa ma tibqax teżisti hemm (bil-firma u parametri oħra - ara l-algoritmu l-ġdid għall-għażla tal-istadji mill-cache).
Immaġini immuntata friska hija garantita li jkollha identifikatur uniku minn TIMESTAMP_MILLISEC(ara l-format ġdid tal-ismijiet tal-istadji). Fil-każ fi stadji-ħażna tinstab immaġini xierqa, werf se jarmi l-immaġni kkumpilata friska u se juża l-immaġni mill-cache.
Fi kliem ieħor: l-ewwel proċess biex jintemm l-immaġini (l-iktar wieħed mgħaġġel) se jikseb id-dritt li jaħżen fi stadji-ħażna (u allura hija din l-immaġni waħda li se tintuża għall-bini kollu). Proċess tal-bini bil-mod qatt mhu se jimblokka proċess aktar mgħaġġel milli jsalva r-riżultati tal-bini tal-istadju attwali u jimxi fuq il-bini li jmiss.
Bħalissa, il-pipeline ta 'stadji għal immaġni mibnija minn Dockerfile jikkonsisti fi stadju wieħed - dockerfile. Meta tiġi kkalkulata l-firma, tiġi kkalkulata ċ-checksum tal-fajls context, li se jintuża waqt l-assemblaġġ. Qabel dan it-titjib, werf mexa b'mod rikkur permezz tal-fajls kollha u kiseb checksum billi somma l-kuntest u l-mod ta 'kull fajl. Nibda minn v1.1, werf jista 'juża checksums ikkalkulati maħżuna f'repożitorju Git.
L-algoritmu huwa bbażat fuq git ls-siġra. L-algoritmu jqis ir-rekords fi .dockerignore u jaqsam is-siġra tal-fajls b'mod rikorsiv biss meta meħtieġ. Għalhekk, aħna diżakkoppjati mill-qari tas-sistema tal-fajls, u d-dipendenza tal-algoritmu fuq id-daqs context mhix sinifikanti.
L-algoritmu jiċċekkja wkoll fajls mhux traċċati u, jekk meħtieġ, iqishom fiċ-checksum.
Prestazzjoni mtejba meta timporta fajls
Verżjonijiet ta 'werf v1.1 jużaw server rsync meta importazzjoni fajls minn artifacts u stampi. Preċedentement, l-importazzjoni kienet issir f'żewġ passi bl-użu ta 'muntatura tad-direttorju mis-sistema ospitanti.
Il-prestazzjoni tal-importazzjoni fuq macOS m'għadhiex limitata mill-volumi Docker, u l-importazzjonijiet jitlestew fl-istess ammont ta 'żmien bħal Linux u Windows.
Tikkettjar ibbażat fuq il-kontenut
Werf v1.1 jappoġġja l-hekk imsejjaħ tikkettar bil-kontenut tal-immaġni - tikkettjar ibbażat fuq il-kontenut. It-tikketti tal-immaġini Docker li jirriżultaw jiddependu fuq il-kontenut ta 'dawn l-immaġini.
Meta tmexxi l-kmand werf publish --tags-by-stages-signature jew werf ci-env --tagging-strategy=stages-signature immaġini ppubblikati tal-hekk imsejħa firma tal-palk immaġni. Kull immaġini hija mmarkata bil-firma tagħha stess tal-istadji ta 'din l-immaġni, li hija kkalkulata skont l-istess regoli bħall-firma regolari ta' kull stadju separatament, iżda hija identifikatur ġenerali tal-immaġni.
storja tal-bidliet Git li wasslu għal dan il-kontenut.
Repożitorju Git dejjem ikollu impenji finti li ma jbiddlux il-kontenut tal-fajls tal-immaġni. Pereżempju, jimpenja biss b'kummenti jew jingħaqad jikkommetti, jew jimpenja li jbiddel dawk il-fajls f'Git li mhux se jiġu importati fl-immaġini.
Meta tuża t-tikkettar ibbażat fuq il-kontenut, il-problemi ta 'startjar mill-ġdid bla bżonn tal-imżiewed tal-applikazzjoni f'Kubernetes minħabba bidliet fl-isem tal-immaġni jissolvew, anki jekk il-kontenut tal-immaġni ma nbidilx. Mill-mod, din hija waħda mir-raġunijiet li tipprevjeni l-ħażna ta 'ħafna mikroservizzi ta' applikazzjoni waħda f'repożitorju Git wieħed.
Ukoll, it-tikkettjar ibbażat fuq il-kontenut huwa metodu ta 'tikkettar aktar affidabbli minn tikkettar fuq fergħat Git, minħabba li l-kontenut tal-immaġini li jirriżultaw ma jiddependix fuq l-ordni li fiha l-pipelines huma eżegwiti fis-sistema CI għall-assemblaġġ ta' kommessi multipli tal-istess fergħa.
Huwa importanti: jibda minn issa stadji-firma - dan hu l-unika strateġija ta’ tikkettjar rakkomandata. Se jintuża awtomatikament fil-kmand werf ci-env (sakemm ma tispeċifikax b'mod espliċitu skema ta' tikkettjar differenti).
→ Dokumentazzjoni. Pubblikazzjoni separata se tkun iddedikata wkoll għal din il-karatteristika. AĠĠORNATA (3 ta' April): Artikolu bid-dettalji ippubblikat.
Livelli ta' qtugħ
L-utent issa għandu l-opportunità li jikkontrolla l-output, jistabbilixxi l-livell tal-qtugħ u jaħdem b'informazzjoni ta 'debugging. Għażliet miżjuda --log-quiet, --log-verbose, --log-debug.
B'mod awtomatiku, l-output fih l-informazzjoni minima:
Meta tuża output verbose (--log-verbose) tista' tara kif jaħdem il-werf:
Output dettaljat (--log-debug), minbarra l-informazzjoni tad-debugging tal-werf, fih ukoll zkuk tal-libreriji użati. Pereżempju, tista 'tara kif isseħħ l-interazzjoni mar-Reġistru Docker, u tirreġistra wkoll il-postijiet fejn jintefaq ammont sinifikanti ta' ħin:
Pjanijiet futuri
Attenzjoni! L-għażliet deskritti hawn taħt huma mmarkati v1.1 se jsiru disponibbli f'din il-verżjoni, ħafna minnhom fil-futur qarib. L-aġġornamenti se jiġu permezz ta' aġġornamenti awtomatiċi meta tuża multiwerf. Dawn il-karatteristiċi ma jaffettwawx il-parti stabbli tal-funzjonijiet v1.1; id-dehra tagħhom mhux se teħtieġ intervent manwali tal-utent f'konfigurazzjonijiet eżistenti.
Appoġġ sħiħ għal diversi implimentazzjonijiet tar-Reġistru Docker (ĠDID)
L-għan huwa li l-utent juża implimentazzjoni tad-dwana mingħajr restrizzjonijiet meta juża werf.
Bħalissa, identifikajna s-sett ta' soluzzjonijiet li ġejjin li għalihom se niggarantixxu appoġġ sħiħ:
Default (librerija/reġistru)*,
AWS ECR
Azure*,
Docker Hub
GCR*,
Pakketti GitHub
Reġistru GitLab*,
Port*,
Moll.
Is-soluzzjonijiet li bħalissa huma appoġġjati bis-sħiħ minn werf huma mmarkati b'asterisk. Għal oħrajn hemm appoġġ, iżda b'limitazzjonijiet.
Jistgħu jiġu identifikati żewġ problemi ewlenin:
Xi soluzzjonijiet ma jappoġġjawx it-tneħħija tat-tikketti bl-użu tal-API tar-Reġistru Docker, li jipprevjenu lill-utenti milli jużaw it-tindif awtomatiku tal-werf. Dan jgħodd għal AWS ECR, Docker Hub, u Pakketti GitHub.
Xi soluzzjonijiet ma jappoġġjawx l-hekk imsejħa repożitorji nested (Docker Hub, GitHub Packages u Quay) jew jagħmlu, iżda l-utent irid joħloqhom manwalment billi juża l-UI jew l-API (AWS ECR).
Aħna se nsolvu dawn u problemi oħra bl-użu ta 'APIs indiġeni tas-soluzzjonijiet. Dan il-kompitu jinkludi wkoll li tkopri ċ-ċiklu sħiħ tal-operat tal-werf b'testijiet għal kull wieħed minnhom.
Bini ta' immaġni mqassma (↑)
Verżjoni: v1.2 v1.1 (il-prijorità għall-implimentazzjoni ta' din il-karatteristika żdiedet)
Bħalissa, werf v1.0 u v1.1 jistgħu jintużaw biss fuq host dedikat wieħed għal operazzjonijiet ta 'bini u pubblikazzjoni ta' immaġini u skjerament tal-applikazzjoni għal Kubernetes.
Biex tiftaħ il-possibbiltajiet ta 'xogħol distribwit ta' werf, meta l-bini u l-iskjerament ta 'applikazzjonijiet f'Kubernetes huma mnedija fuq diversi hosts arbitrarji u dawn l-ospiti ma jsalvawx l-istat tagħhom bejn builds (runners temporanji), werf huwa meħtieġ biex jimplimenta l-abbiltà li juża ir-Reġistru Docker bħala maħżen tal-palk.
Preċedentement, meta l-proġett werf kien għadu jissejjaħ dapp, kellu opportunità bħal din. Madankollu, iltqajna ma 'numru ta' kwistjonijiet li jeħtieġ li jitqiesu meta nimplimentaw din il-funzjonalità fil-werf.
Innota. Din il-karatteristika ma teħtieġx li l-kollettur jaħdem ġewwa l-imżiewed Kubernetes, għaliex Biex tagħmel dan, trid teħles mid-dipendenza fuq is-server Docker lokali (fil-pod Kubernetes m'hemm l-ebda aċċess għas-server Docker lokali, minħabba li l-proċess innifsu qed jaħdem f'kontenitur, u werf ma jappoġġjax u mhux se jappoġġja taħdem mas-server Docker fuq in-netwerk). L-appoġġ għat-tħaddim ta' Kubernetes se jiġi implimentat separatament.
Jinkludi dokumentazzjoni tal-werf (taqsimiet referenza и jiggwidaw), kif ukoll l-Azzjoni GitHub uffiċjali għall-ħidma mal-werf.
Barra minn hekk, se jippermetti lill-werf jaħdem fuq runners effimeri.
Il-mekkanika tal-interazzjoni tal-utent mas-sistema CI se tkun ibbażata fuq it-tqegħid ta 'tikketti fuq talbiet tal-ġibda biex jinbdew ċerti azzjonijiet biex tinbena/roll out l-applikazzjoni.
Żvilupp lokali u skjerament ta' applikazzjonijiet bil-werf (↓)
L-għan ewlieni huwa li tinkiseb konfigurazzjoni unifikata waħda għall-iskjerament ta 'applikazzjonijiet kemm lokalment kif ukoll fil-produzzjoni, mingħajr azzjonijiet kumplessi, barra mill-kaxxa.
werf huwa wkoll meħtieġ li jkollu mod operattiv li fih ikun konvenjenti li teditja l-kodiċi tal-applikazzjoni u istantanjament tirċievi feedback mill-applikazzjoni li taħdem għad-debugging.
Fil-verżjoni attwali ta 'werf v1.1 fil-proċedura cleanup M'hemm l-ebda dispożizzjoni għat-tindif ta' immaġini għall-iskema ta' tikkettjar ibbażata fuq il-kontenut - dawn l-immaġini se jakkumulaw.
Ukoll, il-verżjoni attwali ta 'werf (v1.0 u v1.1) tuża politiki ta' tindif differenti għal immaġini ppubblikati taħt skemi ta 'tikkettjar: fergħa Git, tag Git jew Git commit.
Ġie ivvintat algoritmu ġdid għat-tindif tal-immaġini bbażat fuq l-istorja tal-kommessi f'Git, unifikat għall-iskemi kollha ta' tikkettar:
Żomm mhux aktar minn immaġini N1 assoċjati mal-impenji l-aktar reċenti N2 għal kull git HEAD (fergħat u tikketti).
Aħżen mhux aktar minn stampi tal-istadju N1 assoċjati mal-impenji l-aktar reċenti N2 għal kull git HEAD (fergħat u tikketti).
Aħżen l-immaġini kollha li jintużaw fi kwalunkwe riżorsi ta' cluster Kubernetes (il-kuntesti kube kollha tal-fajl tal-konfigurazzjoni u l-ispazji tal-isem huma skannjati; tista' tillimita din l-imġiba b'għażliet speċjali).
Aħżen l-immaġini kollha li jintużaw fil-manifesti tal-konfigurazzjoni tar-riżorsi salvati fir-rilaxxi ta' Helm.
Immaġini tista 'titħassar jekk ma tkunx assoċjata ma' xi HEAD minn git (pereżempju, minħabba li l-HEAD korrispondenti innifsu tħassar) u ma tintuża fl-ebda manifest fil-cluster Kubernetes u fir-rilaxxi ta 'Helm.
Bini ta' immaġini paralleli (↓)
Verżjoni: v1.1
Dati: Jannar-Frar April*
Il-verżjoni attwali ta 'werf tiġbor l-immaġini u l-artifacts deskritti fi werf.yaml, b'mod sekwenzjali. Huwa meħtieġ li jiġi parallelizzat il-proċess ta 'assemblaġġ ta' stadji indipendenti ta 'immaġini u artifacts, kif ukoll jipprovdi output konvenjenti u informattiv.
* Nota: l-iskadenza ġiet mibdula minħabba żieda fil-prijorità għall-implimentazzjoni ta 'assemblaġġ distribwit, li se jżid aktar kapaċitajiet ta' skala orizzontali, kif ukoll l-użu ta 'werf ma' Azzjonijiet GitHub. L-assemblaġġ parallel huwa l-pass ta 'ottimizzazzjoni li jmiss, li jipprovdi skalabbiltà vertikali meta jiġi mmuntat proġett wieħed.
Tranżizzjoni għat-Tmun 3 (↓)
Verżjoni: v1.2
Dati: Frar-Marzu Mejju*
Jinkludi migrazzjoni għal codebase ġdid Tmun 3 u mod ippruvat u konvenjenti biex jiġu migrati installazzjonijiet eżistenti.
* Nota: il-bidla għal Helm 3 mhux se żżid karatteristiċi sinifikanti għal werf, minħabba li l-karatteristiċi ewlenin kollha ta 'Hem 3 (3-way-merge u no tiller) huma diġà implimentati f'werf. Barra minn hekk, werf għandu karatteristiċi addizzjonali minbarra dawk indikati. Madankollu, din it-tranżizzjoni tibqa' fil-pjanijiet tagħna u se tiġi implimentata.
Jsonnet għad-deskrizzjoni tal-konfigurazzjoni ta' Kubernetes (↓)
Verżjoni: v1.2
Dati: Jannar-Frar April-Mejju
Werf se jappoġġja deskrizzjonijiet ta 'konfigurazzjoni għal Kubernetes fil-format Jsonnet. Fl-istess ħin, werf se jibqa' kompatibbli ma' Helm u se jkun hemm għażla ta' format ta' deskrizzjoni.
Ir-raġuni hija li l-mudelli Go, skond ħafna nies, għandhom barriera għolja għad-dħul, u l-komprensjoni tal-kodiċi ta 'dawn il-mudelli tbati wkoll.
Qed tiġi kkunsidrata wkoll il-possibbiltà li jiġu introdotti sistemi oħra ta' deskrizzjoni ta' konfigurazzjoni ta' Kubernetes (per eżempju, Kustomize).
Ħidma ġewwa Kubernetes (↓)
Verżjoni: v1.2
Dati: April-Mejju Mejju-Ġunju
Għan: Tiżgura li l-immaġini jinbnew u l-applikazzjoni titwassal bl-użu ta 'runners f'Kubernetes. Dawk. Immaġini ġodda jistgħu jinbnew, jiġu ppubblikati, imnaddfa, u skjerati direttament mill-imżiewed Kubernetes.
Biex timplimenta din il-kapaċità, l-ewwel trid tkun kapaċi tibni immaġini mqassma (ara l-punt hawn fuq).
Jeħtieġ ukoll appoġġ għall-mod ta 'tħaddim tal-bennej mingħajr server Docker (jiġifieri bini jew bini bħal Kaniko fl-ispazju tal-utent).
Werf se jappoġġja l-bini fuq Kubernetes mhux biss ma 'Dockerfile, iżda wkoll mal-bennej Stapel tiegħu b'rikostruzzjoni inkrementali u Ansible.
Pass lejn żvilupp miftuħ
Aħna nħobbu l-komunità tagħna (GitHub, Telegramma) u rridu li aktar u aktar nies jgħinu biex jagħmlu l-werf aħjar, jifhmu d-direzzjoni li qed nimxu fiha, u jipparteċipaw fl-iżvilupp.
Pjuttost reċentement ġie deċiż li jaqilbu għal Bordijiet tal-proġetti GitHub sabiex tiżvela l-proċess tax-xogħol tat-tim tagħna. Issa tista' tara l-pjanijiet immedjati, kif ukoll ix-xogħol attwali fl-oqsma li ġejjin:
Dawk eżistenti jinġiebu f'format wieħed, b'numru suffiċjenti ta 'dettalji u dettalji.
Ġew miżjuda kwistjonijiet ġodda b'ideat u suġġerimenti.
Kif tippermetti l-verżjoni v1.1
Il-verżjoni bħalissa hija disponibbli fi kanal 1.1 ea (fil-kanali stabbli и solidu bħala blat rilaxxi se jidhru hekk kif isseħħ l-istabbilizzazzjoni, madankollu ea innifsu huwa diġà stabbli biżżejjed għall-użu, minħabba marru permezz tal-kanali alfa и beta). Attivat permezz multiwerf bil-mod li ġej:
source $(multiwerf use 1.1 ea)
werf COMMAND ...
Konklużjoni
L-arkitettura l-ġdida tal-ħażna tal-istadju u l-ottimizzazzjonijiet tal-bennej għall-bennejja Stapel u Dockerfile jiftħu l-possibbiltà li jimplimentaw bini mqassam u paralleli f'werf. Dawn il-karatteristiċi dalwaqt se jidhru fl-istess rilaxx v1.1 u se jsiru awtomatikament disponibbli permezz tal-mekkaniżmu ta' aġġornament awtomatiku (għall-utenti multiwerf).
F'dan ir-rilaxx, ġiet miżjuda strateġija ta' tikkettar ibbażata fuq il-kontenut tal-immaġni - tikkettjar ibbażat fuq il-kontenut, li saret l-istrateġija default. Ir-reġistru tal-kmand ewlieni ġie maħdum mill-ġdid ukoll: werf build, werf publish, werf deploy, werf dismiss, werf cleanup.
Il-pass sinifikanti li jmiss huwa li żżid assemblaġġi distribwiti. Il-bini mqassam saru prijorità ogħla mill-bini paralleli minn v1.0 peress li jżidu aktar valur għal werf: skalar vertikali tal-bennejja u appoġġ għal bennejja effimeri f'diversi sistemi CI/CD, kif ukoll il-kapaċità li jagħmlu appoġġ uffiċjali għall-Azzjonijiet GitHub . Għalhekk, l-iskadenzi ta' implimentazzjoni għal assemblaġġi paralleli ġew imċaqalqa. Madankollu, qed naħdmu biex nimplimentaw iż-żewġ possibbiltajiet kemm jista’ jkun malajr.
Segwi l-aħbarijiet! U tinsiex iżżurna fuq GitHubbiex toħloq kwistjoni, issib waħda eżistenti u żid plus, toħloq PR, jew sempliċement tara l-iżvilupp tal-proġett.