Ang among pagpatuman sa Padayon nga Pag-deploy sa plataporma sa kustomer

Kami sa True Engineering nagbutang usa ka proseso alang sa padayon nga paghatud sa mga update sa mga server sa kustomer ug gusto nga ipaambit kini nga kasinatian.

Sa pagsugod, naghimo kami og online nga sistema para sa kustomer ug gi-deploy kini sa among kaugalingong Kubernetes cluster. Karon ang among high-load nga solusyon mibalhin ngadto sa plataporma sa kustomer, diin kami nag-set up sa usa ka bug-os nga awtomatik nga Padayon nga Deployment nga proseso. Salamat niini, gipadali namon ang oras-sa-merkado - ang paghatud sa mga pagbag-o sa palibot sa produkto.

Niini nga artikulo maghisgot kami bahin sa tanan nga mga yugto sa proseso sa Padayon nga Pag-deploy (CD) o paghatud sa mga update sa platform sa kustomer:

  1. Giunsa kini nga proseso magsugod?
  2. pag-synchronize sa Git repository sa kustomer,
  3. asembliya sa backend ug frontend,
  4. awtomatikong pag-deploy sa aplikasyon sa usa ka palibot sa pagsulay,
  5. awtomatik nga pagpadala sa Prod.

Atong ipaambit ang mga detalye sa pag-setup sa dalan.

Ang among pagpatuman sa Padayon nga Pag-deploy sa plataporma sa kustomer

1. Pagsugod sa CD

Ang padayon nga Deployment nagsugod sa developer nga nagduso sa mga pagbag-o sa release branch sa among Git repository.

Ang among aplikasyon nagdagan sa usa ka microservice nga arkitektura ug ang tanan nga mga sangkap niini gitipigan sa usa ka repositoryo. Salamat niini, ang tanan nga mga microservice gikolekta ug gi-install, bisan kung ang usa niini nausab.

Nag-organisar kami og trabaho pinaagi sa usa ka repository tungod sa daghang mga hinungdan:

  • Kasayon ​​sa pag-uswag - ang aplikasyon aktibo nga nag-uswag, aron mahimo nimo nga magamit ang tanan nga code sa usa ka higayon.
  • Usa ka pipeline sa CI/CD nga naggarantiya nga ang aplikasyon isip usa ka sistema makapasar sa tanan nga mga pagsulay ug ipadala sa palibot sa produksiyon sa kustomer.
  • Atong wagtangon ang kalibog sa mga bersyon - dili kinahanglan nga magtipig ug mapa sa mga bersyon sa microservice ug ihulagway ang configuration niini alang sa matag microservice sa Helm scripts.

2. Pag-synchronize sa Git repository sa source code sa kustomer

Ang mga pagbag-o nga gihimo awtomatik nga gi-synchronize sa Git repository sa kustomer. Didto ang aplikasyon nga asembliya gi-configure, nga gilusad pagkahuman sa pag-update sa sanga, ug pag-deploy sa pagpadayon. Ang duha ka proseso naggikan sa ilang palibot gikan sa usa ka Git repository.

Dili kami makatrabaho direkta sa repository sa kustomer tungod kay kinahanglan namon ang among kaugalingon nga palibot alang sa pag-uswag ug pagsulay. Gigamit namo ang among Git repository alang niini nga mga katuyoan - kini gi-synchronize sa ilang Git repository. Sa diha nga ang usa ka developer mag-post og mga kausaban sa angay nga sanga sa among repository, ang GitLab diha-diha dayon moduso niini nga mga kausaban ngadto sa kustomer.

Ang among pagpatuman sa Padayon nga Pag-deploy sa plataporma sa kustomer

Human niini kinahanglan nimo nga buhaton ang asembliya. Naglangkob kini sa daghang mga yugto: backend ug frontend assembly, pagsulay ug paghatud sa produksiyon.

3. Pag-assemble sa backend ug frontend

Ang pagtukod sa backend ug frontend duha ka managsama nga buluhaton nga gihimo sa sistema sa GitLab Runner. Ang orihinal nga configuration sa assembly niini nahimutang sa samang repository.

Tutorial sa pagsulat sa YAML script para sa pagtukod sa GitLab.

