werf 1.1 lage: amelyorasyon nan mason an jodi a ak plan pou lavni an

werf 1.1 lage: amelyorasyon nan mason an jodi a ak plan pou lavni an

werf se sous ouvè GitOps CLI sèvis piblik nou an pou bati ak livrezon aplikasyon pou Kubernetes. Jan te pwomèt la, lage vèsyon v1.0 make kòmansman an nan ajoute nouvo karakteristik nan werf ak revize apwòch tradisyonèl yo. Koulye a, nou kontan prezante lage v1.1, ki se yon gwo etap nan devlopman ak yon fondasyon pou lavni an pèseptè werf. Vèsyon an disponib kounye a nan chanèl 1.1 ea.

Baz la nan lage a se achitekti nan nouvo nan depo nan etap ak optimize nan travay la nan tou de pèseptè (pou Stapel ak Dockerfile). Nouvo achitekti depo a louvri posiblite pou aplike asanble distribiye ki soti nan plizyè lame ak asanble paralèl sou menm lame a.

Optimizasyon travay gen ladan debarase m de kalkil ki pa nesesè nan etap nan kalkil siyati etap yo ak chanje mekanis yo pou kalkile sòm chèk dosye yo nan pi efikas. Optimize sa a diminye tan an mwayèn nan bati pwojè lè l sèvi avèk werf. Ak san fè anyen konsa bati, lè tout etap egziste nan kachèt la etap-depo, yo kounye a se reyèlman vit. Nan pifò ka yo, rekòmanse bati a pral pran mwens pase 1 segonn! Sa a aplike tou nan pwosedi pou verifye etap nan pwosesis travay ekip yo. werf deploy и werf run.

Epitou nan lage sa a, yon estrateji pou make imaj pa kontni parèt - etikèt ki baze sou kontni, ki kounye a aktive pa default ak youn nan sèlman rekòmande.

Ann pran yon gade pi pre nan inovasyon kle yo nan werf v1.1, epi an menm tan an di w sou plan pou lavni an.

Ki sa ki te chanje nan werf v1.1?

Nouvo fòma nonmen etap ak algorithm pou chwazi etap nan kachèt

Nouvo règ jenerasyon non sèn. Koulye a, chak etap build jenere yon non etap inik, ki gen ladann 2 pati: yon siyati (jan li te ye nan v1.0) plis yon idantifyan inik tanporè.

Pou egzanp, non an plen imaj etap ta ka sanble sa a:

werf-stages-storage/myproject:d2c5ad3d2c9fcd9e57b50edd9cb26c32d156165eb355318cebc3412b-1582656767835

...oswa an jeneral:

werf-stages-storage/PROJECT:SIGNATURE-TIMESTAMP_MILLISEC

Здесь:

  • SIGNATURE se yon siyati etap, ki reprezante idantifyan kontni etap la epi ki depann de istwa edisyon nan Git ki te mennen nan kontni sa a;
  • TIMESTAMP_MILLISEC se yon idantifyan imaj inik garanti ki pwodui nan moman yo bati yon nouvo imaj.

Algorithm pou chwazi etap nan kachèt la baze sou tcheke relasyon Git komèt yo:

  1. Werf kalkile siyati yon sèten etap.
  2. В etap-depo Ka gen plizyè etap pou yon siyati bay. Werf chwazi tout etap ki koresponn ak siyati a.
  3. Si etap aktyèl la lye ak Git (git-archive, etap koutim ak plak Git: install, beforeSetup, setup; oswa git-latest-patch), Lè sa a, werf chwazi sèlman etap sa yo ki asosye ak yon commit ki se yon zansèt komite aktyèl la (pou ki bati a rele).
  4. Soti nan rès etap apwopriye yo chwazi youn - pi ansyen an nan dat kreyasyon an.

Yon etap pou diferan branch Git ka gen menm siyati a. Men, werf ap anpeche kachèt ki asosye ak diferan branch yo itilize ant branch sa yo, menm si siyati yo matche.

→ Dokimantasyon.

Nouvo algorithm pou kreye ak ekonomize etap nan depo etap la

Si, lè w ap chwazi etap nan kachèt la, werf pa jwenn yon etap apwopriye, Lè sa a, pwosesis la nan rasanble yon nouvo etap inisye.

