CI/CD గొలుసును సృష్టించడం మరియు డాకర్తో పనిని ఆటోమేట్ చేయడం
నేను నా మొదటి వెబ్సైట్లను 90ల చివరలో వ్రాసాను. అప్పట్లో వాటిని వర్కింగ్ ఆర్డర్లో పెట్టడం చాలా తేలిక. కొన్ని షేర్డ్ హోస్టింగ్లో Apache సర్వర్ ఉంది, మీరు FTP ద్వారా ఈ సర్వర్లోకి లాగిన్ అవ్వవచ్చు ftp://ftp.example.com. అప్పుడు మీరు మీ పేరు మరియు పాస్వర్డ్ను నమోదు చేసి, ఫైల్లను సర్వర్కు అప్లోడ్ చేయాలి. వేర్వేరు సమయాలు ఉన్నాయి, ఇప్పుడు కంటే అప్పుడు ప్రతిదీ చాలా సులభం.
ఆ తర్వాత రెండు దశాబ్దాలలో, ప్రతిదీ చాలా మారిపోయింది. వెబ్సైట్లు మరింత క్లిష్టంగా మారాయి; వాటిని ఉత్పత్తికి విడుదల చేయడానికి ముందు తప్పనిసరిగా సమీకరించాలి. ఒకే సర్వర్ లోడ్ బ్యాలెన్సర్ల వెనుక నడుస్తున్న అనేక సర్వర్లుగా మారింది మరియు సంస్కరణ నియంత్రణ వ్యవస్థల ఉపయోగం సాధారణమైంది.
నా వ్యక్తిగత ప్రాజెక్ట్ కోసం నాకు ప్రత్యేక కాన్ఫిగరేషన్ ఉంది. మరియు నేను కేవలం ఒక చర్యను చేయడం ద్వారా సైట్ను ఉత్పత్తిలో అమర్చగల సామర్థ్యం అవసరమని నాకు తెలుసు: బ్రాంచ్కి కోడ్ రాయడం master GitHubలో. అదనంగా, నా చిన్న వెబ్ అప్లికేషన్ యొక్క ఆపరేషన్ను నిర్ధారించడానికి, నేను భారీ కుబెర్నెట్స్ క్లస్టర్ను నిర్వహించకూడదనుకుంటున్నాను, లేదా డాకర్ స్వార్మ్ టెక్నాలజీని ఉపయోగించడం లేదా పాడ్లు, ఏజెంట్లు మరియు అన్ని రకాల ఇతర సర్వర్ల సముదాయాన్ని నిర్వహించడం ఇష్టం లేదని నాకు తెలుసు. సంక్లిష్టతలు. పనిని వీలైనంత సులభతరం చేయాలనే లక్ష్యాన్ని సాధించడానికి, నేను CI/CD గురించి బాగా తెలుసుకోవాలి.
మీరు ఒక చిన్న ప్రాజెక్ట్ (ఈ సందర్భంలో, Node.js ప్రాజెక్ట్) కలిగి ఉంటే మరియు ఈ ప్రాజెక్ట్ యొక్క విస్తరణను ఎలా ఆటోమేట్ చేయాలో మీరు తెలుసుకోవాలనుకుంటే, రిపోజిటరీలో నిల్వ చేయబడినది ఉత్పత్తిలో పని చేసే దానికి సరిగ్గా సరిపోతుందని నిర్ధారిస్తుంది, అప్పుడు నేను మీరు ఈ వ్యాసంపై ఆసక్తి కలిగి ఉండవచ్చని భావిస్తున్నాను.
ముందస్తు అవసరాలు
ఈ కథనం యొక్క రీడర్ కమాండ్ లైన్ మరియు బాష్ స్క్రిప్ట్లను వ్రాయడం గురించి ప్రాథమిక అవగాహన కలిగి ఉండాలని భావిస్తున్నారు. అదనంగా, అతనికి ఖాతాలు అవసరం ట్రావిస్ సిఐ и డాకర్ హబ్.
గోల్స్
ఈ కథనాన్ని బేషరతుగా "ట్యుటోరియల్" అని పిలవవచ్చని నేను చెప్పను. ఇది నేను నేర్చుకున్న వాటి గురించి మాట్లాడే పత్రం మరియు ఉత్పత్తికి కోడ్ని పరీక్షించడానికి మరియు అమలు చేయడానికి నాకు సరిపోయే ప్రక్రియను వివరిస్తుంది, ఇది ఒక ఆటోమేటెడ్ పాస్లో ప్రదర్శించబడుతుంది.
ఇది నా వర్క్ఫ్లో ముగిసింది.
తప్ప ఏదైనా రిపోజిటరీ బ్రాంచ్కి పోస్ట్ చేసిన కోడ్ కోసం master, కింది చర్యలు నిర్వహించబడతాయి:
ట్రావిస్ CI పై ప్రాజెక్ట్ నిర్మాణం ప్రారంభమవుతుంది.
అన్ని యూనిట్, ఇంటిగ్రేషన్ మరియు ఎండ్-టు-ఎండ్ పరీక్షలు నిర్వహిస్తారు.
పడే కోడ్ కోసం మాత్రమే master, కిందివి నిర్వహించబడతాయి:
పైన పేర్కొన్న ప్రతిదీ, ప్లస్...
ప్రస్తుత కోడ్, సెట్టింగ్లు మరియు పర్యావరణం ఆధారంగా డాకర్ చిత్రాన్ని రూపొందించడం.
చిత్రాన్ని డాకర్ హబ్కి అమలు చేస్తోంది.
ఉత్పత్తి సర్వర్కు కనెక్షన్.
డాకర్ హబ్ నుండి సర్వర్కి చిత్రాన్ని అప్లోడ్ చేస్తోంది.
ప్రస్తుత కంటైనర్ను ఆపివేసి, కొత్త చిత్రం ఆధారంగా కొత్తదాన్ని ప్రారంభించడం.
మీకు డాకర్, చిత్రాలు మరియు కంటైనర్ల గురించి ఖచ్చితంగా ఏమీ తెలియకపోతే, చింతించకండి. అవన్నీ నేను మీకు చెప్తాను.
CI/CD అంటే ఏమిటి?
CI/CD అనే సంక్షిప్త పదం "నిరంతర ఏకీకరణ/నిరంతర విస్తరణ"ని సూచిస్తుంది.
▍నిరంతర ఏకీకరణ
నిరంతర ఏకీకరణ అనేది ప్రాజెక్ట్ యొక్క ప్రధాన సోర్స్ కోడ్ రిపోజిటరీ (సాధారణంగా ఒక శాఖ)కి డెవలపర్లు కట్టుబడి ఉండే ప్రక్రియ. master) అదే సమయంలో, స్వయంచాలక పరీక్ష ద్వారా కోడ్ యొక్క నాణ్యత నిర్ధారించబడుతుంది.
▍నిరంతర విస్తరణ
నిరంతర విస్తరణ అనేది ఉత్పత్తిలో కోడ్ని తరచుగా, స్వయంచాలక విస్తరణ. CI/CD ఎక్రోనిం యొక్క రెండవ భాగం కొన్నిసార్లు "నిరంతర డెలివరీ"గా పేర్కొనబడుతుంది. ఇది ప్రాథమికంగా "నిరంతర విస్తరణ" వలె ఉంటుంది, కానీ "నిరంతర డెలివరీ" అనేది ప్రాజెక్ట్ విస్తరణ ప్రక్రియను ప్రారంభించే ముందు మార్పులను మాన్యువల్గా నిర్ధారించవలసిన అవసరాన్ని సూచిస్తుంది.
ప్రారంభ విధానం
ఇవన్నీ తెలుసుకోవడానికి నేను ఉపయోగించిన యాప్ అంటారు టేక్ నోట్. ఇది నేను నోట్స్ తీసుకోవడానికి రూపొందించిన వెబ్ ప్రాజెక్ట్. మొదట నేను చేయడానికి ప్రయత్నించాను జామ్స్టాక్-ప్రాజెక్ట్, లేదా సర్వర్ లేని ఫ్రంట్-ఎండ్ అప్లికేషన్, ఇది అందించే ప్రామాణిక హోస్టింగ్ మరియు ప్రాజెక్ట్ విస్తరణ సామర్థ్యాల ప్రయోజనాన్ని పొందడానికి నెట్లిఫై. అప్లికేషన్ యొక్క సంక్లిష్టత పెరిగేకొద్దీ, నేను దాని సర్వర్ భాగాన్ని సృష్టించాల్సిన అవసరం ఉంది, అంటే ప్రాజెక్ట్ యొక్క ఆటోమేటెడ్ ఇంటిగ్రేషన్ మరియు ఆటోమేటెడ్ డిప్లాయ్మెంట్ కోసం నేను నా స్వంత వ్యూహాన్ని రూపొందించుకోవాలి.
నా విషయంలో, అప్లికేషన్ అనేది Node.js ఎన్విరాన్మెంట్లో రన్ అవుతున్న ఎక్స్ప్రెస్ సర్వర్, ఒకే పేజీ రియాక్ట్ అప్లికేషన్ను అందిస్తోంది మరియు సురక్షిత సర్వర్-సైడ్ APIకి మద్దతు ఇస్తుంది. ఈ ఆర్కిటెక్చర్ కనుగొనగలిగే వ్యూహాన్ని అనుసరిస్తుంది ఇచ్చిన పూర్తి స్టాక్ ప్రమాణీకరణ గైడ్.
నేను సంప్రదించాను స్నేహితుడు, ఎవరు ఆటోమేషన్ నిపుణుడు మరియు నేను కోరుకున్న విధంగా అన్నీ పని చేయడానికి నేను ఏమి చేయాలని అడిగాను. ఈ ఆర్టికల్లోని గోల్స్ విభాగంలో వివరించిన ఆటోమేటెడ్ వర్క్ఫ్లో ఎలా ఉండాలనే ఆలోచనను ఆయన నాకు ఇచ్చారు. ఈ లక్ష్యాలను కలిగి ఉండటం అంటే నేను డాకర్ని ఎలా ఉపయోగించాలో గుర్తించాల్సిన అవసరం ఉందని అర్థం.
డాకర్
డాకర్ అనేది కంటెయినరైజేషన్ టెక్నాలజీకి ధన్యవాదాలు, డాకర్ ప్లాట్ఫారమ్ విభిన్న వాతావరణాలలో నడుస్తున్నప్పటికీ, అప్లికేషన్లను సులభంగా పంపిణీ చేయడానికి, అమలు చేయడానికి మరియు అదే వాతావరణంలో అమలు చేయడానికి అనుమతించే సాధనం. ముందుగా, నేను డాకర్ కమాండ్ లైన్ టూల్స్ (CLI)పై నా చేతులను పొందవలసి ఉంది. సూచన డాకర్ ఇన్స్టాలేషన్ గైడ్ను చాలా స్పష్టంగా మరియు అర్థమయ్యేలా పిలవలేము, కానీ దాని నుండి మీరు మొదటి ఇన్స్టాలేషన్ దశను తీసుకోవడానికి, మీరు డాకర్ డెస్క్టాప్ (Mac లేదా Windows కోసం) డౌన్లోడ్ చేసుకోవాలని తెలుసుకోవచ్చు.
డాకర్ హబ్ దాదాపు అదే విషయం గ్యాలరీలు git రిపోజిటరీలు లేదా రిజిస్ట్రీ కోసం npm జావాస్క్రిప్ట్ ప్యాకేజీల కోసం. ఇది డాకర్ చిత్రాల కోసం ఆన్లైన్ రిపోజిటరీ. దీనినే డాకర్ డెస్క్టాప్ కనెక్ట్ చేస్తుంది.
కాబట్టి, డాకర్తో ప్రారంభించడానికి, మీరు రెండు పనులు చేయాలి:
దీని తరువాత, డాకర్ సంస్కరణను తనిఖీ చేయడానికి కింది ఆదేశాన్ని అమలు చేయడం ద్వారా మీరు డాకర్ CLI పనిచేస్తుందో లేదో తనిఖీ చేయవచ్చు:
docker -v
తర్వాత, అడిగినప్పుడు మీ వినియోగదారు పేరు మరియు పాస్వర్డ్ను నమోదు చేయడం ద్వారా డాకర్ హబ్లోకి లాగిన్ అవ్వండి:
docker login
డాకర్ని ఉపయోగించడానికి, మీరు తప్పనిసరిగా చిత్రాలు మరియు కంటైనర్ల భావనలను అర్థం చేసుకోవాలి.
▍చిత్రాలు
చిత్రం అనేది కంటైనర్ను అసెంబ్లింగ్ చేయడానికి సూచనలను కలిగి ఉండే బ్లూప్రింట్ లాంటిది. ఇది అప్లికేషన్ యొక్క ఫైల్ సిస్టమ్ మరియు సెట్టింగ్ల యొక్క మార్పులేని స్నాప్షాట్. డెవలపర్లు సులభంగా చిత్రాలను పంచుకోవచ్చు.
# Вывод сведений обо всех образах
docker images
ఈ ఆదేశం క్రింది హెడర్తో పట్టికను అవుట్పుట్ చేస్తుంది:
REPOSITORY TAG IMAGE ID CREATED SIZE
---
తరువాత మేము అదే ఫార్మాట్లోని కొన్ని ఆదేశాల ఉదాహరణలను పరిశీలిస్తాము - మొదట వ్యాఖ్యతో ఒక కమాండ్ ఉంది, ఆపై అది ఏమి అవుట్పుట్ చేయగలదో ఉదాహరణ.
▍కంటెయినర్లు
కంటైనర్ అనేది ఎక్జిక్యూటబుల్ ప్యాకేజీ, ఇది అప్లికేషన్ను అమలు చేయడానికి అవసరమైన ప్రతిదాన్ని కలిగి ఉంటుంది. ఇన్ఫ్రాస్ట్రక్చర్తో సంబంధం లేకుండా ఈ విధానంతో కూడిన అప్లికేషన్ ఎల్లప్పుడూ ఒకే విధంగా పని చేస్తుంది: ఏకాంత వాతావరణంలో మరియు అదే వాతావరణంలో. విషయం ఏమిటంటే ఒకే చిత్రం యొక్క సందర్భాలు వేర్వేరు వాతావరణాలలో ప్రారంభించబడ్డాయి.
# Перечисление всех контейнеров
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
---
▍ట్యాగ్లు
ట్యాగ్ అనేది చిత్రం యొక్క నిర్దిష్ట సంస్కరణకు సూచన.
▍డాకర్ ఆదేశాలకు శీఘ్ర సూచన
సాధారణంగా ఉపయోగించే కొన్ని డాకర్ ఆదేశాల యొక్క అవలోకనం ఇక్కడ ఉంది.
స్థానికంగా ప్రొడక్షన్ అప్లికేషన్ని ఎలా రన్ చేయాలో నాకు తెలుసు. నేను రెడీమేడ్ రియాక్ట్ అప్లికేషన్ను రూపొందించడానికి రూపొందించిన వెబ్ప్యాక్ కాన్ఫిగరేషన్ని కలిగి ఉన్నాను. తర్వాత, పోర్ట్లో Node.js ఆధారిత సర్వర్ను ప్రారంభించే కమాండ్ నా వద్ద ఉంది 5000. ఇది ఇలా కనిపిస్తుంది:
npm i # установка зависимостей
npm run build # сборка React-приложения
npm run start # запуск Node-сервера
ఈ మెటీరియల్ కోసం నా దగ్గర ఉదాహరణ అప్లికేషన్ లేదని గమనించాలి. కానీ ఇక్కడ, ప్రయోగాల కోసం, ఏదైనా సాధారణ నోడ్ అప్లికేషన్ చేస్తుంది.
కంటైనర్ను ఉపయోగించడానికి, మీరు డాకర్కు సూచనలను అందించాలి. అనే ఫైల్ ద్వారా ఇది జరుగుతుంది Dockerfile, ప్రాజెక్ట్ యొక్క రూట్ డైరెక్టరీలో ఉంది. ఈ ఫైల్, మొదట, చాలా అపారమయినదిగా అనిపిస్తుంది.
కానీ అది కలిగి ఉన్నవి ప్రత్యేక ఆదేశాలతో, పని వాతావరణాన్ని సెటప్ చేయడం లాంటివి మాత్రమే వివరిస్తాయి. ఈ ఆదేశాలలో కొన్ని ఇక్కడ ఉన్నాయి:
నుండి — ఈ ఆదేశం ఒక ఫైల్ను ప్రారంభిస్తుంది. ఇది కంటైనర్ నిర్మించబడిన బేస్ ఇమేజ్ను నిర్దేశిస్తుంది.
కాపీ — స్థానిక మూలం నుండి కంటైనర్కు ఫైల్లను కాపీ చేయడం.
వర్క్డైర్ — కింది ఆదేశాల కోసం వర్కింగ్ డైరెక్టరీని సెట్ చేస్తోంది.
# Загрузить базовый образ
FROM node:12-alpine
# Скопировать файлы из текущей директории в директорию app/
COPY . app/
# Использовать app/ в роли рабочей директории
WORKDIR app/
# Установить зависимости (команда npm ci похожа npm i, но используется для автоматизированных сборок)
RUN npm ci --only-production
# Собрать клиентское React-приложение для продакшна
RUN npm run build
# Прослушивать указанный порт
EXPOSE 5000
# Запустить Node-сервер
ENTRYPOINT npm run start
మీరు ఎంచుకున్న బేస్ ఇమేజ్పై ఆధారపడి, మీరు అదనపు డిపెండెన్సీలను ఇన్స్టాల్ చేయాల్సి రావచ్చు. వాస్తవం ఏమిటంటే, కొన్ని బేస్ ఇమేజ్లు (నోడ్ ఆల్పైన్ లైనక్స్ వంటివి) వాటిని వీలైనంత కాంపాక్ట్గా మార్చే లక్ష్యంతో రూపొందించబడ్డాయి. ఫలితంగా, వారు మీరు ఆశించే కొన్ని ప్రోగ్రామ్లను కలిగి ఉండకపోవచ్చు.
▍ కంటైనర్ను నిర్మించడం, ట్యాగింగ్ చేయడం మరియు రన్ చేయడం
మేము కలిగి ఉన్న తర్వాత స్థానిక అసెంబ్లీ మరియు కంటైనర్ లాంచ్ Dockerfile, పనులు చాలా సులభం. మీరు చిత్రాన్ని డాకర్ హబ్కి నెట్టడానికి ముందు, మీరు దానిని స్థానికంగా పరీక్షించాలి.
▍అసెంబ్లీ
మొదట మీరు సేకరించాలి ఒక చిత్రం, పేరును పేర్కొనడం మరియు ఐచ్ఛికంగా, ట్యాగ్ (ట్యాగ్ పేర్కొనబడకపోతే, సిస్టమ్ స్వయంచాలకంగా చిత్రానికి ట్యాగ్ని కేటాయిస్తుంది latest).
# Сборка образа
docker build -t <image>:<tag> .
ఈ ఆదేశాన్ని అమలు చేసిన తర్వాత, మీరు డాకర్ చిత్రాన్ని నిర్మించడాన్ని చూడవచ్చు.
Sending build context to Docker daemon 2.88MB
Step 1/9 : FROM node:12-alpine
---> ...выполнение этапов сборки...
Successfully built 123456789123
Successfully tagged <image>:<tag>
బిల్డ్కి కొన్ని నిమిషాలు పట్టవచ్చు - ఇవన్నీ మీకు ఎన్ని డిపెండెన్సీలు ఉన్నాయి అనే దానిపై ఆధారపడి ఉంటుంది. బిల్డ్ పూర్తయిన తర్వాత, మీరు ఆదేశాన్ని అమలు చేయవచ్చు docker images మరియు మీ కొత్త చిత్రం యొక్క వివరణను చూడండి.
REPOSITORY TAG IMAGE ID CREATED SIZE
<image> latest 123456789123 About a minute ago x.xxGB
▍ప్రారంభించు
చిత్రం రూపొందించబడింది. దీని ఆధారంగా మీరు కంటైనర్ను నడపవచ్చు. ఎందుకంటే నేను కంటైనర్లో నడుస్తున్న అప్లికేషన్ను యాక్సెస్ చేయాలనుకుంటున్నాను localhost:5000, నేను, జత యొక్క ఎడమ వైపున 5000:5000 ఇన్స్టాల్ చేయబడిన తదుపరి కమాండ్లో 5000. కుడి వైపున కంటైనర్ పోర్ట్ ఉంది.
# Запуск с использованием локального порта 5000 и порта контейнера 5000
docker run -p 5000:5000 <image>:<tag>
ఇప్పుడు కంటైనర్ సృష్టించబడింది మరియు రన్ అవుతుంది, మీరు ఆదేశాన్ని ఉపయోగించవచ్చు docker ps ఈ కంటైనర్ గురించి సమాచారాన్ని చూడటానికి (లేదా మీరు ఆదేశాన్ని ఉపయోగించవచ్చు docker ps -a, ఇది అన్ని కంటైనర్ల గురించి సమాచారాన్ని ప్రదర్శిస్తుంది, కేవలం నడుస్తున్న వాటిని మాత్రమే కాదు).
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
987654321234 <image> "/bin/sh -c 'npm run…" 6 seconds ago Up 6 seconds 0.0.0.0:5000->5000/tcp stoic_darwin
మీరు ఇప్పుడు చిరునామాకు వెళితే localhost:5000 — మీరు ఉత్పత్తి వాతావరణంలో నడుస్తున్న అప్లికేషన్ యొక్క పేజీకి సరిగ్గా సమానంగా కనిపించే అప్లికేషన్ యొక్క పేజీని చూడవచ్చు.
▍ట్యాగింగ్ మరియు పబ్లిషింగ్
ప్రొడక్షన్ సర్వర్లో సృష్టించబడిన చిత్రాలలో ఒకదాన్ని ఉపయోగించడానికి, మేము ఈ చిత్రాన్ని డాకర్ హబ్ నుండి డౌన్లోడ్ చేయగలగాలి. దీని అర్థం మీరు మొదట డాకర్ హబ్లో ప్రాజెక్ట్ కోసం రిపోజిటరీని సృష్టించాలి. దీని తరువాత, మేము చిత్రాన్ని పంపగల స్థలం ఉంటుంది. చిత్రం పేరు మార్చాలి, తద్వారా దాని పేరు మా డాకర్ హబ్ వినియోగదారు పేరుతో ప్రారంభమవుతుంది. దీని తర్వాత రిపోజిటరీ పేరు ఉండాలి. పేరు చివరిలో ఏదైనా ట్యాగ్ ఉంచవచ్చు. ఈ స్కీమ్ని ఉపయోగించి చిత్రాలకు పేరు పెట్టడానికి ఒక ఉదాహరణ క్రింద ఉంది.
ఇప్పుడు మీరు చిత్రాన్ని కొత్త పేరుతో నిర్మించవచ్చు మరియు ఆదేశాన్ని అమలు చేయవచ్చు docker push దీన్ని డాకర్ హబ్ రిపోజిటరీకి నెట్టడానికి.
docker build -t <username>/<repository>:<tag> .
docker tag <username>/<repository>:<tag> <username>/<repository>:latest
docker push <username>/<repository>:<tag>
# На практике это может выглядеть, например, так:
docker build -t user/app:v1.0.0 .
docker tag user/app:v1.0.0 user/app:latest
docker push user/app:v1.0.0
ప్రతిదీ సరిగ్గా జరిగితే, చిత్రం డాకర్ హబ్లో అందుబాటులో ఉంటుంది మరియు సర్వర్కు సులభంగా అప్లోడ్ చేయబడుతుంది లేదా ఇతర డెవలపర్లకు బదిలీ చేయబడుతుంది.
తదుపరి దశలు
డాకర్ కంటైనర్ రూపంలో అప్లికేషన్ స్థానికంగా అమలవుతుందని మేము ఇప్పటికి ధృవీకరించాము. మేము కంటైనర్ను డాకర్ హబ్కి అప్లోడ్ చేసాము. వీటన్నింటికీ అర్థం ఏమిటంటే, మేము ఇప్పటికే మా లక్ష్యం వైపు చాలా మంచి పురోగతి సాధించాము. ఇప్పుడు మనం మరో రెండు ప్రశ్నలను పరిష్కరించాలి:
కోడ్ని పరీక్షించడం మరియు అమలు చేయడం కోసం CI సాధనాన్ని సెటప్ చేస్తోంది.
ప్రొడక్షన్ సర్వర్ని సెటప్ చేయడం వలన అది మా కోడ్ని డౌన్లోడ్ చేసి, అమలు చేయగలదు.
ఇక్కడ మీరు సేవల యొక్క మరొక కలయికను ఉపయోగించవచ్చని గమనించాలి. ఉదాహరణకు, ట్రావిస్ CIకి బదులుగా, మీరు CircleCI లేదా Github చర్యలను ఉపయోగించవచ్చు. మరియు బదులుగా DigitalOcean - AWS లేదా Linode.
మేము ట్రావిస్ CIతో కలిసి పనిచేయాలని నిర్ణయించుకున్నాము మరియు ఈ సేవలో నేను ఇప్పటికే ఏదో కాన్ఫిగర్ చేసాను. అందువలన, ఇప్పుడు నేను పని కోసం ఎలా సిద్ధం చేయాలనే దాని గురించి క్లుప్తంగా మాట్లాడతాను.
ట్రావిస్ సిఐ
ట్రావిస్ CI అనేది కోడ్ని పరీక్షించడానికి మరియు అమలు చేయడానికి ఒక సాధనం. నేను ట్రావిస్ CIని ఏర్పాటు చేయడంలో చిక్కులలోకి వెళ్లడానికి ఇష్టపడను, ఎందుకంటే ప్రతి ప్రాజెక్ట్ ప్రత్యేకంగా ఉంటుంది మరియు ఇది పెద్దగా ప్రయోజనం పొందదు. మీరు ట్రావిస్ CIని ఉపయోగించాలని నిర్ణయించుకుంటే, మీరు ప్రారంభించడానికి నేను ప్రాథమికాలను కవర్ చేస్తాను. మీరు Travis CI, CircleCI, Jenkins లేదా మరేదైనా ఎంచుకున్నా, ప్రతిచోటా ఇలాంటి కాన్ఫిగరేషన్ పద్ధతులు ఉపయోగించబడతాయి.
ట్రావిస్ CIతో ప్రారంభించడానికి, దీనికి వెళ్లండి సైట్ ప్రోక్ట మరియు ఖాతాను సృష్టించండి. ఆపై ట్రావిస్ CIని మీ GitHub ఖాతాతో అనుసంధానించండి. సిస్టమ్ను సెటప్ చేస్తున్నప్పుడు, మీరు పనిని ఆటోమేట్ చేయాలనుకుంటున్న రిపోజిటరీని పేర్కొనాలి మరియు దానికి ప్రాప్యతను ప్రారంభించాలి. (నేను GitHubని ఉపయోగిస్తాను, కానీ ట్రావిస్ CI BitBucket మరియు GitLab మరియు ఇతర సారూప్య సేవలతో అనుసంధానించగలదని నేను ఖచ్చితంగా అనుకుంటున్నాను).
ట్రావిస్ CI ప్రారంభించబడిన ప్రతిసారీ, సంబంధిత రిపోజిటరీ బ్రాంచ్లను అమలు చేయడంతో సహా కాన్ఫిగరేషన్ ఫైల్లో పేర్కొన్న ఆదేశాలను అమలు చేయడం ద్వారా సర్వర్ ప్రారంభించబడుతుంది.
▍ఉద్యోగ జీవిత చక్రం
ట్రావిస్ CI కాన్ఫిగరేషన్ ఫైల్ అంటారు .travis.yml మరియు ప్రాజెక్ట్ రూట్ డైరెక్టరీలో నిల్వ చేయబడుతుంది, ఈవెంట్ల భావనకు మద్దతు ఇస్తుంది జీవిత చక్రం పనులు. ఈ సంఘటనలు అవి సంభవించే క్రమంలో జాబితా చేయబడ్డాయి:
apt addons
cache components
before_install
install
before_script
script
before_cache
after_success или after_failure
before_deploy
deploy
after_deploy
after_script
▍పరీక్ష
కాన్ఫిగరేషన్ ఫైల్లో నేను స్థానిక ట్రావిస్ CI సర్వర్ని కాన్ఫిగర్ చేయబోతున్నాను. నేను నోడ్ 12ని భాషగా ఎంచుకున్నాను మరియు డాకర్ని ఉపయోగించడానికి అవసరమైన డిపెండెన్సీలను ఇన్స్టాల్ చేయమని సిస్టమ్కి చెప్పాను.
జాబితా చేయబడిన ప్రతిదీ .travis.yml, రిపోజిటరీలోని అన్ని శాఖలకు అన్ని పుల్ అభ్యర్థనలు చేయబడినప్పుడు, పేర్కొనకపోతే అమలు చేయబడుతుంది. ఇది ఉపయోగకరమైన ఫీచర్ ఎందుకంటే రిపోజిటరీలోకి వచ్చే అన్ని కోడ్లను మనం పరీక్షించవచ్చని దీని అర్థం. ఇది బ్రాంచ్కి వ్రాయడానికి కోడ్ సిద్ధంగా ఉందో లేదో మీకు తెలియజేస్తుంది. master, మరియు ఇది ప్రాజెక్ట్ నిర్మాణ ప్రక్రియను విచ్ఛిన్నం చేస్తుందో లేదో. ఈ గ్లోబల్ కాన్ఫిగరేషన్లో, నేను అన్నింటినీ స్థానికంగా ఇన్స్టాల్ చేస్తాను, వెబ్ప్యాక్ దేవ్ సర్వర్ను బ్యాక్గ్రౌండ్లో రన్ చేస్తాను (ఇది నా వర్క్ఫ్లో యొక్క లక్షణం) మరియు పరీక్షలను అమలు చేస్తాను.
మీ రిపోజిటరీ పరీక్ష కవరేజీని సూచించే బ్యాడ్జ్లను ప్రదర్శించాలని మీరు కోరుకుంటే, ఇక్కడ మీరు ఈ సమాచారాన్ని సేకరించి, ప్రదర్శించడానికి జెస్ట్, ట్రావిస్ CI మరియు కవరాల్స్ను ఉపయోగించడం గురించి చిన్న సూచనలను కనుగొనవచ్చు.
కాబట్టి ఫైల్ యొక్క కంటెంట్ ఇక్కడ ఉంది .travis.yml:
# Установить язык
language: node_js
# Установить версию Node.js
node_js:
- '12'
services:
# Использовать командную строку Docker
- docker
install:
# Установить зависимости для тестов
- npm ci
before_script:
# Запустить сервер и клиент для тестов
- npm run dev &
script:
# Запустить тесты
- npm run test
రిపోజిటరీ యొక్క అన్ని శాఖల కోసం మరియు పుల్ అభ్యర్థనల కోసం చేసే చర్యలు ఇక్కడే ముగుస్తాయి.
▍ విస్తరణ
అన్ని స్వయంచాలక పరీక్షలు విజయవంతంగా పూర్తయ్యాయనే ఊహ ఆధారంగా, మేము ఐచ్ఛికం, ఉత్పత్తి సర్వర్కు కోడ్ని అమలు చేయవచ్చు. మేము దీన్ని బ్రాంచ్ నుండి కోడ్ కోసం మాత్రమే చేయాలనుకుంటున్నాము master, మేము విస్తరణ సెట్టింగ్లలో సిస్టమ్కు తగిన సూచనలను అందిస్తాము. మీ ప్రాజెక్ట్లో మేము తదుపరి చూడబోయే కోడ్ని ఉపయోగించడానికి మీరు ప్రయత్నించే ముందు, మీరు తప్పనిసరిగా డిప్లాయ్మెంట్ కోసం పిలవబడే వాస్తవ స్క్రిప్ట్ని కలిగి ఉండాలని నేను మిమ్మల్ని హెచ్చరించాలనుకుంటున్నాను.
deploy:
# Собрать Docker-контейнер и отправить его на Docker Hub
provider: script
script: bash deploy.sh
on:
branch: master
విస్తరణ స్క్రిప్ట్ రెండు సమస్యలను పరిష్కరిస్తుంది:
CI సాధనాన్ని ఉపయోగించి చిత్రాన్ని రూపొందించండి, ట్యాగ్ చేయండి మరియు డాకర్ హబ్కి పంపండి (మా విషయంలో, ట్రావిస్ CI).
సర్వర్లో చిత్రాన్ని లోడ్ చేయడం, పాత కంటైనర్ను ఆపివేసి కొత్తదాన్ని ప్రారంభించడం (మా విషయంలో, సర్వర్ డిజిటల్ ఓషన్ ప్లాట్ఫారమ్లో నడుస్తుంది).
ముందుగా, మీరు చిత్రాన్ని నిర్మించడం, ట్యాగ్ చేయడం మరియు డాకర్ హబ్కి నెట్టడం కోసం ఆటోమేటిక్ ప్రాసెస్ను సెటప్ చేయాలి. ఇమేజ్లకు ప్రత్యేకమైన ట్యాగ్లను కేటాయించడం మరియు లాగిన్లను ఆటోమేట్ చేయడం కోసం మాకు ఒక వ్యూహం అవసరం తప్ప, ఇది మనం ఇప్పటికే మాన్యువల్గా చేసిన దానికి చాలా పోలి ఉంటుంది. ట్యాగింగ్ వ్యూహం, లాగిన్, SSH కీ ఎన్కోడింగ్, SSH కనెక్షన్ స్థాపన వంటి విస్తరణ స్క్రిప్ట్కి సంబంధించిన కొన్ని వివరాలతో నేను ఇబ్బంది పడ్డాను. కానీ అదృష్టవశాత్తూ నా బాయ్ఫ్రెండ్ చాలా ఇతర విషయాల మాదిరిగానే బాష్తో చాలా మంచివాడు. ఈ స్క్రిప్ట్ రాయడంలో ఆయన నాకు సహాయం చేశారు.
కాబట్టి, స్క్రిప్ట్ యొక్క మొదటి భాగం చిత్రాన్ని డాకర్ హబ్కి అప్లోడ్ చేస్తోంది. దీన్ని చేయడం చాలా సులభం. నేను ఉపయోగించిన ట్యాగింగ్ స్కీమ్లో ఒక git హాష్ మరియు ఒక git ట్యాగ్ ఉన్నట్లయితే వాటిని కలపడం ఉంటుంది. ఇది ట్యాగ్ ప్రత్యేకమైనదని నిర్ధారిస్తుంది మరియు దాని ఆధారంగా ఉన్న అసెంబ్లీని గుర్తించడాన్ని సులభతరం చేస్తుంది. DOCKER_USERNAME и DOCKER_PASSWORD ట్రావిస్ CI ఇంటర్ఫేస్ని ఉపయోగించి సెట్ చేయగల వినియోగదారు పర్యావరణ వేరియబుల్స్. ట్రావిస్ CI స్వయంచాలకంగా సున్నితమైన డేటాను ప్రాసెస్ చేస్తుంది, తద్వారా అది తప్పు చేతుల్లోకి రాదు.
స్క్రిప్ట్ యొక్క మొదటి భాగం ఇక్కడ ఉంది deploy.sh.
#!/bin/sh
set -e # Остановить скрипт при наличии ошибок
IMAGE="<username>/<repository>" # Образ Docker
GIT_VERSION=$(git describe --always --abbrev --tags --long) # Git-хэш и теги
# Сборка и тегирование образа
docker build -t ${IMAGE}:${GIT_VERSION} .
docker tag ${IMAGE}:${GIT_VERSION} ${IMAGE}:latest
# Вход в Docker Hub и выгрузка образа
echo "${DOCKER_PASSWORD}" | docker login -u "${DOCKER_USERNAME}" --password-stdin
docker push ${IMAGE}:${GIT_VERSION}
స్క్రిప్ట్ యొక్క రెండవ భాగం ఎలా ఉంటుంది అనేది మీరు ఏ హోస్ట్ని ఉపయోగిస్తున్నారు మరియు దానికి కనెక్షన్ ఎలా నిర్వహించబడుతుందనే దానిపై పూర్తిగా ఆధారపడి ఉంటుంది. నా విషయంలో, నేను డిజిటల్ ఓషన్ని ఉపయోగిస్తున్నందున, సర్వర్కి కనెక్ట్ చేయడానికి నేను ఆదేశాలను ఉపయోగిస్తాను doctl. AWSతో పని చేస్తున్నప్పుడు, యుటిలిటీ ఉపయోగించబడుతుంది aws, మరియు మొదలైనవి.
సర్వర్ని సెటప్ చేయడం కష్టం కాదు. కాబట్టి, నేను బేస్ ఇమేజ్ ఆధారంగా ఒక బిందువును ఏర్పాటు చేసాను. నేను ఎంచుకున్న సిస్టమ్కు డాకర్ యొక్క వన్-టైమ్ మాన్యువల్ ఇన్స్టాలేషన్ మరియు డాకర్ యొక్క వన్-టైమ్ మాన్యువల్ లాంచ్ అవసరమని గమనించాలి. నేను డాకర్ని ఇన్స్టాల్ చేయడానికి ఉబుంటు 18.04ని ఉపయోగించాను, కాబట్టి మీరు కూడా అదే పని చేయడానికి ఉబుంటుని ఉపయోగిస్తుంటే, మీరు అనుసరించండి ఇది సాధారణ గైడ్.
నేను సేవ కోసం నిర్దిష్ట ఆదేశాల గురించి ఇక్కడ మాట్లాడటం లేదు, ఎందుకంటే ఈ అంశం వివిధ సందర్భాల్లో చాలా తేడా ఉంటుంది. ప్రాజెక్ట్ అమలు చేయబడే సర్వర్కు SSH ద్వారా కనెక్ట్ అయిన తర్వాత నేను చేయవలసిన సాధారణ కార్యాచరణ ప్రణాళికను ఇస్తాను:
ప్రస్తుతం నడుస్తున్న కంటైనర్ను కనుగొని దానిని ఆపాలి.
అప్పుడు మీరు నేపథ్యంలో కొత్త కంటైనర్ను ప్రారంభించాలి.
మీరు సర్వర్ యొక్క స్థానిక పోర్ట్ని సెట్ చేయాలి 80 - ఇది వంటి చిరునామాలో సైట్ని నమోదు చేయడానికి మిమ్మల్ని అనుమతిస్తుంది example.com, వంటి చిరునామాను ఉపయోగించకుండా, పోర్ట్ను పేర్కొనకుండా example.com:5000.
చివరగా, మీరు అన్ని పాత కంటైనర్లు మరియు చిత్రాలను తొలగించాలి.
స్క్రిప్ట్ యొక్క కొనసాగింపు ఇక్కడ ఉంది.
# Найти ID работающего контейнера
CONTAINER_ID=$(docker ps | grep takenote | cut -d" " -f1)
# Остановить старый контейнер, запустить новый, очистить систему
docker stop ${CONTAINER_ID}
docker run --restart unless-stopped -d -p 80:5000 ${IMAGE}:${GIT_VERSION}
docker system prune -a -f
శ్రద్ధ వహించాల్సిన కొన్ని విషయాలు
మీరు ట్రావిస్ CI నుండి SSH ద్వారా సర్వర్కి కనెక్ట్ చేసినప్పుడు, సిస్టమ్ వినియోగదారు ప్రతిస్పందన కోసం వేచి ఉన్నందున ఇన్స్టాలేషన్తో కొనసాగకుండా మిమ్మల్ని నిరోధించే హెచ్చరికను మీరు చూసే అవకాశం ఉంది.
The authenticity of host '<hostname> (<IP address>)' can't be established.
RSA key fingerprint is <key fingerprint>.
Are you sure you want to continue connecting (yes/no)?
స్ట్రింగ్ కీని బేస్64లో ఎన్కోడ్ చేయవచ్చని నేను తెలుసుకున్నాను, దానితో సౌకర్యవంతంగా మరియు విశ్వసనీయంగా పని చేసే రూపంలో సేవ్ చేయవచ్చు. ఇన్స్టాలేషన్ దశలో, మీరు పబ్లిక్ కీని డీకోడ్ చేసి ఫైల్కి వ్రాయవచ్చు known_hosts పైన పేర్కొన్న దోషాన్ని వదిలించుకోవడానికి.
కనెక్షన్ని స్థాపించేటప్పుడు అదే విధానాన్ని ప్రైవేట్ కీతో ఉపయోగించవచ్చు, ఎందుకంటే సర్వర్ని యాక్సెస్ చేయడానికి మీకు ప్రైవేట్ కీ అవసరం కావచ్చు. కీతో పని చేస్తున్నప్పుడు, అది ట్రావిస్ CI ఎన్విరాన్మెంట్ వేరియబుల్లో సురక్షితంగా నిల్వ చేయబడిందని మరియు అది ఎక్కడా ప్రదర్శించబడదని మీరు నిర్ధారించుకోవాలి.
గమనించదగ్గ మరో విషయం ఏమిటంటే, మీరు మొత్తం విస్తరణ స్క్రిప్ట్ను ఒక లైన్గా అమలు చేయాల్సి ఉంటుంది, ఉదాహరణకు - దీనితో doctl. దీనికి కొంత అదనపు ప్రయత్నం అవసరం కావచ్చు.
doctl compute ssh <droplet> --ssh-command "все команды будут здесь && здесь"
TLS/SSL మరియు లోడ్ బ్యాలెన్సింగ్
నేను పైన పేర్కొన్నవన్నీ చేసిన తర్వాత, నేను ఎదుర్కొన్న చివరి సమస్య ఏమిటంటే సర్వర్లో SSL లేదు. బలవంతం చేయడానికి నేను Node.js సర్వర్ని ఉపయోగిస్తున్నాను కాబట్టి పని చేయడానికి రివర్స్ ప్రాక్సీ Nginx మరియు లెట్స్ ఎన్క్రిప్ట్, మీరు చాలా టింకర్ చేయాలి.
నేను నిజంగా ఈ SSL కాన్ఫిగరేషన్ మొత్తాన్ని మాన్యువల్గా చేయాలనుకోలేదు, కాబట్టి నేను లోడ్ బ్యాలెన్సర్ని సృష్టించాను మరియు దాని వివరాలను DNSలో రికార్డ్ చేసాను. DigitalOcean విషయంలో, ఉదాహరణకు, లోడ్ బ్యాలెన్సర్పై స్వీయ-సంతకం చేసిన ధృవీకరణ పత్రాన్ని సృష్టించడం అనేది సరళమైన, ఉచిత మరియు వేగవంతమైన ప్రక్రియ. ఈ విధానం అదనపు ప్రయోజనాన్ని కలిగి ఉంది, అవసరమైతే లోడ్ బ్యాలెన్సర్ వెనుక నడుస్తున్న బహుళ సర్వర్లలో SSLని సెటప్ చేయడం చాలా సులభం చేస్తుంది. ఇది సర్వర్లు స్వయంగా SSL గురించి "ఆలోచించకుండా" అనుమతిస్తుంది, కానీ అదే సమయంలో ఎప్పటిలాగే పోర్ట్ను ఉపయోగించండి 80. కాబట్టి SSLని సెటప్ చేసే ప్రత్యామ్నాయ పద్ధతుల కంటే లోడ్ బాలన్సర్పై SSLని సెటప్ చేయడం చాలా సులభం మరియు మరింత సౌకర్యవంతంగా ఉంటుంది.
ఇప్పుడు మీరు ఇన్కమింగ్ కనెక్షన్లను అంగీకరించే సర్వర్లోని అన్ని పోర్ట్లను మూసివేయవచ్చు - పోర్ట్ మినహా 80, లోడ్ బ్యాలెన్సర్ మరియు పోర్ట్తో కమ్యూనికేట్ చేయడానికి ఉపయోగిస్తారు 22 SSH కోసం. ఫలితంగా, ఈ రెండు కాకుండా ఇతర పోర్ట్లలో సర్వర్ని నేరుగా యాక్సెస్ చేసే ప్రయత్నం విఫలమవుతుంది.
ఫలితాలు
నేను ఈ మెటీరియల్లో మాట్లాడిన ప్రతిదాన్ని చేసిన తర్వాత, డాకర్ ప్లాట్ఫారమ్ లేదా ఆటోమేటెడ్ CI/CD చైన్ల భావనలు నన్ను భయపెట్టలేదు. నేను నిరంతర ఏకీకరణ గొలుసును సెటప్ చేయగలిగాను, ఈ సమయంలో కోడ్ ఉత్పత్తికి వెళ్లే ముందు పరీక్షించబడుతుంది మరియు కోడ్ స్వయంచాలకంగా సర్వర్లో అమలు చేయబడుతుంది. ఇవన్నీ ఇప్పటికీ నాకు చాలా కొత్తవి మరియు నా ఆటోమేటెడ్ వర్క్ఫ్లోను మెరుగుపరచడానికి మరియు మరింత సమర్థవంతంగా చేయడానికి మార్గాలు ఉన్నాయని నేను ఖచ్చితంగా అనుకుంటున్నాను. కాబట్టి ఈ విషయంలో మీకు ఏవైనా ఆలోచనలు ఉంటే, దయచేసి నాకు తెలియజేయండి. నాకు తెలుసు. మీ ప్రయత్నాలలో ఈ వ్యాసం మీకు సహాయపడిందని నేను ఆశిస్తున్నాను. ఇది చదివిన తర్వాత, నేను దాని గురించి మాట్లాడిన ప్రతిదాన్ని గుర్తించేటప్పుడు నేను నేర్చుకున్నంత మీరు నేర్చుకున్నారని నేను నమ్మాలనుకుంటున్నాను.
PS మా లో మార్కెట్ ఒక చిత్రం ఉంది డాకర్, ఇది ఒక క్లిక్లో ఇన్స్టాల్ చేయబడుతుంది. మీరు కంటైనర్ల ఆపరేషన్ను ఇక్కడ తనిఖీ చేయవచ్చు VP లను. కొత్త క్లయింట్లందరికీ 3 రోజుల పరీక్ష ఉచితంగా ఇవ్వబడుతుంది.
ప్రియమైన పాఠకులారా! మీరు మీ ప్రాజెక్ట్లలో CI/CD సాంకేతికతలను ఉపయోగిస్తున్నారా?