werf 1.1 release: perbaikan ka pembina kiwari sarta rencana pikeun mangsa nu bakal datang

werf 1.1 release: perbaikan ka pembina kiwari sarta rencana pikeun mangsa nu bakal datang

werf mangrupikeun utilitas GitOps CLI open source kami pikeun ngawangun sareng ngirim aplikasi ka Kubernetes. Sakumaha jangji, sékrési versi v1.0 ditandaan awal nambahkeun fitur anyar pikeun werf na revising pendekatan tradisional. Ayeuna kami resep nampilkeun release v1.1, nu mangrupakeun hambalan badag dina ngembangkeun sarta yayasan pikeun mangsa nu bakal datang kolektor werf. Versi ayeuna sayogi di saluran 1.1 ea.

Dasar sékrési nyaéta arsitéktur gudang panggung anyar sareng optimasi karya duanana kolektor (pikeun Stapel sareng Dockerfile). Arsitéktur panyimpen anyar muka kamungkinan ngalaksanakeun rakitan anu disebarkeun tina sababaraha host sareng rakitan paralel dina host anu sami.

Optimasi pagawéan kalebet ngaleungitkeun itungan anu teu dipikabutuh dina tahap ngitung tanda tangan panggung sareng ngarobih mékanisme pikeun ngitung checksum file ka anu langkung éfisién. Optimasi ieu ngirangan waktos rata-rata ngawangun proyék nganggo werf. Sareng ngawangun dianggurkeun, nalika sadaya tahapan aya dina cache tahap-gudang, ayeuna bener gancang. Dina kalolobaan kasus, balikan deui ngawangun bakal nyandak kirang ti 1 detik! Ieu ogé lumaku pikeun prosedur pikeun verifikasi tahapan dina prosés gawé tim. werf deploy и werf run.

Ogé dina sékrési ieu, strategi pikeun méré tag gambar ku eusi muncul - tagging dumasar eusi, anu ayeuna diaktipkeun sacara standar sareng hiji-hijina anu disarankeun.

Hayu urang nyandak hiji tampilan ngadeukeutan dina inovasi konci dina werf v1.1, sarta dina waktos anu sareng ngabejaan Anjeun tentang rencana pikeun mangsa nu bakal datang.

Naon geus robah dina werf v1.1?

Format ngaran panggung anyar sareng algoritma pikeun milih tahapan tina cache

Aturan generasi ngaran panggung anyar. Ayeuna unggal tahap ngawangun ngahasilkeun ngaran panggung unik, nu diwangun ku 2 bagian: signature a (sakumaha ieu dina v1.0) ditambah hiji identifier samentara unik.

Contona, ngaran gambar panggung lengkep bisa kasampak kawas kieu:

werf-stages-storage/myproject:d2c5ad3d2c9fcd9e57b50edd9cb26c32d156165eb355318cebc3412b-1582656767835

... atanapi sacara umum:

werf-stages-storage/PROJECT:SIGNATURE-TIMESTAMP_MILLISEC

Kieu:

  • SIGNATURE mangrupa tanda tangan panggung, nu ngagambarkeun identifier eusi panggung sarta gumantung kana sajarah éditan di Git nu ngakibatkeun eusi ieu;
  • TIMESTAMP_MILLISEC mangrupakeun identifier gambar unik dijamin nu dihasilkeun dina waktu gambar anyar diwangun.

Algoritma pikeun milih tahapan tina cache dumasar kana mariksa hubungan Git commits:

  1. Werf ngitung tanda tangan tina tahap anu tangtu.
  2. В tahap-gudang Aya sababaraha tahapan pikeun tanda tangan anu dipasihkeun. Werf milih sadaya tahapan anu cocog sareng tandatangan.
  3. Upami tahap ayeuna dihubungkeun sareng Git (git-archive, tahap khusus sareng patch Git: install, beforeSetup, setup; atanapi git-latest-patch), teras werf milih ngan ukur tahap-tahap anu aya hubunganana sareng komitmen anu mangrupikeun karuhun komitmen ayeuna (nu disebut ngawangun).
  4. Tina sésa-sésa tahap anu cocog, hiji dipilih - anu pangkolotna ku tanggal nyiptakeun.

