Nou nan True Engineering te mete kanpe yon pwosesis pou livrezon kontinyèl nan mizajou nan serveurs kliyan yo epi nou vle pataje eksperyans sa a.
Pou kòmanse, nou devlope yon sistèm sou entènèt pou kliyan an epi deplwaye li nan pwòp gwoup Kubernetes nou an. Koulye a, solisyon gwo chaj nou an te deplase nan platfòm kliyan an, pou ki nou te mete kanpe yon pwosesis deplwaman kontinyèl totalman otomatik. Mèsi a sa a, nou akselere tan-a-mache - livrezon an nan chanjman nan anviwònman an pwodwi.
Nan atik sa a nou pral pale sou tout etap yo nan pwosesis deplwaman kontinyèl (CD) oswa livrezon mizajou nan platfòm kliyan an:
- Ki jan pwosesis sa a kòmanse?
- senkronizasyon ak depo Git kliyan an,
- asanble backend ak frontend,
- deplwaman aplikasyon otomatik nan yon anviwònman tès,
- deplwaman otomatik nan Prod.
Nou pral pataje detay konfigirasyon yo sou wout la.

1. Kòmanse CD
Deplwaman kontinyèl kòmanse ak pwomotè a pouse chanjman nan branch lage nan depo Git nou an.
Aplikasyon nou an kouri sou yon achitekti mikwosèvis ak tout eleman li yo estoke nan yon sèl depo. Mèsi a sa a, tout mikwosèvis yo kolekte epi enstale, menm si youn nan yo te chanje.
Nou òganize travay atravè yon sèl depo pou plizyè rezon:
- Fasilite nan devlopman - aplikasyon an ap devlope aktivman, kidonk, ou ka travay ak tout kòd la nan yon fwa.
- Yon sèl CI/CD tiyo ki garanti ke aplikasyon an kòm yon sistèm sèl pase tout tès yo epi yo delivre nan anviwònman pwodiksyon kliyan an.
- Nou elimine konfizyon nan vèsyon yo - nou pa oblije sere yon kat vèsyon mikwosèvis yo epi dekri konfigirasyon li yo pou chak mikwosèvis nan scripts Helm.
2. Senkronizasyon ak depo Git nan kòd sous kliyan an
Chanjman yo fè yo otomatikman senkronize ak depo Git kliyan an. Gen asanble aplikasyon an configuré, ki lanse apre mete ajou branch lan, ak deplwaman nan kontinyasyon an. Tou de pwosesis yo soti nan anviwònman yo nan yon depo Git.
Nou pa ka travay avèk depo kliyan an dirèkteman paske nou bezwen pwòp anviwònman nou pou devlopman ak tès. Nou itilize depo Git nou an pou rezon sa yo - li senkronize ak depo Git yo. Le pli vit ke yon pwomotè afiche chanjman nan branch ki apwopriye nan depo nou an, GitLab imedyatman pouse chanjman sa yo nan kliyan an.