Gikuha sa GitLab Runner ang code gikan sa gikinahanglan nga repository, gi-assemble kini gamit ang Java application build command ug gipadala kini sa Docker registry. Dinhi among gitigum ang backend ug frontend, pagkuha og mga imahe sa Docker, nga among gibutang sa usa ka repository sa kilid sa kustomer. Aron madumala ang mga imahe sa Docker nga among gigamit Gradle nga plugin.

Gi-synchronize namon ang mga bersyon sa among mga imahe sa bersyon sa pagpagawas nga ipatik sa Docker. Alang sa hapsay nga operasyon naghimo kami daghang mga pagbag-o:

1. Ang mga sudlanan wala matukod pag-usab tali sa pagsulay nga palibot ug sa produksyon nga palibot. Naghimo kami og mga parametrization aron ang parehas nga sudlanan magamit sa tanan nga mga setting, mga variable sa palibot ug mga serbisyo pareho sa pagsulay nga palibot ug sa produksiyon nga wala’y pagtukod pag-usab.

2. Aron ma-update ang usa ka aplikasyon pinaagi sa Helm, kinahanglan nimong ipiho ang bersyon niini. Gitukod namo ang backend, frontend ug gi-update ang aplikasyon - tulo kini ka lain-laing mga buluhaton, busa importante nga gamiton ang parehas nga bersyon sa aplikasyon bisan asa. Alang niini nga buluhaton, gigamit namo ang datos gikan sa kasaysayan sa Git, tungod kay ang among K8S cluster configuration ug mga aplikasyon anaa sa samang Git repository.

Nakuha namon ang bersyon sa aplikasyon gikan sa mga resulta sa pagpatuman sa command
git describe --tags --abbrev=7.

4. Awtomatikong pag-deploy sa tanang kausaban sa test environment (UAT)

Ang sunod nga lakang sa kini nga script sa pagtukod mao ang awtomatikong pag-update sa K8S cluster. Nahitabo kini kung ang tibuuk nga aplikasyon natukod ug ang tanan nga mga artifact gipatik sa Docker Registry. Pagkahuman niini, magsugod ang pag-update sa palibot sa pagsulay.

Ang pag-update sa cluster nagsugod sa paggamit Update sa Helm. Kung, ingon usa ka sangputanan, adunay usa ka butang nga wala matuman sa plano, awtomatiko ug independente nga ibalik sa Helm ang tanan nga mga pagbag-o niini. Ang iyang trabaho dili kinahanglan nga kontrolon.

Naghatag kami sa K8S cluster configuration kauban ang asembliya. Busa, ang sunod nga lakang mao ang pag-update niini: configMaps, deployment, serbisyo, sekreto ug bisan unsa nga K8S configurations nga among giusab.

Ang Helm dayon nagpadagan sa usa ka RollOut nga update sa aplikasyon mismo sa palibot sa pagsulay. Sa wala pa ang aplikasyon ipakatap sa produksiyon. Gihimo kini aron ang mga tiggamit mahimong mano-mano nga masulayan ang mga bahin sa negosyo nga among gibutang sa pagsulay nga palibot.

5. Awtomatikong pagdeploy sa tanang kausaban sa Prod

Aron ma-deploy ang usa ka update sa palibot sa produksiyon, kinahanglan nimo nga i-klik ang usa ka buton sa GitLab - ug ang mga sulud ipadala dayon sa palibot sa produksiyon.

Ang parehas nga aplikasyon mahimong molihok sa lainlaing mga palibot-pagsulay ug produksiyon-nga wala’y pagtukod pag-usab. Gigamit namon ang parehas nga mga artifact nga wala’y pagbag-o sa bisan unsang butang sa aplikasyon, ug among gibutang ang mga parameter sa gawas.

Ang flexible parameterization sa mga setting sa aplikasyon nagdepende sa palibot diin ang aplikasyon ipatuman. Gibalhin namo ang tanang setting sa palibot sa gawas: ang tanan gi-parameter pinaagi sa K8S configuration ug Helm parameters. Kung ang Helm nag-deploy sa usa ka asembliya sa palibot sa pagsulay, ang mga setting sa pagsulay gipadapat niini, ug ang mga setting sa produkto gipadapat sa palibot sa produksiyon.

