Kita ing True Engineering wis nyiyapake proses kanggo ngirim nganyari terus menyang server pelanggan lan pengin nuduhake pengalaman iki.
Kanggo miwiti, kita ngembangake sistem online kanggo pelanggan lan nyebarake ing kluster Kubernetes dhewe. Saiki solusi beban dhuwur wis dipindhah menyang platform pelanggan, sing wis nyiyapake proses Penyebaran Terus-terusan kanthi otomatis. Thanks kanggo iki, kita nyepetake wektu-kanggo-pasar - pangiriman owah-owahan ing lingkungan produk.
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΊΠ°ΠΆΠ΅ΠΌ ΠΎΠ±ΠΎ Π²ΡΠ΅Ρ ΡΡΠ°ΠΏΠ°Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ° Continuous Deployment (CD) ΠΈΠ»ΠΈ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Π·Π°ΠΊΠ°Π·ΡΠΈΠΊΠ°:
- Kepiye proses iki diwiwiti?
- sinkronisasi karo repositori Git pelanggan,
- perakitan backend lan frontend,
- panyebaran aplikasi otomatis ing lingkungan tes,
- penyebaran otomatis menyang Prod.
Kita bakal nuduhake rincian persiyapan ing dalan.
1. Miwiti CD
Continuous Deployment Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π²ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΠ΅Π»ΠΈΠ·Π½ΡΡ Π²Π΅ΡΠΊΡ Π½Π°ΡΠ΅Π³ΠΎ Git-ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ.
Aplikasi kita nganggo arsitektur layanan mikro lan kabeh komponen disimpen ing siji gudang. Thanks kanggo iki, kabeh layanan mikro diklumpukake lan diinstal, sanajan salah sijine wis diganti.
Kita ngatur karya liwat siji repositori amarga sawetara alasan:
- Gampang pangembangan - aplikasi kasebut aktif berkembang, supaya sampeyan bisa nggarap kabeh kode bebarengan.
- ΠΠ΄ΠΈΠ½ΡΠΉ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ CI/CD, ΠΊΠΎΡΠΎΡΡΠΉ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ Π²ΡΠ΅ ΡΠ΅ΡΡΡ ΠΈ Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² prod-ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ°Π·ΡΠΈΠΊΠ°.
- Kita ngilangi kebingungan ing versi - kita ora kudu nyimpen peta versi microservice lan njlèntrèhaké konfigurasi kanggo saben microservice ing skrip Helm.
2. Sinkronisasi karo repositori Git kode sumber pelanggan
Π‘Π΄Π΅Π»Π°Π½Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΡΡΡΡ Ρ Git-ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅ΠΌ Π·Π°ΠΊΠ°Π·ΡΠΈΠΊΠ°. Π’Π°ΠΌ Π½Π°ΡΡΡΠΎΠ΅Π½Π° ΡΠ±ΠΎΡΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π²Π΅ΡΠΊΠΈ, ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΉΠΌΠ΅Π½Ρ Π² ΠΏΡΠΎΠ΄. ΠΠ±Π° ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡ Π² ΠΈΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ ΠΈΠ· Git-ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ.
Kita ora bisa nggarap gudang pelanggan kanthi langsung amarga kita butuh lingkungan dhewe kanggo pangembangan lan tes. Kita nggunakake repositori Git kanggo tujuan kasebut - disinkronake karo repositori Git. Sanalika pangembang ngirim owah-owahan menyang cabang repositori sing cocog, GitLab langsung nyurung owah-owahan kasebut menyang pelanggan.
Sawise iki sampeyan kudu nindakake perakitan. Iku kasusun saka sawetara orane tumrap sekolah: backend lan frontend perakitan, testing lan pangiriman kanggo produksi.
3. Ngrakit backend lan frontend
Mbangun backend lan frontend minangka rong tugas paralel sing ditindakake ing sistem GitLab Runner. Konfigurasi perakitan asli dumunung ing repositori sing padha.
GitLab Runner Π·Π°Π±ΠΈΡΠ°Π΅Ρ ΠΊΠΎΠ΄ ΠΈΠ· Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ, ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ Java-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠΎΠ±ΡΠ°Π΅Ρ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π΅Π³ΠΎ Π² Docker registry. ΠΠ΄Π΅ΡΡ ΠΌΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌ Π±Π΅ΠΊΠ΅Π½Π΄ ΠΈ ΡΡΠΎΠ½ΡΠ΅Π½Π΄, ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Docker-ΠΎΠ±ΡΠ°Π·Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΠΌ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ Π·Π°ΠΊΠ°Π·ΡΠΈΠΊΠ°. ΠΠ»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Doker-ΠΎΠ±ΡΠ°Π·Π°ΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ
Kita nyinkronake versi gambar kita karo versi rilis sing bakal diterbitake ing Docker. Kanggo operasi lancar, kita wis nggawe sawetara pangaturan:
1. Wadhah ora dibangun maneh antarane lingkungan test lan lingkungan produksi. Kita nggawe parametrizasi supaya wadhah sing padha bisa digunakake karo kabeh setelan, variabel lingkungan lan layanan ing lingkungan tes lan ing produksi tanpa mbangun maneh.
2. Kanggo nganyari aplikasi liwat Helm, sampeyan kudu nemtokake versi. Kita mbangun backend, frontend lan nganyari aplikasi - iki telung tugas sing beda-beda, dadi penting kanggo nggunakake versi aplikasi sing padha ing endi wae. Kanggo tugas iki, kita nggunakake data saka riwayat Git, amarga konfigurasi kluster K8S lan aplikasi ana ing gudang Git sing padha.
ΠΠ΅ΡΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΈΠ· ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
git describe --tags --abbrev=7
.
4. Penyebaran otomatis kabeh owah-owahan ing lingkungan tes (UAT)
Langkah sabanjure ing skrip mbangun iki yaiku nganyari kluster K8S kanthi otomatis. Iki kedadeyan yen kabeh aplikasi wis dibangun lan kabeh artefak wis diterbitake menyang Docker Registry. Sawise iki, nganyari lingkungan test diwiwiti.
Nganyari kluster wiwit digunakake
Kita nyedhiyakake konfigurasi kluster K8S bebarengan karo perakitan. Mula, langkah sabanjure yaiku nganyari: configMaps, penyebaran, layanan, rahasia lan konfigurasi K8S liyane sing wis diganti.
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Helm Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ RollOut ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΡΠ΅ΡΡΠΎΠ²ΠΎΠΉ ΡΡΠ΅Π΄Π΅. ΠΠΎ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΠΎ Π½Π° ΠΏΡΠΎΠ΄Π΅. ΠΡΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Π²ΡΡΡΠ½ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΈΠ»ΠΈ Π±ΠΈΠ·Π½Π΅Ρ-ΡΠΈΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Π²ΡΠ»ΠΎΠΆΠΈΠ»ΠΈ Π² ΡΠ΅ΡΡΠΎΠ²ΠΎΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅.
5. Penyebaran otomatis kabeh owah-owahan menyang Prod
Kanggo nyebarake nganyari menyang lingkungan produksi, sampeyan mung kudu ngeklik tombol siji ing GitLab - lan wadhah kasebut langsung dikirim menyang lingkungan produksi.
Aplikasi sing padha bisa digunakake ing macem-macem lingkungan-tes lan produksi-tanpa mbangun maneh. Kita nggunakake artefak padha tanpa ngganti apa-apa ing aplikasi, lan kita nyetel paramèter externally.
Parameterisasi fleksibel setelan aplikasi gumantung ing lingkungan ing ngendi aplikasi bakal dieksekusi. Kita wis mindhah kabeh setelan lingkungan externally: kabeh wis parameterized liwat konfigurasi K8S lan paramèter Helm. Nalika Helm nyebarake perakitan menyang lingkungan tes, setelan tes ditrapake, lan setelan produk ditrapake ing lingkungan produksi.
Wangsulan: Bab ingkang paling angel ana parameterize kabeh layanan digunakake lan variabel sing gumantung ing lingkungan, lan nerjemahake menyang variabel lingkungan lan gambaran-konfigurasi paramèter lingkungan kanggo Helm.
Setelan aplikasi nggunakake variabel lingkungan. Nilai kasebut disetel ing kontaner nggunakake configmap K8S, sing digawe template nggunakake template Go. Contone, nyetel variabel lingkungan menyang jeneng domain bisa ditindakake kaya iki:
APP_EXTERNAL_DOMAIN: {{ (pluck .Values.global.env .Values.app.properties.app_external_domain | first) }}
.Values.global.env β variabel iki nyimpen jeneng lingkungan (prod, panggung, UAT).
.Values.app.properties.app_external_domain β ing variabel iki kita nyetel domain sing dikarepake ing file .Values.yaml
ΠΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Helm Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΠ· ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΡΠ°ΠΉΠ»Π° configmap.yaml ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ APP_EXTERNAL_DOMAIN Π½ΡΠΆΠ½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΡΠ°ΡΡΡΠ΅Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΏΡΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠΆΠ΅ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅. ΠΠΎΡΡΡΠΏ ΠΊ Π½Π΅ΠΉ Π΅ΡΡΡ ΠΈΠ· ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠ°Π·Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ.
Relatif bubar, dhukungan K8S muncul ing Spring Cloud, kalebu nggarap configMaps:
Total
Dadi, Penyebaran Terus-terusan dikonfigurasi lan digunakake. Kabeh nganyari dumadi kanthi siji keystroke. Pangiriman owah-owahan menyang lingkungan produk kanthi otomatis. Lan, sing penting, nganyari ora mandhegake sistem kasebut.
Rencana mangsa ngarep: migrasi database otomatis
Kita mikir babagan nganyarke database lan kemungkinan nggulung maneh owah-owahan kasebut. Sawise kabeh, rong versi aplikasi sing beda-beda mlaku bebarengan: sing lawas mlaku, lan sing anyar munggah. Lan kita bakal mateni sing lawas mung yen kita yakin manawa versi anyar bisa digunakake. Migrasi basis data kudu ngidini sampeyan nggarap versi loro aplikasi kasebut.
Mulane, kita ora bisa mung ngganti jeneng kolom utawa data liyane. Nanging kita bisa nggawe kolom anyar, nyalin data saka kolom lawas menyang lan nulis pemicu sing, nalika nganyari data, bakal bebarengan nyalin lan nganyari ing kolom liyane. Lan sawise panyebaran sukses versi aplikasi anyar, sawise periode dhukungan pasca peluncuran, kita bakal bisa mbusak kolom lawas lan pemicu sing ora perlu.
Yen versi anyar saka aplikasi ora bisa digunakake kanthi bener, kita bisa muter maneh menyang versi sadurungΓ©, kalebu versi sadurungΓ© saka database. Ing cendhak, owah-owahan kita bakal ngidini sampeyan bisa bebarengan karo sawetara versi aplikasi.
Kita rencana kanggo ngotomatisasi migrasi database liwat proyek K8S, nggabungake menyang proses CD. Lan kita mesthi bakal nuduhake pengalaman iki ing HabrΓ©.
Source: www.habr.com