Tahap pikeun cabang Git anu béda tiasa gaduh tanda tangan anu sami. Tapi werf bakal nyegah cache pakait sareng cabang béda ti dipaké antara cabang ieu, sanajan tanda tangan cocog.

→ Dokuméntasi.

Algoritma anyar pikeun nyiptakeun sareng nyimpen tahapan dina panyimpenan panggung

Upami, nalika milih tahapan tina cache, werf henteu mendakan tahap anu cocog, maka prosés assembling tahapan énggal dimimitian.

Catet yén sababaraha prosés (dina hiji atanapi langkung host) tiasa ngamimitian ngawangun tahap anu sami dina waktos anu sami. Werf ngagunakeun algoritma blocking optimistis tahap-gudang dina momen nyimpen gambar anyar dikumpulkeun dina tahap-gudang. Ku cara kieu, nalika ngawangun tahap anyar geus siap, blok werf tahap-gudang tur nyimpen gambar anyar dikumpulkeun aya ngan lamun gambar cocok euweuh aya di dinya (ku tanda tangan sareng parameter sanésna - tingali algoritma énggal pikeun milih tahapan tina cache).

Gambar anu énggal dirakit dijamin gaduh idéntifikasi unik ku TIMESTAMP_MILLISEC (tingali format ngaran panggung anyar). Bisi di tahap-gudang gambar cocok bakal kapanggih, werf bakal Piceun gambar Freshly disusun tur bakal ngagunakeun gambar tina cache nu.

Dina basa sejen: prosés munggaran nepi ka rengse ngawangun gambar (panggancangna hiji) bakal meunang hak pikeun nyimpen eta dina tahap-panyimpenan (lajeng éta gambar tunggal ieu bakal dipaké pikeun sakabéh ngawangun). Prosés ngawangun anu laun moal bakal ngahalangan prosés anu langkung gancang tina ngahémat hasil ngawangun tahap ayeuna sareng ngaléngkah ka gedong salajengna.

→ Dokuméntasi.

Ningkatkeun kinerja pembina Dockerfile

Ayeuna, jalur pipa tahapan pikeun gambar anu diwangun tina Dockerfile diwangun ku hiji tahap - dockerfile. Nalika ngitung signature, checksum tina file diitung context, nu bakal dipaké salila assembly. Sateuacan perbaikan ieu, werf sacara rekursif ngalangkungan sadaya file sareng kéngingkeun checksum ku nyimpulkeun kontéks sareng modeu unggal file. Dimimitian ku v1.1, werf tiasa nganggo checksums diitung disimpen dina Repository Git.

Algoritma dumasar kana git ls-tangkal. Algoritma nyokot kana catetan akun di .dockerignore sarta traverses tangkal file recursively ngan lamun perlu. Ku kituna, kami geus decoupled tina maca sistem file, sarta gumantungna algoritma dina ukuran context teu signifikan.

Algoritma ogé pariksa file anu henteu dilacak sareng, upami diperyogikeun, dipertimbangkeun dina checksum.

Ningkatkeun kinerja nalika ngimpor file

Versi werf v1.1 ngagunakeun server rsync nalika ngimpor file tina artefak sareng gambar. Saméméhna, impor dilakukeun dina dua léngkah nganggo diréktori dipasang tina sistem host.

Kinerja impor dina macOS henteu deui diwatesan ku volume Docker, sareng impor lengkep dina waktos anu sami sareng Linux sareng Windows.

tagging dumasar eusi

Werf v1.1 ngadukung anu disebut tagging ku eusi gambar - tagging dumasar eusi. Tag tina gambar Docker anu dihasilkeun gumantung kana eusi gambar ieu.