Remake byen ke pwosesis miltip (sou youn oswa plis lame) ka kòmanse bati menm etap la nan apeprè menm tan an. Werf sèvi ak yon algorithm bloke optimis etap-depo nan moman sa a nan sove imaj la frèch kolekte nan etap-depo. Nan fason sa a, lè nouvo etap bati a pare, werf blòk etap-depo epi sove yon imaj ki fèk kolekte la sèlman si yon imaj apwopriye pa egziste ankò (pa siyati ak lòt paramèt - gade nouvo algorithm pou chwazi etap nan kachèt la).

Yon imaj ki fèk rasanble garanti gen yon idantifyan inik pa TIMESTAMP_MILLISEC (gade nouvo fòma non etap la). Nan ka nan etap-depo yo pral jwenn yon imaj apwopriye, werf pral jete imaj la frèch konpile epi yo pral sèvi ak imaj ki soti nan kachèt la.

Nan lòt mo: premye pwosesis la fini bati imaj la (yon sèl la pi rapid) pral jwenn dwa pou estoke li nan etap-depo (epi Lè sa a, li se imaj sa a sèl ki pral itilize pou tout bati). Yon pwosesis konstriksyon dousman p'ap janm bloke yon pwosesis ki pi rapid soti nan ekonomize rezilta yo bati nan etap aktyèl la ak deplase sou pwochen bati a.

→ Dokimantasyon.

Amelyore pèfòmans Dockerfile builder

Nan moman sa a, tiyo a nan etap pou yon imaj bati nan yon Dockerfile konsiste de yon etap - dockerfile. Lè w ap kalkile siyati a, yo kalkile sòm chèk dosye yo context, ki pral itilize pandan asanble a. Anvan amelyorasyon sa a, werf te mache nan tout fichye yo epi li te jwenn yon sòm chèk lè yo rezime kontèks la ak mòd chak dosye. Kòmanse ak v1.1, werf ka itilize sòm chèk kalkile ki estoke nan yon depo Git.

Algorithm a baze sou git ls-tree. Algorithm a pran an kont dosye nan .dockerignore epi travèse pye bwa a dosye rekursif sèlman lè sa nesesè. Se konsa, nou te dekouple soti nan lekti sistèm nan dosye, ak depandans nan algorithm la sou gwosè a. context pa enpòtan.

Algorithm la tcheke tou dosye ki pa swiv epi, si sa nesesè, pran yo an kont nan sòm chèk la.

Amelyore pèfòmans lè enpòte dosye

Vèsyon werf v1.1 itilize yon sèvè rsync lè enpòte dosye ki soti nan zafè ak imaj. Précédemment, enpòte te fè nan de etap lè l sèvi avèk yon mòn anyè ki soti nan sistèm lame a.

Pèfòmans enpòte sou macOS pa limite pa volim Docker, epi enpòtasyon yo fini nan menm kantite tan ak Linux ak Windows.

Tag ki baze sou kontni

Werf v1.1 sipòte sa yo rele tagging pa kontni imaj - etikèt ki baze sou kontni. Tag yo nan imaj Docker ki kapab lakòz yo depann de sa ki nan imaj sa yo.

Lè w ap kouri lòd la werf publish --tags-by-stages-signature oswa werf ci-env --tagging-strategy=stages-signature pibliye imaj nan sa yo rele an siyati etap la imaj. Chak imaj make ak pwòp siyati etap yo nan imaj sa a, ki kalkile dapre menm règ ak siyati regilye chak etap separeman, men se yon idantifyan jeneral nan imaj la.

Siyati etap imaj yo depann de:

  1. sa ki nan imaj sa a;
  2. istwa chanjman Git ki te mennen nan kontni sa a.

Yon depo Git toujou gen komite enbesil ki pa chanje sa ki nan dosye imaj yo. Pou egzanp, komèt ak kòmantè sèlman oswa fizyone komite, oswa komèt ki chanje dosye sa yo nan Git ki pa pral enpòte nan imaj la.

Lè w ap itilize tag ki baze sou kontni, pwoblèm yo nan rekòmanse nesesè nan gous aplikasyon nan Kubernetes akòz chanjman nan non imaj la yo rezoud, menm si sa ki nan imaj la pa chanje. By wout la, sa a se youn nan rezon ki anpeche estoke anpil mikwosèvis nan yon aplikasyon nan yon sèl depo Git.

Epitou, tagging ki baze sou kontni se yon metòd tag ki pi serye pase tagging sou branch Git, paske kontni an nan imaj ki kapab lakòz yo pa depann de lòd nan ki tiyo yo egzekite nan sistèm CI a pou rasanble plizyè komite nan menm branch la.

