Tagging dumasar eusi dina kolektor werf: naha sareng kumaha jalanna?

Tagging dumasar eusi dina kolektor werf: naha sareng kumaha jalanna?

werf mangrupikeun utilitas GitOps CLI open source kami pikeun ngawangun sareng ngirim aplikasi ka Kubernetes. DI ngabebaskeun v1.1 fitur anyar diwanohkeun dina collector gambar: tagging gambar ku eusi atawa tagging dumasar eusi. Nepi ka ayeuna, skéma tagging has dina werf aub méré tag gambar Docker ku tag Git, cabang Git atanapi Git commit. Tapi sadayana skéma ieu ngagaduhan kalemahan anu lengkep direngsekeun ku strategi tagging anyar. Rincian ngeunaan éta sareng naha éta saé pisan aya dina potongan.

Ngaluncurkeun sakumpulan microservices tina hiji gudang Git

Hiji kaayaan mindeng lumangsung nalika hiji aplikasi dibagi kana loba leuwih atawa kirang jasa bebas. Kaluaran jasa ieu tiasa lumangsung sacara mandiri: hiji atanapi langkung jasa tiasa dileupaskeun dina hiji waktos, sedengkeun anu sanésna kedah teras-terasan damel tanpa aya parobahan. Tapi tina sudut pandang panyimpen kode sareng manajemén proyék, langkung saé tetep jasa aplikasi sapertos kitu dina gudang tunggal.

Aya kaayaan nalika jasa leres-leres mandiri sareng henteu aya hubunganana sareng hiji aplikasi. Dina hal ieu, aranjeunna bakal lokasina di proyék misah jeung sékrési maranéhna bakal dilumangsungkeun ngaliwatan prosés CI / CD misah di unggal proyék.

Sanajan kitu, dina kanyataanana, pamekar mindeng ngabagi hiji aplikasi tunggal kana sababaraha microservices, tapi nyieun gudang misah jeung proyék pikeun tiap ... mangrupakeun overkill jelas. Ieu kaayaan ieu nu bakal dibahas salajengna: sababaraha microservices sapertos anu lokasina di Repository proyék tunggal jeung release lumangsung ngaliwatan hiji prosés tunggal di CI / CD.

Tagging ku cabang Git sareng tag Git

Sebutkeun strategi tagging anu paling umum dianggo - tag-atawa-cabang. Pikeun cabang Git, gambar ditandaan ku nami cabang, pikeun hiji cabang dina hiji waktos ngan aya hiji gambar anu diterbitkeun ku nami cabang éta. Pikeun tag Git, gambar ditandaan dumasar kana nami tag.

Nalika tag Git énggal didamel-contona, nalika versi énggal dileupaskeun-tag Docker énggal bakal didamel pikeun sadaya gambar proyék dina Docker Registry:

  • myregistry.org/myproject/frontend:v1.1.10
  • myregistry.org/myproject/myservice1:v1.1.10
  • myregistry.org/myproject/myservice2:v1.1.10
  • myregistry.org/myproject/myservice3:v1.1.10
  • myregistry.org/myproject/myservice4:v1.1.10
  • myregistry.org/myproject/myservice5:v1.1.10
  • myregistry.org/myproject/database:v1.1.10

Ngaran gambar anyar ieu dialirkeun ngaliwatan template Helm kana konfigurasi Kubernetes. Nalika ngamimitian panyebaran kalayan paréntah werf deploy widang keur diropéa image dina sumber daya Kubernetes manifests na restarting sumberdaya pakait alatan ngaran gambar robah.

masalah: dina kasus nalika, kanyataanna, eusi gambar teu robah saprak rollout saméméhna (tag Git), tapi ngan tag Docker na, ieu kajadian. tambahan balikan deui aplikasi ieu sareng, sasuai, sababaraha downtime mungkin. Sanajan teu aya alesan nyata pikeun ngalakukeun balikan deui ieu.

Hasilna, kalawan skéma tagging ayeuna perlu pager sababaraha repositories Git misah jeung masalah timbul tina pangatur rollout sababaraha repositories ieu. Sacara umum, skéma sapertos kitu janten overloaded sareng rumit. Langkung sae pikeun ngagabungkeun seueur jasa kana gudang tunggal sareng ngadamel tag Docker supados teu aya deui anu teu perlu.