Nalika ngajalankeun paréntah werf publish --tags-by-stages-signature atawa werf ci-env --tagging-strategy=stages-signature gambar diterbitkeun tina disebut tanda tangan panggung gambar. Unggal gambar ditandaan ku tanda tangan sorangan tina tahapan gambar ieu, anu diitung dumasar kana aturan anu sami sareng tanda tangan biasa unggal tahap sacara misah, tapi mangrupikeun identifier umum gambar.

Tanda tangan tahapan gambar gumantung kana:

  1. eusi gambar ieu;
  2. sajarah parobahan Git anu nyababkeun eusi ieu.

Repositori Git sok gaduh dummy commits anu henteu ngarobih eusi file gambar. Contona, commits kalawan ukur komentar atawa merge commits, atawa commits nu ngarobah eta file di Git nu moal diimpor kana gambar.

Nalika nganggo tagging dumasar kana eusi, masalah restart anu teu dipikabutuh tina pods aplikasi di Kubernetes kusabab parobihan dina nami gambar direngsekeun, sanaos eusi gambar henteu robih. Ku jalan kitu, ieu mangrupikeun salah sahiji alesan anu nyegah nyimpen seueur jasa mikro tina hiji aplikasi dina gudang Git tunggal.

Ogé, tagging dumasar-kontén mangrupikeun metode tagging anu langkung dipercaya tibatan tagging dina cabang Git, sabab eusi gambar anu hasilna henteu gumantung kana urutan pipa anu dieksekusi dina sistem CI pikeun ngarakit sababaraha komitmen tina cabang anu sami.

penting: mimitian ti ayeuna tahapan-tanda tangan - eta hijina strategi tagging dianjurkeun. Éta bakal dianggo sacara standar dina paréntah werf ci-env (iwal mun eksplisit nangtukeun skéma tagging béda).

→ Dokuméntasi. Publikasi anu misah ogé bakal dikhususkeun pikeun fitur ieu. diropéa (April 3): Artikel kalawan rinci diterbitkeun.

Tingkat logging

Pamaké ayeuna gaduh kasempetan pikeun ngontrol kaluaran, nyetél tingkat logging sareng damel sareng inpormasi debugging. Pilihan ditambahkeun --log-quiet, --log-verbose, --log-debug.

Sacara standar, kaluaran ngandung inpormasi minimum:

werf 1.1 release: perbaikan ka pembina kiwari sarta rencana pikeun mangsa nu bakal datang

Lamun ngagunakeun kaluaran verbose (--log-verbose) anjeun tiasa ningali kumaha werf jalanna:

werf 1.1 release: perbaikan ka pembina kiwari sarta rencana pikeun mangsa nu bakal datang

kaluaran lengkep (--log-debug), sajaba informasi debugging werf, ogé ngandung log perpustakaan dipaké. Salaku conto, anjeun tiasa ningali kumaha interaksi sareng Docker Registry lumangsung, sareng ogé ngarékam tempat-tempat anu nyéépkeun waktos anu ageung:

werf 1.1 release: perbaikan ka pembina kiwari sarta rencana pikeun mangsa nu bakal datang

Rencana kahareup

Awas! Pilihan anu dijelaskeun di handap ieu ditandaan v1.1 bakal sadia dina versi ieu, loba di antarana dina mangsa nu bakal datang. Pembaruan bakal datang via apdet otomatis lamun maké multiwerf. Fitur-fitur ieu henteu mangaruhan bagian stabil tina fungsi v1.1; penampilanna henteu ngabutuhkeun campur tangan pangguna manual dina konfigurasi anu tos aya.

Dukungan pinuh pikeun sababaraha palaksanaan Docker Registry (NEW)

  • Vérsi: v1.1
  • Kaping: Maret
  • hasil

Tujuanana nyaéta pikeun pangguna nganggo palaksanaan khusus tanpa larangan nalika nganggo werf.

