మేము ట్రూ ఇంజనీరింగ్లో కస్టమర్ సర్వర్లకు అప్డేట్లను నిరంతరం అందించడానికి ఒక ప్రక్రియను సెటప్ చేసాము మరియు ఈ అనుభవాన్ని పంచుకోవాలనుకుంటున్నాము.
ప్రారంభించడానికి, మేము కస్టమర్ కోసం ఆన్లైన్ సిస్టమ్ను అభివృద్ధి చేసాము మరియు దానిని మా స్వంత కుబెర్నెట్స్ క్లస్టర్లో అమలు చేసాము. ఇప్పుడు మా అధిక-లోడ్ పరిష్కారం కస్టమర్ ప్లాట్ఫారమ్కు తరలించబడింది, దీని కోసం మేము పూర్తి ఆటోమేటిక్ నిరంతర విస్తరణ ప్రక్రియను సెటప్ చేసాము. దీనికి ధన్యవాదాలు, మేము మార్కెట్-టు-మార్కెట్ను వేగవంతం చేసాము - ఉత్పత్తి వాతావరణానికి మార్పుల పంపిణీ.
ఈ కథనంలో మేము నిరంతర విస్తరణ (CD) ప్రక్రియ యొక్క అన్ని దశల గురించి లేదా కస్టమర్ ప్లాట్ఫారమ్కు నవీకరణల డెలివరీ గురించి మాట్లాడుతాము:
- ఈ ప్రక్రియ ఎలా ప్రారంభమవుతుంది?
- కస్టమర్ యొక్క Git రిపోజిటరీతో సమకాలీకరణ,
- బ్యాకెండ్ మరియు ఫ్రంటెండ్ యొక్క అసెంబ్లీ,
- పరీక్ష వాతావరణంలో ఆటోమేటిక్ అప్లికేషన్ విస్తరణ,
- ఉత్పత్తికి స్వయంచాలక విస్తరణ.
మేము సెటప్ వివరాలను అలాగే భాగస్వామ్యం చేస్తాము.
1. CDని ప్రారంభించండి
డెవలపర్ మా Git రిపోజిటరీ యొక్క విడుదల శాఖకు మార్పులను నెట్టడంతో నిరంతర విస్తరణ ప్రారంభమవుతుంది.
మా అప్లికేషన్ మైక్రోసర్వీస్ ఆర్కిటెక్చర్పై నడుస్తుంది మరియు దాని అన్ని భాగాలు ఒకే రిపోజిటరీలో నిల్వ చేయబడతాయి. దీనికి ధన్యవాదాలు, వాటిలో ఒకటి మార్చబడినప్పటికీ, అన్ని మైక్రోసర్వీస్లు సేకరించబడతాయి మరియు ఇన్స్టాల్ చేయబడతాయి.
మేము అనేక కారణాల వల్ల ఒక రిపోజిటరీ ద్వారా పనిని నిర్వహించాము:
- అభివృద్ధి సౌలభ్యం - అప్లికేషన్ చురుకుగా అభివృద్ధి చెందుతోంది, కాబట్టి మీరు ఒకేసారి అన్ని కోడ్లతో పని చేయవచ్చు.
- ఒకే సిస్టమ్గా అప్లికేషన్ అన్ని పరీక్షలలో ఉత్తీర్ణత సాధిస్తుందని మరియు కస్టమర్ యొక్క ఉత్పత్తి వాతావరణానికి పంపిణీ చేయబడుతుందని హామీ ఇచ్చే ఒకే CI/CD పైప్లైన్.
- మేము సంస్కరణల్లో గందరగోళాన్ని తొలగిస్తాము - మేము మైక్రోసర్వీస్ సంస్కరణల మ్యాప్ను నిల్వ చేయనవసరం లేదు మరియు హెల్మ్ స్క్రిప్ట్లలోని ప్రతి మైక్రోసర్వీస్ కోసం దాని కాన్ఫిగరేషన్ను వివరించాల్సిన అవసరం లేదు.
2. కస్టమర్ యొక్క సోర్స్ కోడ్ యొక్క Git రిపోజిటరీతో సమకాలీకరణ
చేసిన మార్పులు కస్టమర్ యొక్క Git రిపోజిటరీతో స్వయంచాలకంగా సమకాలీకరించబడతాయి. అక్కడ అప్లికేషన్ అసెంబ్లీ కాన్ఫిగర్ చేయబడింది, ఇది శాఖను నవీకరించిన తర్వాత ప్రారంభించబడుతుంది మరియు కొనసాగింపుకు విస్తరణ. రెండు ప్రక్రియలు వాటి వాతావరణంలో Git రిపోజిటరీ నుండి ఉద్భవించాయి.
మేము డెవలప్మెంట్ మరియు టెస్టింగ్ కోసం మా స్వంత ఎన్విరాన్మెంట్లు అవసరం కాబట్టి మేము కస్టమర్ రిపోజిటరీతో నేరుగా పని చేయలేము. మేము ఈ ప్రయోజనాల కోసం మా Git రిపోజిటరీని ఉపయోగిస్తాము - ఇది వారి Git రిపోజిటరీతో సమకాలీకరించబడింది. డెవలపర్ మా రిపోజిటరీ యొక్క సముచితమైన బ్రాంచ్లో మార్పులను పోస్ట్ చేసిన వెంటనే, GitLab వెంటనే ఈ మార్పులను కస్టమర్కు పంపుతుంది.
దీని తరువాత మీరు అసెంబ్లీని చేయవలసి ఉంటుంది. ఇది అనేక దశలను కలిగి ఉంటుంది: బ్యాకెండ్ మరియు ఫ్రంటెండ్ అసెంబ్లీ, టెస్టింగ్ మరియు ఉత్పత్తికి డెలివరీ.
3. బ్యాకెండ్ మరియు ఫ్రంటెండ్ అసెంబ్లింగ్
బ్యాకెండ్ మరియు ఫ్రంటెండ్ బిల్డింగ్ అనేది GitLab రన్నర్ సిస్టమ్లో నిర్వహించబడే రెండు సమాంతర పనులు. దాని అసలు అసెంబ్లీ కాన్ఫిగరేషన్ అదే రిపోజిటరీలో ఉంది.
GitLab రన్నర్ అవసరమైన రిపోజిటరీ నుండి కోడ్ను తీసుకుంటుంది, దానిని జావా అప్లికేషన్ బిల్డ్ కమాండ్తో అసెంబుల్ చేసి డాకర్ రిజిస్ట్రీకి పంపుతుంది. ఇక్కడ మేము బ్యాకెండ్ మరియు ఫ్రంటెండ్ను సమీకరించాము, డాకర్ చిత్రాలను పొందుతాము, వీటిని మేము కస్టమర్ వైపు రిపోజిటరీలో ఉంచుతాము. మేము ఉపయోగించే డాకర్ చిత్రాలను నిర్వహించడానికి
మేము మా చిత్రాల సంస్కరణలను డాకర్లో ప్రచురించబడే విడుదల వెర్షన్తో సమకాలీకరించాము. మృదువైన ఆపరేషన్ కోసం మేము అనేక సర్దుబాట్లు చేసాము:
1. పరీక్ష వాతావరణం మరియు ఉత్పత్తి వాతావరణం మధ్య కంటైనర్లు పునర్నిర్మించబడవు. మేము పారామిటరైజేషన్లను చేసాము, తద్వారా ఒకే కంటైనర్ అన్ని సెట్టింగ్లు, ఎన్విరాన్మెంట్ వేరియబుల్స్ మరియు సేవలతో పరీక్ష వాతావరణంలో మరియు ఉత్పత్తిలో పునర్నిర్మించకుండానే పని చేస్తుంది.
2. హెల్మ్ ద్వారా అప్లికేషన్ను అప్డేట్ చేయడానికి, మీరు తప్పనిసరిగా దాని వెర్షన్ను పేర్కొనాలి. మేము బ్యాకెండ్, ఫ్రంటెండ్ మరియు అప్డేట్ అప్లికేషన్ను రూపొందించాము - ఇవి మూడు వేర్వేరు పనులు, కాబట్టి ప్రతిచోటా అప్లికేషన్ యొక్క ఒకే వెర్షన్ను ఉపయోగించడం ముఖ్యం. ఈ పని కోసం, మా K8S క్లస్టర్ కాన్ఫిగరేషన్ మరియు అప్లికేషన్లు ఒకే Git రిపోజిటరీలో ఉన్నందున మేము Git చరిత్ర నుండి డేటాను ఉపయోగిస్తాము.
కమాండ్ ఎగ్జిక్యూషన్ ఫలితాల నుండి మేము అప్లికేషన్ వెర్షన్ను పొందుతాము
git describe --tags --abbrev=7
.
4. పరీక్ష వాతావరణంలో (UAT) అన్ని మార్పుల స్వయంచాలక విస్తరణ
ఈ బిల్డ్ స్క్రిప్ట్లో తదుపరి దశ K8S క్లస్టర్ను స్వయంచాలకంగా నవీకరించడం. మొత్తం అప్లికేషన్ నిర్మించబడి, అన్ని కళాఖండాలు డాకర్ రిజిస్ట్రీకి ప్రచురించబడితే ఇది జరుగుతుంది. దీని తర్వాత, పరీక్ష పర్యావరణ నవీకరణ ప్రారంభమవుతుంది.
క్లస్టర్ అప్డేట్ ఉపయోగించడం ప్రారంభించబడింది
మేము అసెంబ్లీతో పాటు K8S క్లస్టర్ కాన్ఫిగరేషన్ను సరఫరా చేస్తాము. కాబట్టి, తదుపరి దశ దీన్ని నవీకరించడం: configMaps, విస్తరణలు, సేవలు, రహస్యాలు మరియు మేము మార్చిన ఏవైనా ఇతర K8S కాన్ఫిగరేషన్లు.
హెల్మ్ పరీక్ష వాతావరణంలో అప్లికేషన్ యొక్క రోల్ అవుట్ అప్డేట్ను అమలు చేస్తుంది. అప్లికేషన్ ఉత్పత్తికి అమలు చేయడానికి ముందు. మేము పరీక్షా వాతావరణంలో ఉంచిన వ్యాపార లక్షణాలను వినియోగదారులు మాన్యువల్గా పరీక్షించేలా ఇది జరుగుతుంది.
5. ఉత్పత్తికి అన్ని మార్పుల స్వయంచాలక విస్తరణ
ఉత్పత్తి వాతావరణానికి నవీకరణను అమలు చేయడానికి, మీరు GitLabలో ఒక బటన్ను క్లిక్ చేయాలి - మరియు కంటైనర్లు వెంటనే ఉత్పత్తి వాతావరణానికి పంపిణీ చేయబడతాయి.
అదే అప్లికేషన్ పునర్నిర్మాణం లేకుండా వివిధ వాతావరణాలలో-పరీక్ష మరియు ఉత్పత్తిలో పని చేస్తుంది. మేము అప్లికేషన్లో దేనినీ మార్చకుండా అదే కళాఖండాలను ఉపయోగిస్తాము మరియు మేము పారామితులను బాహ్యంగా సెట్ చేస్తాము.
అప్లికేషన్ సెట్టింగ్ల ఫ్లెక్సిబుల్ పారామిటరైజేషన్ అప్లికేషన్ అమలు చేయబడే వాతావరణంపై ఆధారపడి ఉంటుంది. మేము అన్ని పర్యావరణ సెట్టింగ్లను బాహ్యంగా తరలించాము: ప్రతిదీ K8S కాన్ఫిగరేషన్ మరియు హెల్మ్ పారామితుల ద్వారా పారామితి చేయబడింది. పరీక్ష వాతావరణంలో హెల్మ్ అసెంబ్లీని అమలు చేసినప్పుడు, పరీక్ష సెట్టింగ్లు దానికి వర్తింపజేయబడతాయి మరియు ఉత్పత్తి సెట్టింగ్లు ఉత్పత్తి వాతావరణానికి వర్తింపజేయబడతాయి.
పర్యావరణంపై ఆధారపడిన అన్ని ఉపయోగించిన సేవలు మరియు వేరియబుల్స్ను పారామితి చేయడం మరియు హెల్మ్ కోసం పర్యావరణ పారామితుల యొక్క ఎన్విరాన్మెంట్ వేరియబుల్స్ మరియు డిస్క్రిప్షన్-కాన్ఫిగరేషన్లుగా అనువదించడం చాలా కష్టమైన విషయం.
అప్లికేషన్ సెట్టింగ్లు ఎన్విరాన్మెంట్ వేరియబుల్స్ని ఉపయోగిస్తాయి. గో టెంప్లేట్లను ఉపయోగించి టెంప్లేట్ చేయబడిన K8S కాన్ఫిగ్మ్యాప్ని ఉపయోగించి వాటి విలువలు కంటైనర్లలో సెట్ చేయబడ్డాయి. ఉదాహరణకు, డొమైన్ పేరుకు ఎన్విరాన్మెంట్ వేరియబుల్ సెట్ చేయడం ఇలా చేయవచ్చు:
APP_EXTERNAL_DOMAIN: {{ (pluck .Values.global.env .Values.app.properties.app_external_domain | first) }}
.Values.global.env - ఈ వేరియబుల్ పర్యావరణం పేరును నిల్వ చేస్తుంది (ఉత్పత్తి, దశ, UAT).
.Values.app.properties.app_external_domain – ఈ వేరియబుల్లో మనం .Values.yaml ఫైల్లో కావలసిన డొమైన్ను సెట్ చేస్తాము
అప్లికేషన్ను అప్డేట్ చేస్తున్నప్పుడు, హెల్మ్ టెంప్లేట్ల నుండి configmap.yaml ఫైల్ను సృష్టిస్తుంది మరియు అప్లికేషన్ అప్డేట్ ప్రారంభమయ్యే వాతావరణంపై ఆధారపడి కావలసిన విలువతో APP_EXTERNAL_DOMAIN విలువను నింపుతుంది. ఈ వేరియబుల్ ఇప్పటికే కంటైనర్లో సెట్ చేయబడింది. ఇది అప్లికేషన్ నుండి యాక్సెస్ చేయబడుతుంది, కాబట్టి ప్రతి అప్లికేషన్ ఎన్విరాన్మెంట్ ఈ వేరియబుల్ కోసం వేరే విలువను కలిగి ఉంటుంది.
సాపేక్షంగా ఇటీవల, K8S మద్దతు స్ప్రింగ్ క్లౌడ్లో కనిపించింది, కాన్ఫిగమ్మ్యాప్లతో సహా:
మొత్తం
కాబట్టి, నిరంతర విస్తరణ కాన్ఫిగర్ చేయబడింది మరియు పని చేస్తుంది. అన్ని నవీకరణలు ఒక కీస్ట్రోక్తో జరుగుతాయి. ఉత్పత్తి వాతావరణంలో మార్పుల డెలివరీ స్వయంచాలకంగా ఉంటుంది. మరియు, ముఖ్యంగా, నవీకరణలు సిస్టమ్ను ఆపవు.
భవిష్యత్తు ప్రణాళికలు: ఆటోమేటిక్ డేటాబేస్ మైగ్రేషన్
మేము డేటాబేస్ను అప్గ్రేడ్ చేయడం మరియు ఈ మార్పులను వెనక్కి తీసుకునే అవకాశం గురించి ఆలోచించాము. అన్నింటికంటే, అప్లికేషన్ యొక్క రెండు వేర్వేరు వెర్షన్లు ఒకే సమయంలో అమలవుతున్నాయి: పాతది నడుస్తోంది మరియు కొత్తది అందుబాటులో ఉంది. మరియు కొత్త వెర్షన్ పని చేస్తుందని మేము నిర్ధారించుకున్నప్పుడు మాత్రమే పాతదాన్ని ఆఫ్ చేస్తాము. డేటాబేస్ మైగ్రేషన్ అప్లికేషన్ యొక్క రెండు వెర్షన్లతో పని చేయడానికి మిమ్మల్ని అనుమతిస్తుంది.
కాబట్టి, మేము కాలమ్ పేరు లేదా ఇతర డేటాను మార్చలేము. కానీ మనం కొత్త కాలమ్ని సృష్టించవచ్చు, పాత కాలమ్ నుండి డేటాను కాపీ చేయవచ్చు మరియు డేటాను అప్డేట్ చేస్తున్నప్పుడు, దానిని మరొక కాలమ్లో ఏకకాలంలో కాపీ చేసి అప్డేట్ చేసే ట్రిగ్గర్లను వ్రాయవచ్చు. మరియు అప్లికేషన్ యొక్క కొత్త వెర్షన్ విజయవంతంగా అమలు చేయబడిన తర్వాత, పోస్ట్ లాంచ్ మద్దతు వ్యవధి తర్వాత, మేము పాత కాలమ్ మరియు అనవసరంగా మారిన ట్రిగ్గర్ను తొలగించగలుగుతాము.
అప్లికేషన్ యొక్క కొత్త వెర్షన్ సరిగ్గా పని చేయకపోతే, మేము డేటాబేస్ యొక్క మునుపటి సంస్కరణతో సహా మునుపటి సంస్కరణకు తిరిగి వెళ్లవచ్చు. సంక్షిప్తంగా, మా మార్పులు అప్లికేషన్ యొక్క అనేక సంస్కరణలతో ఏకకాలంలో పని చేయడానికి మిమ్మల్ని అనుమతిస్తాయి.
మేము K8S జాబ్ ద్వారా డేటాబేస్ మైగ్రేషన్ని ఆటోమేట్ చేయడానికి ప్లాన్ చేస్తున్నాము, దానిని CD ప్రాసెస్లో కలుపుతాము. మరియు మేము ఖచ్చితంగా ఈ అనుభవాన్ని హబ్రేలో పంచుకుంటాము.
మూలం: www.habr.com