Tagging adhedhasar konten ing tukang werf: kenapa lan kepiye cara kerjane?

Tagging adhedhasar konten ing tukang werf: kenapa lan kepiye cara kerjane?

werf minangka sarana open source GitOps CLI kanggo mbangun lan ngirim aplikasi menyang Kubernetes. ING release v1.1 fitur anyar iki ngenalaken ing Penagih gambar: tagging gambar dening isi utawa tagging adhedhasar isi. Nganti saiki, skema tagging khas ing werf melu menehi tag gambar Docker kanthi tag Git, cabang Git utawa komitmen Git. Nanging kabeh skema kasebut duwe kekurangan sing ditanggulangi kanthi strategi menehi tag anyar. Rincian babagan iki lan kenapa apik banget ana ing ngisor iki.

Muter sakumpulan layanan mikro saka siji gudang Git

Kahanan asring kedadeyan nalika aplikasi dipΓ©rang dadi luwih utawa kurang layanan mandiri. Rilis layanan kasebut bisa kedadeyan kanthi mandiri: siji utawa luwih layanan bisa diluncurake sekaligus, dene liyane kudu terus kerja tanpa owah-owahan. Nanging saka sudut pandang panyimpenan kode lan manajemen proyek, luwih trep kanggo nyimpen layanan aplikasi kasebut ing siji gudang.

Ana kahanan nalika layanan pancen independen lan ora ana gandhengane karo aplikasi siji. Ing kasus iki, bakal ana ing proyek sing kapisah lan rilis bakal ditindakake liwat proses CI / CD sing kapisah ing saben proyek kasebut.

Nanging, ing kasunyatan, pangembang asring pamisah aplikasi siji menyang sawetara microservices, nanging nggawe repositori kapisah lan project kanggo saben ... punika overkill cetha. Kahanan iki sing bakal dibahas luwih lanjut: sawetara layanan mikro kasebut dumunung ing repositori proyek siji lan rilis dumadi liwat siji proses ing CI / CD.

Tagging dening cabang Git lan tag Git

Contone, strategi menehi tag sing paling umum digunakake - tag-utawa-cabang. Kanggo cabang Git, gambar diwenehi jeneng cabang, kanggo siji cabang saben wektu mung ana siji gambar sing diterbitake kanthi jeneng cabang kasebut. Kanggo tag Git, gambar diwenehi tag miturut jeneng tag.

Nalika tag Git anyar digawe-contone, nalika versi anyar dirilis-tag Docker anyar bakal digawe kanggo kabeh gambar proyek ing 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

Jeneng gambar anyar iki diterusake liwat template Helm menyang konfigurasi Kubernetes. Nalika miwiti panyebaran karo printah werf deploy lapangan lagi dianyari image ing sumber daya Kubernetes manifests lan miwiti maneh sumber daya sing cocog amarga jeneng gambar diganti.

masalah: ing kasus nalika, nyatane, isi gambar ora diganti wiwit rollout sadurungΓ© (tag Git), nanging mung tag Docker, iki kedadeyan. keluwihane miwiti maneh aplikasi iki lan, miturut, sawetara downtime bisa. Sanajan ora ana alesan nyata kanggo miwiti maneh iki.

AkibatΓ©, kanthi skema tagging saiki, perlu kanggo pager sawetara repositori Git sing kapisah lan masalah muncul kanggo ngatur peluncuran sawetara repositori kasebut. UmumΓ©, skema kasebut dadi overloaded lan rumit. Iku luwih apik kanggo nggabungake akeh layanan menyang repositori siji lan nggawe tag Docker supaya ora ana maneh sing ora perlu.

Tagging dening Git commit

werf uga duwe strategi menehi tag sing digandhengake karo komitmen Git.

Git-commit minangka pengenal kanggo isi repositori Git lan gumantung saka riwayat panyuntingan file ing gudang Git, mula logis digunakake kanggo menehi tag gambar ing Docker Registry.

Nanging, menehi tag dening Git commit duwe kekurangan sing padha karo menehi tag dening cabang Git utawa tag Git:

  • Komit kosong bisa digawe sing ora ngganti file, nanging tag Docker gambar bakal diganti.
  • Komit gabungan bisa digawe sing ora ngganti file, nanging tag Docker gambar bakal diganti.
  • Komit bisa digawe sing ngganti file kasebut ing Git sing ora diimpor menyang gambar, lan tag Docker saka gambar kasebut bakal diganti maneh.

Tagging jeneng cabang Git ora nggambarake versi gambar

Ana masalah liyane sing ana gandhengane karo strategi menehi tag kanggo cabang Git.

Tagging miturut jeneng cabang bisa digunakake anggere komitmen ing cabang kasebut diklumpukake kanthi urutan kronologis.

Yen ing skema saiki pangguna wiwit mbangun maneh komitmen lawas sing ana gandhengane karo cabang tartamtu, banjur werf bakal nulis ulang gambar kasebut nggunakake tag Docker sing cocog karo versi gambar sing mentas dibangun kanggo komitmen lawas. Panyebaran nggunakake tag iki wiwit saiki duwe risiko narik versi gambar sing beda nalika miwiti maneh pods, minangka asil saka aplikasi kita bakal kelangan sambungan karo sistem CI lan dadi desynchronized.