Tagging ku Git commit

werf ogé gaduh strategi tagging pakait sareng Git commits.

Git-commit mangrupikeun identifier pikeun eusi gudang Git sareng gumantung kana sajarah éditan file dina gudang Git, janten sigana logis ngagunakeun éta pikeun méré tag gambar dina Docker Registry.

Nanging, tagging ku Git commit gaduh kalemahan anu sami sareng tagging ku cabang Git atanapi tag Git:

  • Komitmen kosong tiasa didamel anu henteu ngarobih file naon waé, tapi tag Docker gambar bakal dirobih.
  • Komitmen gabungan tiasa didamel anu henteu ngarobih file, tapi tag Docker gambar bakal dirobih.
  • Komitmen tiasa dilakukeun anu ngarobih file dina Git anu henteu diimpor kana gambar, sareng tag Docker gambarna bakal dirobih deui.

Tagging ngaran cabang Git teu ngagambarkeun versi gambar

Aya deui masalah anu aya hubunganana sareng strategi tagging pikeun cabang Git.

Tagging ku ngaran cabang tiasa dianggo salami komitmen dina cabang éta dikumpulkeun sacara berurutan dina urutan kronologis.

Upami dina skéma ayeuna pangguna ngamimitian ngawangun deui komitmen lami anu aya hubunganana sareng cabang anu tangtu, maka werf bakal nyerat deui gambar nganggo tag Docker anu saluyu sareng versi gambar anu nembé diwangun pikeun komitmen lami. Deployments ngagunakeun tag ieu ti ayeuna ngajalankeun résiko narik versi béda tina gambar nalika dibalikan deui pods, salaku hasilna aplikasi urang bakal leungit sambungan jeung sistem CI sarta jadi desynchronized.

Salaku tambahan, kalayan ngadorong berturut-turut kana hiji cabang kalayan waktos anu pondok antara aranjeunna, komitmen anu lami tiasa disusun langkung lami tibatan anu langkung énggal: versi gambar anu lami bakal nimpa anu énggal nganggo tag cabang Git. Masalah sapertos kitu tiasa direngsekeun ku sistem CI / CD (contona, dina GitLab CI saluran pipa anu terakhir diluncurkeun pikeun séri komitmen). Nanging, henteu sadayana sistem ngadukung ieu sareng kedah aya cara anu langkung dipercaya pikeun nyegah masalah dasar sapertos kitu.

Naon tagging dumasar eusi?

Janten, naon tagging dumasar eusi - tagging gambar ku eusi.

Pikeun nyiptakeun tag Docker, sanés primitif Git (cabang Git, tag Git ...) anu dianggo, tapi checksum anu aya hubunganana sareng:

  • eusi gambar. Tag ID gambar ngagambarkeun eusina. Nalika ngawangun versi anyar, identifier ieu moal robih upami file dina gambar henteu robih;
  • sajarah nyieun gambar ieu di Git. Gambar pakait sareng cabang Git béda jeung sajarah ngawangun béda via werf bakal boga tag ID béda.

Tag identifier sapertos kitu disebut tanda tangan panggung gambar.

Unggal gambar diwangun ku sakumpulan tahapan: from, before-install, git-archive, install, imports-after-install, before-setup... git-latest-patch jsb. Unggal tahap boga identifier nu ngagambarkeun eusina - tanda tangan panggung (tanda tangan panggung).

Gambar ahir, anu diwangun ku tahapan ieu, ditandaan ku anu disebut tanda tangan tina set tahap ieu - tahapan tanda tangan, - nu generalizing pikeun sakabéh tahapan gambar.

Pikeun unggal gambar tina konfigurasi werf.yaml dina kasus umum, bakal aya tanda tangan sorangan sareng, sasuai, tag Docker.