Li enpòtan: kòmanse depi kounye a etap-siyati - Eske sèl estrateji tagging rekòmande. Li pral itilize pa default nan lòd la werf ci-env (sof si ou presize klèman yon plan tagging diferan).

→ Dokimantasyon. Yon piblikasyon separe pral tou konsakre nan karakteristik sa a. MIZAJOU (3 avril): Atik ak detay pibliye.

Logging nivo

Itilizatè a kounye a gen opòtinite pou kontwole pwodiksyon an, mete nivo antre ak travay ak enfòmasyon debogaj. Opsyon te ajoute --log-quiet, --log-verbose, --log-debug.

Pa default, pwodiksyon an gen enfòmasyon minimòm:

werf 1.1 lage: amelyorasyon nan mason an jodi a ak plan pou lavni an

Lè w ap itilize pwodiksyon pwolib (--log-verbose) ou ka wè ki jan werf travay:

werf 1.1 lage: amelyorasyon nan mason an jodi a ak plan pou lavni an

Pwodiksyon detaye (--log-debug), anplis enfòmasyon debogaj werf, gen mòso bwa bibliyotèk yo itilize tou. Pou egzanp, ou ka wè ki jan entèraksyon ak Rejis Docker rive, epi tou anrejistre kote yo pase yon kantite tan enpòtan:

werf 1.1 lage: amelyorasyon nan mason an jodi a ak plan pou lavni an

Plan pou lavni

Attention! Opsyon ki dekri anba yo make v1.1 ap vin disponib nan vèsyon sa a, anpil nan yo nan fiti prè. Mizajou ap vini atravè oto-mizajou lè w ap itilize multiwerf. Karakteristik sa yo pa afekte pati ki estab nan fonksyon v1.1; aparans yo pa pral mande pou entèvansyon manyèl itilizatè nan konfigirasyon ki egziste deja.

Sipò konplè pou plizyè aplikasyon Rejis Docker (NOUVO)

Objektif la se pou itilizatè a sèvi ak yon aplikasyon koutim san restriksyon lè w ap itilize werf.

Kounye a, nou te idantifye seri solisyon sa yo pou nou pral garanti tout sipò:

  • Default (bibliyotèk/rejis)*,
  • AWS ECR
  • Azure*,
  • Docker Hub
  • GCR*,
  • Pakè GitHub
  • Rejis GitLab*,
  • Harbour*,
  • Quay.

Solisyon ki kounye a konplètman sipòte pa werf yo make ak yon asterisk. Pou lòt moun gen sipò, men ak limit.

De pwoblèm prensipal yo ka idantifye:

  • Gen kèk solisyon ki pa sipòte retire tag lè l sèvi avèk Docker Rejis API a, anpeche itilizatè yo itilize netwayaj otomatik werf la. Sa a se vre pou AWS ECR, Docker Hub, ak GitHub Packages.
  • Gen kèk solisyon ki pa sipòte sa yo rele depo enbrike (Docker Hub, GitHub Packages ak Quay) oswa fè, men itilizatè a dwe kreye yo manyèlman lè l sèvi avèk UI oswa API (AWS ECR).

Nou pral rezoud pwoblèm sa yo ak lòt lè l sèvi avèk API natif natal nan solisyon yo. Travay sa a gen ladan tou kouvri sik konplè operasyon werf ak tès pou chak nan yo.

Konstriksyon imaj distribiye (↑)

  • Vèsyon: v1.2 v1.1 (priyorite pou aplike karakteristik sa a te ogmante)
  • Dat: Mas-Avril Mas
  • Problèm

Nan moman sa a, werf v1.0 ak v1.1 ka itilize sèlman sou yon sèl lame devwe pou operasyon nan bilding ak pibliye imaj ak deplwaye aplikasyon an nan Kubernetes.

Pou louvri posiblite yo nan travay distribiye nan werf, lè bati ak deplwaman aplikasyon nan Kubernetes yo te lanse sou plizyè lame abitrè ak lame sa yo pa sove eta yo ant bati (kourè tanporè), werf oblije aplike kapasite nan itilize. Rejis Docker kòm yon magazen etap.

Précédemment, lè pwojè werf la te toujou rele dapp, li te gen yon opòtinite konsa. Sepandan, nou te rankontre yon kantite pwoblèm ki bezwen pran an konsiderasyon lè aplike fonksyonalite sa a nan werf.