Kajaba iku, kanthi push berturut-turut menyang siji cabang kanthi wektu sing cendhak ing antarane, komit lawas bisa dikompilasi luwih cepet tinimbang sing luwih anyar: versi lawas saka gambar bakal nimpa sing anyar nggunakake tag cabang Git. Masalah kasebut bisa ditanggulangi kanthi sistem CI / CD (contone, ing GitLab CI, saluran pipa sing terakhir diluncurake kanggo sawetara komitmen). Nanging, ora kabeh sistem ndhukung iki lan kudu ana cara sing luwih dipercaya kanggo nyegah masalah dhasar kasebut.

Apa tagging adhedhasar konten?

Dadi, apa tagging adhedhasar isi - menehi tag gambar miturut isi.

Kanggo nggawe tag Docker, dudu primitif Git (cabang Git, tag Git ...) sing digunakake, nanging checksum sing ana gandhengane karo:

  • isi gambar. Tag ID gambar nggambarake isine. Nalika mbangun versi anyar, pengenal iki ora bakal diganti yen file ing gambar ora diganti;
  • sejarah nggawe gambar iki ing Git. Gambar sing ana gandhengane karo cabang Git sing beda lan riwayat mbangun sing beda liwat werf bakal duwe tag ID sing beda.

Tag pengenal kuwi sing diarani teken panggung gambar.

Saben gambar kasusun saka sawetara tahapan: from, before-install, git-archive, install, imports-after-install, before-setup... git-latest-patch lsp. Saben tataran nduweni pengenal sing nggambarake isine βˆ’ teken panggung (tanda tangan panggung).

Gambar pungkasan, sing dumadi saka tahapan kasebut, diwenehi tandha tandha saka set tahap kasebut - tanda tangan tahapan, - kang generalizing kanggo kabeh orane tumrap sekolah saka gambar.

Kanggo saben gambar saka konfigurasi werf.yaml ing kasus umum, bakal ana teken dhewe lan, miturut, tag Docker.

Tandha panggung ngrampungake kabeh masalah kasebut:

  • Tahan kanggo ngosongake komit Git.
  • Resistant to Git commits sing ngganti file sing ora cocog karo gambar.
  • Ora mimpin kanggo masalah mrikso versi saiki saka gambar nalika miwiti maneh mbangun kanggo Git lawas commits saka cabang.

Iki saiki dadi strategi menehi tag sing disaranake lan minangka standar ing werf kanggo kabeh sistem CI.

Carane ngaktifake lan nggunakake ing werf

Printah saiki duwe pilihan sing cocog werf publish: --tag-by-stages-signature=true|false

Ing sistem CI, strategi menehi tag ditemtokake dening printah werf ci-env. Sadurunge, parameter kasebut ditetepake werf ci-env --tagging-strategy=tag-or-branch. Saiki, yen sampeyan nemtokake werf ci-env --tagging-strategy=stages-signature utawa ora nemtokake pilihan iki, werf bakal nggunakake strategi menehi tag minangka standar stages-signature. tim werf ci-env bakal kanthi otomatis nyetel panji perlu kanggo printah werf build-and-publish (utawa werf publish), dadi ora ana opsi tambahan sing kudu ditemtokake kanggo printah kasebut.

Contone, printah:

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

...bisa nggawe gambar ing ngisor iki:

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

iku 4ef339f84ca22247f01fb335bb19f46c4434014d8daa3d5d6f0e386d minangka teken saka tahapan gambar backendlan f44206457e0a4c8a54655543f749799d10a9fe945896dab1c16996c6 - teken saka tataran gambar frontend.

Nalika nggunakake fungsi khusus werf_container_image ΠΈ werf_container_env Ora perlu ngganti apa wae ing cithakan Helm: fungsi kasebut bakal ngasilake jeneng gambar sing bener.

Conto konfigurasi ing sistem CI:

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

Informasi liyane babagan konfigurasi kasedhiya ing dokumentasi:

Total

  • Pilihan anyar werf publish --tag-by-stages-signature=true|false.
  • Nilai pilihan anyar werf ci-env --tagging-strategy=stages-signature|tag-or-branch (yen ora ditemtokake, standar bakal dadi stages-signature).
  • Yen sampeyan sadurunge nggunakake opsi tagging kanggo Git commits (WERF_TAG_GIT_COMMIT utawa pilihan werf publish --tag-git-commit COMMIT), banjur dadi manawa kanggo ngalih menyang strategi menehi tag tataran-tandha.
  • Luwih becik ngalih proyek anyar menyang skema tagging anyar.
  • Nalika mindhah menyang werf 1.1, disaranake ngalih proyek lawas menyang skema tagging anyar, nanging sing lawas tag-utawa-cabang isih didhukung.

Tagging adhedhasar konten ngrampungake kabeh masalah sing ana ing artikel kasebut:

  • Resistance jeneng tag Docker kanggo ngosongake Git.
  • Ketahanan jeneng tag Docker menyang Git nggawe sing ngganti file sing ora relevan karo gambar kasebut.
  • Ora mimpin kanggo masalah mrikso versi saiki saka gambar nalika miwiti maneh mbangun kanggo Git lawas commits kanggo cabang Git.

Nggunakake! Lan aja lali ngunjungi kita ing GitHubkanggo nggawe masalah utawa golek sing wis ana, nambah plus, nggawe PR utawa mung nonton pembangunan proyek.

PS

Waca uga ing blog kita:

Source: www.habr.com

Add a comment