Ayeuna, kami parantos ngaidentipikasi set solusi di handap ieu anu kami bakal ngajamin dukungan pinuh:

  • Default (perpustakaan/pendaptaran)*,
  • AWS ECR
  • Azure*,
  • Docker Hub
  • GCR*,
  • Paket GitHub
  • GitLab Registry*,
  • Pelabuhan*,
  • Quay.

Solusi anu ayeuna dirojong pinuh ku werf ditandaan ku tanda bintang. Pikeun batur aya rojongan, tapi kalawan watesan.

Dua masalah utama bisa dicirikeun:

  • Sababaraha solusi henteu ngadukung panyabutan tag nganggo Docker Registry API, nyegah pangguna nganggo beberesih otomatis werf. Ieu leres pikeun AWS ECR, Docker Hub, sareng Paket GitHub.
  • Sababaraha solusi henteu ngadukung anu disebut repositori nested (Docker Hub, Paket GitHub sareng Quay) atanapi henteu, tapi pangguna kedah nyiptakeunana sacara manual nganggo UI atanapi API (AWS ECR).

Kami badé ngabéréskeun masalah ieu sareng anu sanés nganggo API asli tina solusi. tugas ieu ngawengku ogé ngawengku siklus pinuh operasi werf kalawan tés pikeun tiap sahijina.

Wangunan gambar anu disebarkeun (↑)

  • Vérsi: v1.2 v1.1 (prioritas pikeun nerapkeun fitur ieu geus ngaronjat)
  • Kaping: Maret-April Maret
  • hasil

Ayeuna, werf v1.0 sareng v1.1 tiasa dianggo ngan ukur dina hiji host khusus pikeun operasi ngawangun sareng nyebarkeun gambar sareng nyebarkeun aplikasi ka Kubernetes.

Pikeun muka kamungkinan karya werf anu disebarkeun, nalika ngawangun sareng panyebaran aplikasi dina Kubernetes diluncurkeun dina sababaraha host anu sawenang-wenang sareng host ieu henteu ngahemat kaayaanana antara ngawangun (runner samentawis), werf diperyogikeun pikeun nerapkeun kamampuan ngagunakeun. pendaptaran Docker salaku toko panggung.

Saméméhna, nalika proyék werf masih disebut dapp, éta kasempetan misalna. Nanging, kami parantos mendakan sababaraha masalah anu kedah diperhatoskeun nalika ngalaksanakeun fungsi ieu dina werf.

nyarios. fitur ieu teu merlukeun collector pikeun digawé di jero pods Kubernetes, sabab Jang ngalampahkeun ieu, anjeun kedah ngaleungitkeun gumantungna kana server Docker lokal (dina pod Kubernetes teu aya aksés ka server Docker lokal, sabab prosésna sorangan dijalankeun dina wadah, sareng werf henteu sareng moal ngadukung. gawé bareng server Docker ngaliwatan jaringan). Rojongan pikeun ngajalankeun Kubernetes bakal dilaksanakeun nyalira.

Rojongan resmi pikeun GitHub Actions (NEW)

  • Vérsi: v1.1
  • Kaping: Maret
  • hasil

Ngawengku dokuméntasi werf (bagian rujukan и mere beja), kitu ogé Aksi GitHub resmi pikeun gawé bareng werf.

Sajaba ti éta, éta bakal ngidinan werf pikeun berpungsi dina runners ephemeral.

Mékanika interaksi pangguna sareng sistem CI bakal dumasar kana nempatkeun labél dina paménta tarik pikeun ngamimitian tindakan anu tangtu pikeun ngawangun / ngagulung aplikasi.

Pangwangunan lokal sareng panyebaran aplikasi nganggo werf (↓)

  • Vérsi: v1.1
  • Kaping: Januari-Pébruari April
  • hasil

Tujuan utama nyaéta pikeun ngahontal config ngahijikeun tunggal pikeun deploying aplikasi duanana lokal sarta dina produksi, tanpa lampah kompléks, out of the box.

Werf ogé diwajibkeun gaduh modeu operasi dimana éta bakal gampang ngédit kode aplikasi sareng langsung nampi tanggapan tina aplikasi anu ngajalankeun pikeun debugging.