Apre sa ou bezwen fè asanble a. Li konsiste de plizyè etap: backend ak asanble frontend, tès ak livrezon nan pwodiksyon an.
3. Asanble backend la ak entèfas
Bati backend la ak entèfas se de travay paralèl ki fèt nan sistèm GitLab Runner la. Konfigirasyon asanble orijinal li sitiye nan menm depo a.
.
GitLab Runner pran kòd ki soti nan depo obligatwa a, rasanble li ak lòd pou konstwi aplikasyon Java a epi voye li nan rejis Docker. Isit la nou rasanble backend la ak entèfas, jwenn imaj Docker, ke nou mete nan yon depo sou bò kliyan an. Pou jere imaj Docker nou itilize .
Nou senkronize vèsyon yo nan imaj nou yo ak vèsyon an lage ki pral pibliye nan Docker. Pou yon bon operasyon nou te fè plizyè ajisteman:
1. Kontenè yo pa rebati ant anviwònman tès la ak anviwònman pwodiksyon an. Nou te fè paramètrizasyon pou menm veso a ka travay ak tout paramèt, varyab anviwònman ak sèvis tou de nan anviwònman tès la ak nan pwodiksyon san rebati.
2. Pou mete ajou yon aplikasyon atravè Helm, ou dwe presize vèsyon li an. Nou konstwi backend, frontend ak mete ajou aplikasyon an - sa yo se twa travay diferan, kidonk li enpòtan pou itilize menm vèsyon aplikasyon an toupatou. Pou travay sa a, nou itilize done ki soti nan istwa Git, depi konfigirasyon gwoup K8S nou an ak aplikasyon nou yo nan menm depo Git la.
Nou jwenn vèsyon aplikasyon an nan rezilta egzekisyon kòmand yo
git describe --tags --abbrev=7.
4. Otomatik deplwaman tout chanjman nan anviwònman tès la (UAT)
Pwochen etap la nan script bati sa a se otomatikman mete ajou gwoup K8S la. Sa rive depi tout aplikasyon an te bati epi tout zafè yo te pibliye nan Rejis Docker. Apre sa, aktyalizasyon anviwònman tès la kòmanse.
Aktyalizasyon gwoup la kòmanse itilize . Si, kòm yon rezilta, yon bagay pa t 'ale selon plan an, Helm pral otomatikman ak poukont yo retire tout chanjman li yo. Travay li pa bezwen kontwole.
Nou bay konfigirasyon gwoup K8S ansanm ak asanble a. Se poutèt sa, pwochen etap la se mete ajou li: configMaps, deplwaman, sèvis, sekrè ak nenpòt lòt konfigirasyon K8S ke nou te chanje.
Helm Lè sa a, kouri yon aktyalizasyon RollOut nan aplikasyon an tèt li nan anviwònman tès la. Anvan aplikasyon an deplwaye nan pwodiksyon an. Sa a se fè pou itilizatè yo ka manyèlman teste karakteristik biznis yo ke nou mete nan anviwònman tès la.
5. Otomatik deplwaman tout chanjman nan Prod
Pou deplwaye yon aktyalizasyon nan anviwònman pwodiksyon an, ou jis bezwen klike sou yon sèl bouton nan GitLab - ak resipyan yo imedyatman delivre nan anviwònman pwodiksyon an.
Menm aplikasyon an ka travay nan diferan anviwònman-tès ak pwodiksyon-san rebati. Nou itilize menm zafè yo san nou pa chanje anyen nan aplikasyon an, epi nou mete paramèt yo deyò.
Paramètrizasyon fleksib nan anviwònman aplikasyon an depann de anviwònman kote aplikasyon an pral egzekite. Nou te deplase tout anviwònman anviwònman yo deyò: tout bagay paramèt atravè konfigirasyon K8S ak paramèt Helm. Lè Helm deplwaye yon asanble nan anviwònman tès la, paramèt tès yo aplike sou li, epi paramèt pwodwi yo aplike nan anviwònman pwodiksyon an.
Bagay ki pi difisil la se te paramètrize tout sèvis yo itilize ak varyab ki depann sou anviwònman an, epi tradui yo nan varyab anviwònman ak deskripsyon-konfigirasyon nan paramèt anviwònman pou Helm.
Anviwònman aplikasyon yo itilize varyab anviwònman yo. Valè yo mete nan resipyan lè l sèvi avèk K8S configmap, ki se modèl lè l sèvi avèk modèl Go. Pou egzanp, mete yon varyab anviwònman nan non an domèn ka fè tankou sa a:
APP_EXTERNAL_DOMAIN: {{ (pluck .Values.global.env .Values.app.properties.app_external_domain | first) }}
.Valè.global.env – varyab sa a estoke non anviwònman an (prod, etap, UAT).
.Values.app.properties.app_external_domain – nan varyab sa a nou mete domèn vle a nan dosye a .Values.yaml
Lè w mete ajou yon aplikasyon, Helm kreye yon fichye configmap.yaml apati modèl epi ranpli valè APP_EXTERNAL_DOMAIN ak valè vle a depann de anviwònman kote aktyalizasyon aplikasyon an kòmanse. Varyab sa a deja mete nan veso a. Li ka jwenn aksè nan aplikasyon an, kidonk chak anviwònman aplikasyon pral gen yon valè diferan pou varyab sa a.
Relativman dènyèman, sipò K8S parèt nan Spring Cloud, ki gen ladan travay ak configMaps: . Pandan ke pwojè a ap aktivman devlope ak chanje radikalman, nou pa ka itilize li nan pwodiksyon an. Men, nou aktivman kontwole kondisyon li yo epi sèvi ak li nan konfigirasyon DEV. Le pli vit ke li estabilize, nou pral chanje soti nan itilize varyab anviwònman an nan li.
Nan total
Se konsa, deplwaman kontinyèl se configuré ak travay. Tout mizajou fèt ak yon sèl frap. Livrezon chanjman nan anviwònman pwodwi a se otomatik. Epi, sa ki enpòtan, mizajou pa sispann sistèm nan.

Plan pou lavni: otomatik migrasyon baz done
Nou te panse sou amelyore baz done a ak posibilite pou woule tounen chanjman sa yo. Apre yo tout, de vèsyon diferan nan aplikasyon an ap kouri nan menm tan an: youn nan ansyen ap kouri, ak youn nan nouvo se leve. Epi nou pral fèmen ansyen an sèlman lè nou sèten ke nouvo vèsyon an ap travay. Migrasyon baz done a ta dwe pèmèt ou travay ak tou de vèsyon aplikasyon an.
Se poutèt sa, nou pa ka tou senpleman chanje non kolòn nan oswa lòt done. Men, nou ka kreye yon nouvo kolòn, kopi done ki soti nan kolòn nan ansyen nan li epi ekri deklannche ki, lè mete ajou done yo, pral ansanm kopye ak mete ajou li nan yon lòt kolòn. Epi apre deplwaman siksè nan nouvo vèsyon aplikasyon an, apre peryòd sipò apre lansman, nou pral kapab efase kolòn nan fin vye granmoun ak deklanche a ki te vin nesesè.
Si nouvo vèsyon aplikasyon an pa travay kòrèkteman, nou ka retounen nan vèsyon anvan an, ki gen ladan vèsyon anvan baz done a. Nan ti bout tan, chanjman nou yo pral pèmèt ou travay ansanm ak plizyè vèsyon aplikasyon an.
Nou planifye otomatize migrasyon baz done atravè travay K8S, entegre li nan pwosesis CD la. Epi nou pral definitivman pataje eksperyans sa a sou Habré.
Sous: www.habr.com