Ang labing lisud nga butang mao ang pag-parameter sa tanan nga gigamit nga mga serbisyo ug mga variable nga nagdepende sa kalikopan, ug gihubad kini sa mga variable sa palibot ug paghulagway-mga pag-configure sa mga parameter sa palibot alang sa Helm.

Ang mga setting sa aplikasyon naggamit sa mga variable sa palibot. Ang ilang mga kantidad gibutang sa mga sudlanan gamit ang K8S configmap, nga gi-template gamit ang Go templates. Pananglitan, ang paghimo sa usa ka variable sa palibot sa ngalan sa domain mahimo nga sama niini:

APP_EXTERNAL_DOMAIN: {{ (pluck .Values.global.env .Values.app.properties.app_external_domain | first) }}

.Values.global.env - kini nga variable nagtipig sa ngalan sa palibot (prod, stage, UAT).
.Values.app.properties.app_external_domain – sa niini nga variable atong gibutang ang gitinguha nga domain sa .Values.yaml file

Kung nag-update sa usa ka aplikasyon, ang Helm nagmugna usa ka configmap.yaml file gikan sa mga templates ug gipuno ang APP_EXTERNAL_DOMAIN nga kantidad sa gusto nga kantidad depende sa palibot diin nagsugod ang pag-update sa aplikasyon. Kini nga variable gipahimutang na sa sudlanan. Mahimo kini ma-access gikan sa aplikasyon, busa ang matag palibot sa aplikasyon adunay lahi nga kantidad alang niini nga variable.

Bag-ohay lang, ang suporta sa K8S nagpakita sa Spring Cloud, lakip ang pagtrabaho sa configMaps: Spring Cloud Kubernetes. Samtang ang proyekto aktibo nga nag-uswag ug nagbag-o nga radikal, dili naton kini magamit sa produksiyon. Apan aktibo namon nga gibantayan ang kahimtang niini ug gigamit kini sa mga pag-configure sa DEV. Sa diha nga kini mo-stabilize, kita mobalhin gikan sa paggamit sa environment variables ngadto niini.

Total

Mao nga, ang Padayon nga Pag-deploy gi-configure ug nagtrabaho. Ang tanan nga mga update mahitabo sa usa ka keystroke. Ang paghatud sa mga pagbag-o sa palibot sa produkto awtomatiko. Ug, hinungdanon, ang mga pag-update dili makapugong sa sistema.

Ang among pagpatuman sa Padayon nga Pag-deploy sa plataporma sa kustomer

Mga plano sa umaabot: awtomatikong paglalin sa database

Naghunahuna kami bahin sa pag-upgrade sa database ug ang posibilidad nga ibalik kini nga mga pagbag-o. Pagkahuman, duha ka lainlaing bersyon sa aplikasyon ang nagdagan sa parehas nga oras: ang daan nagdagan, ug ang bag-o nahuman na. Ug among i-off ang daan kung sigurado kami nga ang bag-ong bersyon molihok. Ang paglalin sa database kinahanglan nga magtugot kanimo sa pagtrabaho sa duha nga mga bersyon sa aplikasyon.

Busa, dili lang nato usbon ang ngalan sa kolum o ubang datos. Apan makahimo kita og bag-ong column, kopyahon ang datos gikan sa daan nga column ngadto niini ug isulat ang mga trigger nga, sa dihang mag-update sa datos, dungan nga kopyahon ug i-update kini sa laing column. Ug pagkahuman sa malampuson nga pag-deploy sa bag-ong bersyon sa aplikasyon, pagkahuman sa panahon sa suporta sa paglansad sa post, mahimo namon nga mapapas ang daan nga kolum ug ang gatilyo nga wala na kinahanglana.

Kung ang bag-ong bersyon sa aplikasyon dili molihok sa husto, mahimo namong i-roll balik ang miaging bersyon, lakip ang miaging bersyon sa database. Sa laktud, ang among mga pagbag-o magtugot kanimo sa pagtrabaho nga dungan sa daghang mga bersyon sa aplikasyon.

Nagplano kami nga i-automate ang paglalin sa database pinaagi sa trabaho sa K8S, i-integrate kini sa proseso sa CD. Ug among ipaambit kini nga kasinatian sa HabrΓ©.

Source: www.habr.com

Idugang sa usa ka comment