Algoritma beberesih anyar (NEW)

  • Vérsi: v1.1
  • Kaping: April
  • hasil

Dina versi ayeuna werf v1.1 dina prosedur cleanup Teu aya sasadiaan pikeun meresihan gambar pikeun skéma tagging dumasar-konten - gambar ieu bakal ngumpulkeun.

Ogé, versi werf ayeuna (v1.0 jeung v1.1) ngagunakeun kawijakan cleanup béda pikeun gambar diterbitkeun dina skéma méré tag: Git branch, Git tag atanapi Git commit.

Algoritma anyar pikeun meresihan gambar dumasar kana sajarah komitmen di Git, ngahijikeun pikeun sadaya skéma tagging, parantos diciptakeun:

  • Tetep teu leuwih ti N1 gambar pakait sareng N2 panganyarna commits pikeun tiap git HEAD (cabang jeung tag).
  • Nyimpen henteu langkung ti gambar panggung N1 anu aya hubunganana sareng komitmen panganyarna N2 pikeun unggal git HEAD (cabang sareng tag).
  • Nyimpen sadaya gambar anu dianggo dina sagala sumber kluster Kubernetes (sadayana kontéks kube tina file konfigurasi sareng spasi ngaran discan; anjeun tiasa ngawates kabiasaan ieu sareng pilihan khusus).
  • Nyimpen sadaya gambar nu dipaké dina konfigurasi sumberdaya manifests disimpen dina release Helm.
  • Hiji gambar bisa dihapus lamun teu pakait sareng sagala HEAD ti git (contona, sabab HEAD pakait sorangan geus dihapus) sarta henteu dipaké dina sagala manifests dina klaster Kubernetes na di release Helm.

Wangunan gambar paralel (↓)

  • Vérsi: v1.1
  • Kaping: Januari-Pébruari April *

Versi werf ayeuna ngumpulkeun gambar sareng artefak anu dijelaskeun dina werf.yaml, sacara berurutan. Perlu parallelize prosés assembling tahap bebas gambar jeung artefak, kitu ogé nyadiakeun kaluaran merenah tur informatif.

* Catetan: wates waktu geus bergeser alatan ngaronjat prioritas pikeun ngalaksanakeun assembly disebarkeun, nu bakal nambahan kamampuhan skala horizontal leuwih, kitu ogé pamakéan werf kalawan GitHub Aksi. Majelis paralel mangrupikeun léngkah optimasi salajengna, nyayogikeun skalabilitas nangtung nalika ngarakit hiji proyék.

Transisi ka Helm 3 (↓)

  • Vérsi: v1.2
  • Kaping: Pébruari-Maret Méi*

Ngawengku migrasi ka codebase anyar Helm 3 jeung kabuktian, cara merenah pikeun migrasi pamasangan aya.

* Catetan: pindah ka Helm 3 moal nambahan fitur signifikan kana werf, sabab sagala fitur konci Helm 3 (3-jalan-ngahiji jeung euweuh tiller) geus dilaksanakeun di werf. Leuwih ti éta, werf boga fitur tambahan sajaba ti nu dituduhkeun. Nanging, transisi ieu tetep aya dina rencana urang sareng bakal dilaksanakeun.

Jsonnet pikeun ngajelaskeun konfigurasi Kubernetes (↓)

  • Vérsi: v1.2
  • Kaping: Januari-Pébruari April-Mei

Werf bakal ngarojong déskripsi konfigurasi pikeun Kubernetes dina format Jsonnet. Dina waktos anu sami, werf bakal tetep cocog sareng Helm sareng bakal aya pilihan format pedaran.

Alesanna nyaéta témplat Go, numutkeun seueur jalma, gaduh halangan anu luhur pikeun éntri, sareng pamahaman kode témplat ieu ogé sangsara.

Kamungkinan ngenalkeun sistem déskripsi konfigurasi Kubernetes séjén (contona, Kustomize) ogé dianggap.

