Implementasi Penyebaran Terus-terusan ing platform pelanggan

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) ΠΈΠ»ΠΈ доставки ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠ°:

  1. Kepiye proses iki diwiwiti?
  2. sinkronisasi karo repositori Git pelanggan,
  3. perakitan backend lan frontend,
  4. panyebaran aplikasi otomatis ing lingkungan tes,
  5. penyebaran otomatis menyang Prod.

Kita bakal nuduhake rincian persiyapan ing dalan.

Implementasi Penyebaran Terus-terusan ing platform pelanggan

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.

Implementasi Penyebaran Terus-terusan ing platform 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.

Tutorial nulis skrip YAML kanggo mbangun ing GitLab.

GitLab Runner Π·Π°Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΊΠΎΠ΄ ΠΈΠ· Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ рСпозитория, ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ сборки Java-прилоТСния собраСт ΠΈ отправляСт Π΅Π³ΠΎ Π² Docker registry. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ собираСм Π±Π΅ΠΊΠ΅Π½Π΄ ΠΈ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Docker-ΠΎΠ±Ρ€Π°Π·Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ складываСм Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π½Π° сторонС Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠ°. Для управлСния Doker-ΠΎΠ±Ρ€Π°Π·Π°ΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Plugin Gradle.

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 Update Helm. Если Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ ΠΏΠΎ ΠΏΠ»Π°Π½Ρƒ, Ρ‚ΠΎ Helm автоматичСски ΠΈ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ всС свои измСнСния. Π•Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

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: Spring Cloud Kubernetes. Nalika proyek kasebut aktif berkembang lan ganti kanthi radikal, kita ora bisa nggunakake ing produksi. Nanging kita aktif ngawasi kondisi kasebut lan digunakake ing konfigurasi DEV. Sanalika stabil, kita bakal ngalih saka nggunakake variabel lingkungan.

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.

Implementasi Penyebaran Terus-terusan ing platform pelanggan

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

Add a comment