Tanda tangan panggung ngarengsekeun sadaya masalah ieu:

  • Tahan ka kosong commits Git.
  • Tahan ka Git komitmen yén ngarobih file anu henteu relevan pikeun gambar.
  • Teu ngakibatkeun masalah overhauling versi ayeuna gambar nalika dibalikan deui ngawangun pikeun Git heubeul commits sahiji cabang.

Ieu ayeuna mangrupikeun strategi tagging anu disarankeun sareng mangrupikeun standar dina werf pikeun sadaya sistem CI.

Kumaha ngaktipkeun sareng dianggo dina werf

Paréntah ayeuna gaduh pilihan anu cocog werf publish: --tag-by-stages-signature=true|false

Dina sistem CI, strategi tagging ditangtukeun ku paréntah werf ci-env. Saméméhna, parameter ditetepkeun pikeun éta werf ci-env --tagging-strategy=tag-or-branch. Ayeuna, lamun nangtukeun werf ci-env --tagging-strategy=stages-signature atawa teu nangtukeun pilihan ieu, werf bakal ngagunakeun strategi méré tag sacara standar stages-signature. Tim werf ci-env bakal otomatis nyetel umbul diperlukeun pikeun paréntah werf build-and-publish (atawa werf publish), janten teu aya pilihan tambahan anu kedah disaluyukeun pikeun paréntah ieu.

Contona, paréntah:

werf publish --stages-storage :local --images-repo registry.hello.com/web/core/system --tag-by-stages-signature

...bisa nyieun gambar di handap ieu:

  • registry.hello.com/web/core/system/backend:4ef339f84ca22247f01fb335bb19f46c4434014d8daa3d5d6f0e386d
  • registry.hello.com/web/core/system/frontend:f44206457e0a4c8a54655543f749799d10a9fe945896dab1c16996c6

Ieu téh 4ef339f84ca22247f01fb335bb19f46c4434014d8daa3d5d6f0e386d mangrupa tanda tangan tina tahapan gambar backendjeung f44206457e0a4c8a54655543f749799d10a9fe945896dab1c16996c6 - tanda tangan tahapan gambar frontend.

Lamun ngagunakeun fungsi husus werf_container_image и werf_container_env Teu perlu ngarobah nanaon dina template Helm: fungsi ieu bakal otomatis ngahasilkeun ngaran gambar bener.

Conto konfigurasi dina sistem CI:

type multiwerf && source <(multiwerf use 1.1 beta)
type werf && source <(werf ci-env gitlab)
werf build-and-publish|deploy

Langkung seueur inpormasi ngeunaan konfigurasi sayogi dina dokuméntasi:

dina total

  • Pilihan anyar werf publish --tag-by-stages-signature=true|false.
  • Nilai pilihan anyar werf ci-env --tagging-strategy=stages-signature|tag-or-branch (upami teu dieusian, standarna bakal stages-signature).
  • Upami anjeun saacanna nganggo pilihan tagging pikeun Git commits (WERF_TAG_GIT_COMMIT atawa pilihan werf publish --tag-git-commit COMMIT), teras pastikeun pikeun pindah ka strategi méré tag tahapan-tanda tangan.
  • Éta langkung saé pikeun langsung ngalihkeun proyék énggal kana skéma tagging énggal.
  • Nalika mindahkeun kana werf 1.1, disarankeun pikeun ngalihkeun proyék-proyék lami ka skéma tagging énggal, tapi anu lami. tag-atawa-cabang masih didukung.

Tagging dumasar kana eusi ngarengsekeun sadaya masalah anu aya dina tulisan:

  • Résistansi ngaran tag Docker pikeun komitmen Git kosong.
  • Daya tahan nami tag Docker ka Git komitmen yén ngarobih file anu teu aya hubunganana sareng gambar.
  • Teu ngakibatkeun masalah overhauling versi ayeuna gambar nalika dibalikan deui ngawangun pikeun Git heubeul commits pikeun cabang Git.

Gunakeun! Sarta ulah poho pikeun didatangan kami di GitHubpikeun nyieun hiji masalah atawa manggihan nu geus aya, tambahkeun hiji tambah, nyieun PR atawa ngan lalajo ngembangkeun proyék.

PS

Baca ogé dina blog urang:

sumber: www.habr.com

Tambahkeun komentar