Note. Karakteristik sa a pa mande pou pèseptè a travay andedan gous Kubernetes, paske Pou fè sa, ou bezwen debarase m de depandans sou sèvè Docker lokal la (nan gous Kubernetes pa gen aksè a sèvè Docker lokal la, paske pwosesis la tèt li ap kouri nan yon veso, epi werf pa sipòte epi li pa pral sipòte. travay ak sèvè Docker sou rezo a). Sipò pou kouri Kubernetes pral aplike separeman.

Sipò ofisyèl pou GitHub Actions (NOUVO)

Gen ladann dokiman werf (seksyon referans и gide), osi byen ke GitHub Aksyon ofisyèl pou travay ak werf.

Anplis de sa, li pral pèmèt werf travay sou kourè efemèr.

Mekanik entèraksyon itilizatè yo ak sistèm CI a pral baze sou mete etikèt sou demann rale pou kòmanse sèten aksyon pou konstwi/woule aplikasyon an.

Devlopman lokal ak deplwaman aplikasyon ak werf (↓)

  • Vèsyon: v1.1
  • Dat: Janvye-Fevriye Avril
  • Problèm

Objektif prensipal la se reyalize yon sèl konfigirasyon inifye pou deplwaye aplikasyon tou de lokalman ak nan pwodiksyon, san aksyon konplèks, soti nan bwat la.

werf tou oblije gen yon mòd opere nan ki li pral pratik yo edit kòd aplikasyon an ak imedyatman resevwa fidbak nan aplikasyon an kouri pou debogaj.

Nouvo algorithm netwayaj (NOUVO)

Nan vèsyon aktyèl la nan werf v1.1 nan pwosedi a cleanup Pa gen okenn dispozisyon pou netwaye imaj pou konplo tagging ki baze sou kontni an - imaj sa yo pral akimile.

Epitou, vèsyon aktyèl la nan werf (v1.0 ak v1.1) sèvi ak règleman netwayaj diferan pou imaj ki pibliye anba plan tagging: Git branch, Git tag oswa Git commit.

Yon nouvo algorithm pou netwaye imaj ki baze sou istwa komèt nan Git, inifye pou tout plan tagging, te envante:

  • Pa kenbe imaj N1 ki asosye ak pi resan komite N2 pou chak git HEAD (branch ak tags).
  • Sere pa plis pase imaj etap N1 ki asosye ak dènye komèt N2 pou chak git HEAD (branch ak tags).
  • Sere tout imaj yo itilize nan nenpòt resous gwoup Kubernetes (tout kontèks kube nan fichye konfigirasyon an ak espas non yo analize; ou ka limite konpòtman sa a ak opsyon espesyal).
  • Sere tout imaj ki itilize nan manifès konfigirasyon resous ki sove nan degaje Helm.
  • Yon imaj ka efase si li pa asosye ak okenn HEAD soti nan git (pa egzanp, paske korespondan HEAD tèt li te efase) epi li pa itilize nan okenn manifest nan gwoup Kubernetes la ak nan degaje Helm.

Bati imaj paralèl (↓)

  • Vèsyon: v1.1
  • Dat: janvye-fevriye avril*

Vèsyon aktyèl la nan werf kolekte imaj yo ak zafè ki dekri nan werf.yaml, sekans. Li nesesè paralelize pwosesis la nan rasanble etap endepandan nan imaj ak zafè, osi byen ke bay pwodiksyon pratik ak enfòmatif.

* Remak: dat limit la te chanje akòz plis priyorite pou aplike asanble distribiye, ki pral ajoute plis kapasite dechèl orizontal, osi byen ke itilizasyon werf ak GitHub Actions. Asanble paralèl se pwochen etap optimize a, bay évolutivité vètikal lè rasanble yon pwojè.

Tranzisyon nan Helm 3 (↓)

  • Vèsyon: v1.2
  • Dat: Fevriye-Mas Me*

Gen ladann migrasyon nan nouvo kodbaz Helm 3 ak yon fason pwouve, pratik pou imigre enstalasyon ki deja egziste.

* Remak: chanje nan Helm 3 pa pral ajoute karakteristik enpòtan nan werf, paske tout karakteristik kle Helm 3 yo (3-way-fusion ak pa gen tiller) yo deja aplike nan werf. Anplis, werf genyen karakteristik adisyonèl anplis de sa yo endike yo. Sepandan, tranzisyon sa a rete nan plan nou yo epi yo pral aplike.