Gawé di jero Kubernetes (↓)

  • Vérsi: v1.2
  • Kaping: April-Mei Méi-Juni

Tujuan: Pastikeun yén gambar diwangun sareng aplikasi dikirimkeun nganggo runners di Kubernetes. Jelema. Gambar anyar tiasa diwangun, diterbitkeun, dibersihkeun, sareng disebarkeun langsung tina pods Kubernetes.

Pikeun nerapkeun kamampuan ieu, anjeun mimitina kedah tiasa ngawangun gambar anu disebarkeun (tingali titik di luhur).

Éta ogé ngabutuhkeun dukungan pikeun mode operasi pembina tanpa server Docker (nyaéta ngawangun atanapi ngawangun sapertos Kaniko dina ruang pangguna).

Werf bakal ngadukung gedong dina Kubernetes henteu ngan ukur ku Dockerfile, tapi ogé sareng pembina Stapel na sareng ngawangun deui Incremental sareng Ansible.

Léngkah pikeun pangwangunan kabuka

Urang bogoh ka masarakat urang (GitHub, telegram) sarta kami hayang beuki loba jalma pikeun mantuan sangkan werf hadé, ngartos arah urang pindah di, tur ilubiung dina ngembangkeun éta.

Rada anyar ieu mutuskeun pikeun pindah ka Papan proyék GitHub pikeun nembongkeun prosés kerja tim kami. Ayeuna anjeun tiasa ningali rencana langsung, sareng padamelan ayeuna di daérah ieu:

Seueur padamelan parantos dilakukeun sareng masalah:

  • Dipiceun nu teu relevan.
  • Anu parantos aya dibawa ka format tunggal, kalayan jumlah detil sareng detil anu cekap.
  • Masalah anyar sareng ideu sareng bongbolongan parantos ditambihan.

Kumaha ngaktipkeun versi v1.1

Versi ayeuna sayogi di saluran 1.1 ea (dina saluran kandang и batu-padet Kaluaran bakal muncul nalika stabilisasi lumangsung ea sorangan geus cukup stabil pikeun pamakéan, sabab indit ngaliwatan saluran alfa и béta). Diaktipkeun ngaliwatan multiwerf ku cara kieu:

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

kacindekan

Arsitéktur panyimpen panggung anyar sareng optimasi pembina pikeun pembina Stapel sareng Dockerfile muka kamungkinan ngalaksanakeun ngawangun anu disebarkeun sareng paralel dina werf. Fitur ieu baris geura-giru muncul dina release v1.1 sarua jeung bakal sadia sacara otomatis ngaliwatan mékanisme update otomatis (pikeun pamaké multiwerf).

Dina sékrési ieu, strategi méré tag dumasar kana eusi gambar geus ditambahkeun - tagging dumasar eusi, nu geus jadi strategi standar. Log paréntah utama ogé parantos didamel deui: werf build, werf publish, werf deploy, werf dismiss, werf cleanup.

Léngkah penting salajengna nyaéta nambihan rakitan anu disebarkeun. Wangunan anu disebarkeun parantos janten prioritas anu langkung luhur tibatan ngawangun paralel ti saprak v1.0 sabab nambihan nilai langkung kana werf: skala vertikal pembina sareng dukungan pikeun tukang ephemeral dina sagala rupa sistem CI / CD, ogé kamampuan ngadamel dukungan resmi pikeun GitHub Actions. . Ku alatan éta, deadlines palaksanaan pikeun majelis paralel anu bergeser. Najan kitu, urang digawé pikeun nerapkeun duanana kamungkinan pas mungkin.

Turutan warta! Sarta ulah poho pikeun didatangan kami di GitHubpikeun nyieun masalah, manggihan nu geus aya tur nambahkeun hiji tambah, nyieun PR, atawa ngan saukur lalajo ngembangkeun proyék.

PS

Baca ogé dina blog urang:

sumber: www.habr.com

Tambahkeun komentar