Jsonnet pou dekri konfigirasyon Kubernetes (↓)

  • Vèsyon: v1.2
  • Dat: Janvye-Fevriye Avril-Me

Werf pral sipòte deskripsyon konfigirasyon pou Kubernetes nan fòma Jsonnet. An menm tan an, werf ap rete konpatib ak Helm epi pral gen yon chwa fòma deskripsyon.

Rezon ki fè la se ke modèl Go, dapre anpil moun, gen yon gwo baryè antre, ak konprann nan kòd la nan modèl sa yo tou soufri.

Yo konsidere tou posiblite pou entwodwi lòt sistèm deskripsyon konfigirasyon Kubernetes (pa egzanp, Kustomize).

Travay andedan Kubernetes (↓)

  • Vèsyon: v1.2
  • Dat: Avril-Me Me-Jen

Objektif: Asire ke imaj yo bati ak aplikasyon an delivre lè l sèvi avèk kourè nan Kubernetes. Moun sa yo. Nouvo imaj yo ka bati, pibliye, netwaye, ak deplwaye dirèkteman nan gous Kubernetes.

Pou aplike kapasite sa a, ou bezwen premye pou kapab konstwi distribiye imaj (gade pwen pi wo a).

Li mande tou sipò pou mòd fonksyònman mason an san yo pa yon sèvè Docker (sa vle di Kaniko-tankou bati oswa bati nan espas itilizatè).

Werf pral sipòte bati sou Kubernetes pa sèlman ak Dockerfile, men tou ak mason Stapel li yo ak rebati incrémentielle ak Ansible.

Yon etap nan direksyon pou devlopman ouvè

Nou renmen kominote nou an (GitHub, Telegram) epi nou vle plis ak plis moun ede fè werf pi byen, konprann direksyon n ap deplase nan, epi patisipe nan devlopman an.

Byen dènyèman li te deside chanje a Planch pwojè GitHub yo nan lòd yo revele pwosesis travay ekip nou an. Koulye a, ou ka wè plan yo imedya, osi byen ke travay aktyèl nan domèn sa yo:

Gen anpil travay ki fèt ak pwoblèm:

  • Retire sa ki pa enpòtan yo.
  • Sa yo ki deja egziste yo pote nan yon fòma sèl, ak yon kantite ase detay ak detay.
  • Nouvo pwoblèm ak lide ak sijesyon yo te ajoute.

Ki jan yo pèmèt vèsyon v1.1

Vèsyon an disponib kounye a nan chanèl 1.1 ea (nan chanèl yo ki estab и wòch-solid degaje yo ap parèt kòm estabilizasyon rive, sepandan ea tèt li deja stab ase pou itilize, paske te pase nan chanèl yo Alpha и beta). Aktive atravè multiwerf nan fason sa a:

source $(multiwerf use 1.1 ea)
werf COMMAND ...

Konklizyon

Nouvo achitekti depo etap la ak optimize builder pou Stapel ak Dockerfile builders louvri posiblite pou aplike distribiye ak paralèl bati nan werf. Karakteristik sa yo pral byento parèt nan menm lage v1.1 la epi yo pral vin disponib otomatikman atravè mekanis aktyalizasyon oto (pou itilizatè yo. multiwerf).

Nan lage sa a, yo te ajoute yon estrateji tagging ki baze sou kontni imaj - etikèt ki baze sou kontni, ki te vin estrateji nan default. Yo te retravay jounal kòmand prensipal la tou: werf build, werf publish, werf deploy, werf dismiss, werf cleanup.

Pwochen etap enpòtan an se ajoute asanble distribiye. Konstriksyon distribiye yo te vin yon pi gwo priyorite pase konstriksyon paralèl depi v1.0 paske yo ajoute plis valè nan werf: echèl vètikal nan mason ak sipò pou mason efemèr nan divès sistèm CI/CD, osi byen ke kapasite nan fè sipò ofisyèl pou GitHub Actions. . Se poutèt sa, dat limit aplikasyon pou asanble paralèl yo te deplase. Sepandan, nou ap travay pou aplike tou de posiblite yo pi vit posib.

Swiv nouvèl la! Epi pa bliye vizite nou nan GitHubpou kreye yon pwoblèm, jwenn yon sèl ki deja egziste epi ajoute yon plis, kreye yon PR, oswa tou senpleman gade devlopman nan pwojè a.

PS

Li tou sou blog nou an:

Sous: www.habr.com

Add nouvo kòmantè