የ CI / ሲዲ ሰንሰለት መፍጠር እና ከዶከር ጋር በራስ ሰር መስራት

በ90ዎቹ መገባደጃ ላይ የመጀመሪያ ድረ-ገጾቼን ጻፍኩ። ያኔ እነሱን ወደ ሥራ ቅደም ተከተል ማስቀመጥ በጣም ቀላል ነበር። በአንዳንድ የተጋራ ማስተናገጃ ላይ Apache አገልጋይ ነበረ፣ ይህን የመሰለ ነገር በመጻፍ በኤፍቲፒ በኩል ወደዚህ አገልጋይ መግባት ይችላሉ። ftp://ftp.example.com. ከዚያ የአንተን ስም እና የይለፍ ቃል አስገባ እና ፋይሎቹን ወደ አገልጋዩ መስቀል አለብህ። የተለያዩ ጊዜያት ነበሩ, ሁሉም ነገር ከአሁኑ ይልቅ ቀላል ነበር.

የ CI / ሲዲ ሰንሰለት መፍጠር እና ከዶከር ጋር በራስ ሰር መስራት

ከዚያን ጊዜ ጀምሮ ባሉት ሁለት አስርት ዓመታት ውስጥ ሁሉም ነገር በጣም ተለውጧል. ድረ-ገጾች ይበልጥ ውስብስብ ሆነዋል፤ ወደ ምርት ከመውጣታቸው በፊት መገጣጠም አለባቸው። አንድ ነጠላ አገልጋይ ከሎድ ሚዛኖች በስተጀርባ የሚሄዱ ብዙ አገልጋዮች ሆነዋል፣ እና የስሪት ቁጥጥር ስርዓቶችን መጠቀም የተለመደ ሆነ።

ለግል ፕሮጄክቴ ልዩ ውቅር ነበረኝ። እና አንድ እርምጃ ብቻ በመስራት ጣቢያውን በምርት ውስጥ የማሰማራት ችሎታ እንደሚያስፈልገኝ አውቃለሁ: ኮድ ወደ ቅርንጫፍ መፃፍ master በ GitHub ላይ. በተጨማሪም፣ የእኔን ትንሽ የድር መተግበሪያ አሠራር ለማረጋገጥ፣ ግዙፍ የኩበርኔትስ ክላስተርን ማስተዳደር፣ ወይም Docker Swarm ቴክኖሎጂን መጠቀም፣ ወይም ፖድ፣ ኤጀንቶችን እና ሌሎች ሁሉንም አይነት አገልጋዮችን መያዝ እንደማልፈልግ አውቃለሁ። ውስብስብ ነገሮች. ሥራን በተቻለ መጠን ቀላል ለማድረግ ግቡን ለማሳካት ከ CI/CD ጋር መተዋወቅ ነበረብኝ።

ትንሽ ፕሮጀክት ካሎት (በዚህ ጉዳይ ላይ የ Node.js ፕሮጀክት) እና የዚህን ፕሮጀክት ስርጭት እንዴት በራስ-ሰር እንደሚሰሩ ማወቅ ይፈልጋሉ, በማጠራቀሚያው ውስጥ የተከማቸ ነገር በትክክል በምርት ላይ ከሚሰራው ጋር እንደሚዛመድ, ከዚያም እኔ በዚህ ጽሑፍ ላይ ፍላጎት ሊኖርዎት ይችላል ብለው ያስባሉ.

ቅድመ ሁኔታዎች

የዚህ ጽሑፍ አንባቢ የትእዛዝ መስመሩን መሰረታዊ ግንዛቤ እና የባሽ ስክሪፕቶችን መፃፍ ይጠበቃል። በተጨማሪም, እሱ መለያዎች ያስፈልገዋል Travis CI и Docker ማዕከል.

ዓላማዎች

ይህ ጽሑፍ ያለምንም ቅድመ ሁኔታ "የመማሪያ" ተብሎ ሊጠራ ይችላል አልልም. ይህ ስለተማርኩት ነገር የማወራበት እና ኮድን ለመፈተሽ እና ለማሰማራት የሚስማማኝን ሂደት የምገልጽበት፣ በአንድ አውቶሜትድ ፓስፖርት የተከናወነ ነው።

የእኔ የስራ ሂደት ያበቃው ይህ ነው።

በስተቀር በማንኛውም የማከማቻ ቅርንጫፍ ላይ ለተለጠፈ ኮድ master, የሚከተሉት ድርጊቶች ይከናወናሉ:

  • በ Travis CI ላይ የፕሮጀክቱ ግንባታ ይጀምራል.
  • ሁሉም ዩኒት ፣ ውህደት እና ከጫፍ እስከ ጫፍ ሙከራዎች ይከናወናሉ።

ለወደቀው ኮድ ብቻ master, የሚከተለው ይከናወናል.

  • ከላይ የተጠቀሰው ሁሉ, በተጨማሪም ...
  • አሁን ባለው ኮድ፣ ቅንጅቶች እና አካባቢ ላይ በመመስረት የዶከር ምስል መገንባት።
  • ምስሉን ወደ Docker Hub በማሰማራት ላይ።
  • ከአምራች አገልጋይ ጋር ግንኙነት.
  • ከDocker Hub ወደ አገልጋዩ ምስል በመስቀል ላይ።
  • የአሁኑን መያዣ ማቆም እና በአዲሱ ምስል ላይ በመመስረት አዲስ መጀመር.

ስለ ዶከር፣ ምስሎች እና መያዣዎች ምንም የሚያውቁት ነገር ከሌለ፣ አይጨነቁ። ስለ እሱ ሁሉንም እነግራችኋለሁ።

CI/CD ምንድን ነው?

CI/CD ምህጻረ ቃል “ቀጣይ ውህደት/ቀጣይ ማሰማራት” ማለት ነው።

▍ ቀጣይነት ያለው ውህደት

ቀጣይነት ያለው ውህደት ገንቢዎች የፕሮጀክቱን ዋና ምንጭ ኮድ ማከማቻ (ብዙውን ጊዜ ቅርንጫፍ) ላይ ቃል የሚገቡበት ሂደት ነው። master). በተመሳሳይ ጊዜ የኮዱ ጥራት በራስ-ሰር በመሞከር ይረጋገጣል.

▍ቀጣይነት ማሰማራት

ቀጣይነት ያለው ማሰማራት ተደጋጋሚ፣ በራስ ሰር ኮድ ወደ ምርት ማሰማራት ነው። የCI/ሲዲ ምህጻረ ቃል ሁለተኛ ክፍል አንዳንድ ጊዜ “ቀጣይ ማድረስ” ተብሎ ይገለጻል። ይህ በመሠረቱ "ቀጣይ ማሰማራት" ጋር ተመሳሳይ ነው, ነገር ግን "ቀጣይ ማድረስ" የፕሮጀክቱን የማሰማራት ሂደት ከመጀመሩ በፊት ለውጦችን በእጅ ማረጋገጥ አስፈላጊ መሆኑን ያመለክታል.

ቢያስቆጥርም ገና መጀመሩ ነው

ይህን ሁሉ የተማርኩበት አፕ ይባላል ማስታወሻ ይውሰዱ. ይህ የምሰራበት የድረ-ገጽ ፕሮጀክት ማስታወሻ ለመያዝ የተነደፈ ነው። መጀመሪያ ላይ ለማድረግ ሞከርኩ። JAMStack-ፕሮጀክት፣ ወይም የፊት-መጨረሻ መተግበሪያ ያለ አገልጋይ፣ የሚያቀርበውን መደበኛ ማስተናገጃ እና የፕሮጀክት ማሰማራት አቅም ለመጠቀም። እንደገና አረጋግጥ. የመተግበሪያው ውስብስብነት እያደገ ሲሄድ፣ የአገልጋዩን ክፍል መፍጠር ነበረብኝ፣ ይህ ማለት በራስ-ሰር ለማዋሃድ እና ፕሮጀክቱን በራስ-ሰር ለማሰማራት የራሴን ስልት መቅረጽ አለብኝ።

በእኔ ሁኔታ አፕሊኬሽኑ በ Node.js አካባቢ የሚሰራ ኤክስፕረስ አገልጋይ ነው፣ ባለአንድ ገጽ React መተግበሪያን የሚያገለግል እና ደህንነቱ የተጠበቀ የአገልጋይ ጎን ኤፒአይን ይደግፋል። ይህ አርክቴክቸር በውስጡ የሚገኘውን ስልት ይከተላል ተሰጥቷል ሙሉ ቁልል የማረጋገጫ መመሪያ።

ጋር ተማከርኩ። ጓደኛ, ማን የአውቶሜሽን ባለሙያ ነው, እና ሁሉንም ነገር እኔ በፈለኩት መንገድ እንዲሰራ ምን ማድረግ እንዳለብኝ ጠየቀው. በዚህ ጽሑፍ የግብ ክፍል ውስጥ የተገለፀው አውቶሜትድ የስራ ፍሰት ምን መምሰል እንዳለበት ሀሳብ ሰጠኝ። እነዚህን ግቦች ማግኘቴ Dockerን እንዴት መጠቀም እንዳለብኝ ማወቅ አለብኝ ማለት ነው።

Docker

ዶከር ለኮንቴይነሬሽን ቴክኖሎጂ ምስጋና ይግባውና አፕሊኬሽኖች በቀላሉ እንዲሰራጭ፣ እንዲሰማሩ እና በተመሳሳይ አካባቢ እንዲሰሩ የሚያስችል መሳሪያ ነው፣ ምንም እንኳን የዶከር መድረክ እራሱ በተለያዩ አካባቢዎች የሚሰራ ቢሆንም። በመጀመሪያ፣ በዶከር የትእዛዝ መስመር መሳሪያዎች (CLI) ላይ እጄን ማግኘት ነበረብኝ። መመሪያዎች የዶከር መጫኛ መመሪያ በጣም ግልጽ እና ሊረዳ የሚችል ተብሎ ሊጠራ አይችልም ነገር ግን ከእሱ መማር ይችላሉ የመጀመሪያውን የመጫኛ እርምጃ ለመውሰድ Docker Desktop (ለ Mac ወይም Windows) ማውረድ ያስፈልግዎታል.

Docker Hub በግምት ተመሳሳይ ነገር ነው። የፊልሙ ለጂት ማከማቻዎች ወይም መዝገብ ቤት ጥዋት ለጃቫስክሪፕት ፓኬጆች። ይህ ለዶከር ምስሎች የመስመር ላይ ማከማቻ ነው። Docker ዴስክቶፕ የሚያገናኘው ይህ ነው።

ስለዚህ፣ በዶከር ለመጀመር፣ ሁለት ነገሮችን ማድረግ ያስፈልግዎታል፡-

ከዚህ በኋላ የዶከር ስሪቱን ለመፈተሽ የሚከተለውን ትዕዛዝ በማሄድ Docker CLI እየሰራ መሆኑን ማረጋገጥ ይችላሉ፡

docker -v

በመቀጠል፣ ሲጠየቁ የተጠቃሚ ስምዎን እና የይለፍ ቃልዎን በማስገባት ወደ Docker Hub ይግቡ፡-

docker login

ዶከርን ለመጠቀም የምስሎችን እና የመያዣዎችን ጽንሰ-ሀሳቦች መረዳት አለብዎት።

▍ ምስሎች

ምስል መያዣውን ለመገጣጠም መመሪያዎችን የያዘ እንደ ንድፍ ያለ ነገር ነው. ይህ የማይለወጥ የመተግበሪያው የፋይል ስርዓት እና መቼቶች ቅጽበታዊ ገጽ እይታ ነው። ገንቢዎች በቀላሉ ምስሎችን ማጋራት ይችላሉ።

# Вывод сведений обо всех образах
docker images

ይህ ትእዛዝ በሚከተለው ራስጌ ሠንጠረዥ ያወጣል።

REPOSITORY     TAG     IMAGE ID     CREATED     SIZE
---

ቀጥሎም አንዳንድ የትዕዛዝ ምሳሌዎችን በተመሳሳይ ቅርጸት እንመለከታለን - በመጀመሪያ አስተያየት ያለው ትእዛዝ አለ ፣ እና ከዚያ ምን ሊያወጣ እንደሚችል የሚያሳይ ምሳሌ።

▍ ኮንቴይነሮች

ኮንቴይነር አፕሊኬሽኑን ለማስኬድ የሚያስፈልጉትን ነገሮች ሁሉ የያዘ ሊተገበር የሚችል ጥቅል ነው። ከዚህ አቀራረብ ጋር ያለው መተግበሪያ መሠረተ ልማቱ ምንም ይሁን ምን ሁልጊዜ ተመሳሳይ ነው የሚሰራው: በገለልተኛ አካባቢ እና በተመሳሳይ አካባቢ. ነጥቡ ተመሳሳይ ምስል ያላቸው አጋጣሚዎች በተለያዩ አከባቢዎች መጀመራቸው ነው።

# Перечисление всех контейнеров
docker ps -a
CONTAINER ID     IMAGE     COMMAND     CREATED     STATUS     PORTS     NAMES
---

▍ መለያዎች

መለያ የአንድ የተወሰነ ምስል ስሪት ማሳያ ነው።

▍ ለዶከር ትዕዛዞች ፈጣን ማጣቀሻ

አንዳንድ በብዛት ጥቅም ላይ የዋሉ Docker ትዕዛዞች አጠቃላይ እይታ ይኸውና።

ቡድን

ዐውደ-ጽሑፍ

ውጤት

ዶከር ግንባታ

ምስል

ከDockerfile ምስል መገንባት

ዶከር መለያ

ምስል

ምስል መለያ መስጠት

የዳኪ ገፃፊ ምስሎች

ምስል

ምስሎችን መዘርዘር

ዳኮለር ሩጫ

ኮንቴይነር

በምስል ላይ በመመስረት መያዣን ማካሄድ

ዶከር መግፋት

ምስል

ምስል ወደ መዝገቡ በመስቀል ላይ

ዶከር-መጎተት

ምስል

ከመዝገቡ ውስጥ ምስልን በመጫን ላይ

docker ps

ኮንቴይነር

መያዣዎችን መዘርዘር

ዶከር ስርዓት ፕሪም

ምስል/መያዣ

ጥቅም ላይ ያልዋሉ መያዣዎችን እና ምስሎችን ማስወገድ

ዶከርፋይል

የማምረቻ መተግበሪያን በአገር ውስጥ እንዴት ማስኬድ እንዳለብኝ አውቃለሁ። ዝግጁ የሆነ React መተግበሪያን ለመገንባት የተነደፈ የዌብፓክ ውቅር አለኝ። በመቀጠል፣ Node.js ላይ የተመሰረተ አገልጋይ በወደቡ ላይ የሚጀምር ትእዛዝ አለኝ 5000. ይህን ይመስላል።

npm i         # установка зависимостей
npm run build # сборка React-приложения
npm run start # запуск Node-сервера

ለዚህ ቁሳቁስ ምሳሌ የሚሆን ማመልከቻ እንደሌለኝ ልብ ሊባል ይገባል. ግን እዚህ, ለሙከራዎች, ማንኛውም ቀላል የመስቀለኛ ትግበራ ይሰራል.

መያዣውን ለመጠቀም ለዶከር መመሪያዎችን መስጠት ያስፈልግዎታል. ይህ የሚከናወነው በተጠራው ፋይል ነው Dockerfile, በፕሮጀክቱ ስር ማውጫ ውስጥ ይገኛል. ይህ ፋይል መጀመሪያ ላይ በጣም ለመረዳት የማይቻል ይመስላል።

ነገር ግን በውስጡ የያዘው ልዩ ትዕዛዞችን ብቻ የሚገልፀው የስራ አካባቢን ከማዘጋጀት ጋር ተመሳሳይ ነው. ከእነዚህ ትዕዛዞች መካከል ጥቂቶቹ እነሆ፡-

  • ከ - ይህ ትእዛዝ ፋይል ይጀምራል። መያዣው የተገነባበትን የመሠረት ምስል ይገልጻል.
  • ቅጂ - ፋይሎችን ከአካባቢያዊ ምንጭ ወደ መያዣ መገልበጥ.
  • WORKDIR - የስራ ማውጫውን ለሚከተሉት ትዕዛዞች በማዘጋጀት ላይ።
  • ፍንጭ - ትዕዛዞችን ያሂዱ.
  • መጋለጥ - ወደብ ቅንብሮች.
  • መግቢያ ነጥብ - የሚፈጸመው ትዕዛዝ ምልክት.

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, ተግባሮቹ በጣም ቀላል ናቸው. ምስሉን ወደ Docker Hub ከመግፋትዎ በፊት፣ በአካባቢው መሞከር አለብዎት።

▍ስብሰባ

በመጀመሪያ መሰብሰብ ያስፈልግዎታል ምስልስምን በመጥቀስ እና እንደ አማራጭ መለያ (መለያ ካልተገለፀ ስርዓቱ በራስ-ሰር በምስሉ ላይ መለያ ይሰጣል) latest).

# Сборка образа
docker build -t <image>:<tag> .

ይህን ትእዛዝ ከጨረሱ በኋላ, Docker ምስሉን ሲገነባ ማየት ይችላሉ.

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 Hub ማውረድ መቻል አለብን። ይህ ማለት በመጀመሪያ በ Docker Hub ላይ ለፕሮጀክቱ ማጠራቀሚያ መፍጠር ያስፈልግዎታል ማለት ነው. ከዚህ በኋላ, ምስሉን የምንልክበት ቦታ ይኖረናል. ስሟ በእኛ Docker Hub የተጠቃሚ ስም እንዲጀምር ምስሉ እንደገና መሰየም አለበት። ይህ በማከማቻው ስም መከተል አለበት. ማንኛውም መለያ በስሙ መጨረሻ ላይ ሊቀመጥ ይችላል. ይህን እቅድ በመጠቀም ምስሎችን የመሰየም ምሳሌ ከዚህ በታች አለ።

አሁን ምስሉን በአዲስ ስም መገንባት እና ትዕዛዙን ማስኬድ ይችላሉ docker push ወደ Docker Hub ማከማቻ ለመግፋት።

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

ሁሉም ነገር ጥሩ ከሆነ ምስሉ በ Docker Hub ላይ ይገኛል እና በቀላሉ ወደ አገልጋዩ ሊሰቀል ወይም ወደ ሌሎች ገንቢዎች ሊተላለፍ ይችላል።

ቀጣይ እርምጃዎች

በአሁኑ ጊዜ ማመልከቻው በዶከር ኮንቴይነር መልክ በአገር ውስጥ እየሰራ መሆኑን አረጋግጠናል። መያዣውን ወደ Docker Hub ሰቅለነዋል። ይህ ሁሉ ማለት ቀደም ብለን ወደ ግባችን በጣም ጥሩ እድገት አድርገናል ማለት ነው። አሁን ሁለት ተጨማሪ ጥያቄዎችን መፍታት ያስፈልገናል.

  • ኮድን ለመፈተሽ እና ለማሰማራት የ CI መሣሪያን በማዘጋጀት ላይ።
  • ፕሮዳክሽን አገልጋዩን በማዋቀር ኮዳችንን እንዲያወርድ እና እንዲሰራ ማድረግ።

በእኛ ሁኔታ, እንጠቀማለን Travis CI. እንደ አገልጋይ - DitigalOcean.

እዚህ ሌላ የአገልግሎቶች ጥምረት መጠቀም እንደሚችሉ ልብ ሊባል ይገባል. ለምሳሌ፣ ከ Travis CI ይልቅ CircleCI ወይም Github Actionsን መጠቀም ይችላሉ። እና በዲጂታልኦሴን ፋንታ - AWS ወይም Linode.

ከ Travis CI ጋር ለመስራት ወሰንን, እና በዚህ አገልግሎት ውስጥ ቀድሞውኑ የተዋቀረ ነገር አለኝ. ስለዚህ, አሁን ለስራ እንዴት ማዘጋጀት እንዳለብኝ በአጭሩ እናገራለሁ.

Travis CI

ትራቪስ ሲአይ ኮድን ለመፈተሽ እና ለማሰማራት መሳሪያ ነው። እያንዳንዱ ፕሮጀክት ልዩ ስለሆነ ትራቪስ ሲ አይን በማዋቀር ወደ ውስብስብ ችግሮች መሄድ አልፈልግም ፣ እና ይህ ብዙ ጥቅም አያስገኝም። ነገር ግን Travis CI ለመጠቀም ከወሰኑ እርስዎን ለመጀመር መሰረታዊ ነገሮችን እሸፍናለሁ። Travis CI፣ CircleCI፣ Jenkins ወይም ሌላ ነገር ከመረጡ፣ ተመሳሳይ የማዋቀር ዘዴዎች በሁሉም ቦታ ጥቅም ላይ ይውላሉ።

በ Travis CI ለመጀመር ወደ ይሂዱ የፕሮጀክት ድር ጣቢያ እና መለያ ይፍጠሩ። ከዚያ Travis CIን ከ GitHub መለያዎ ጋር ያዋህዱ። ስርዓቱን ሲያዋቅሩ ስራን በራስ-ሰር ለማሰራት እና ወደ እሱ መዳረሻ ለማንቃት የሚፈልጉትን ማከማቻ መግለፅ ያስፈልግዎታል። (እኔ GitHub እጠቀማለሁ፣ ግን እርግጠኛ ነኝ Travis CI ከ BitBucket፣ እና GitLab እና ሌሎች ተመሳሳይ አገልግሎቶች ጋር ሊዋሃድ ይችላል።)

Travis CI በጀመረ ቁጥር አገልጋዩ ተጀምሯል፣ በማዋቀሪያ ፋይሉ ውስጥ የተገለጹትን ትእዛዞች በመፈፀም ተጓዳኝ የመረጃ ማከማቻ ቅርንጫፎችን ማሰማራትን ጨምሮ።

▍የሥራ የሕይወት ዑደት

Travis 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

▍ ሙከራ

በማዋቀሪያው ፋይል ውስጥ የአካባቢውን Travis CI አገልጋይ ላዋቅር ነው። መስቀለኛ መንገድ 12ን እንደ ቋንቋው መርጬዋለሁ እና ስርዓቱ Docker ለመጠቀም የሚያስፈልጉትን ጥገኞች እንዲጭን ነግሬው ነበር።

የተዘረዘረው ሁሉ .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 መሣሪያን በመጠቀም ምስሉን ይገንቡ ፣ መለያ ይስጡ እና ወደ Docker Hub ይላኩ (በእኛ ሁኔታ ፣ Travis CI)።
  • ምስሉን በአገልጋዩ ላይ መጫን, የድሮውን መያዣ ማቆም እና አዲስ መጀመር (በእኛ ሁኔታ, አገልጋዩ በ DigitalOcean መድረክ ላይ ይሰራል).

በመጀመሪያ ምስሉን ለመገንባት፣መለያ ለመስጠት እና ወደ Docker Hub ለመግፋት አውቶማቲክ ሂደት ማዘጋጀት ያስፈልግዎታል። ልዩ መለያዎችን በምስሎች ላይ ለመመደብ እና መግቢያዎችን በራስ ሰር የማዘጋጀት ስልት ካስፈለገን በስተቀር ይህ ሁሉ በእጅ ካደረግነው ጋር በጣም ተመሳሳይ ነው። እንደ የመለያ ስልት፣ መግቢያ፣ የኤስኤስኤች ቁልፍ ኢንኮዲንግ፣ የኤስኤስኤች ግንኙነት መመስረት ባሉ አንዳንድ የማሰማራቱ ስክሪፕት ዝርዝሮች ላይ ችግር ነበረብኝ። ግን እንደ እድል ሆኖ የወንድ ጓደኛዬ እንደ ሌሎች ብዙ ነገሮች ከባሽ ጋር በጣም ጥሩ ነው። ይህን ስክሪፕት እንድጽፍ ረድቶኛል።

ስለዚህ፣ የስክሪፕቱ የመጀመሪያ ክፍል ምስሉን ወደ Docker Hub እየሰቀለ ነው። ይህን ማድረግ በጣም ቀላል ነው። የተጠቀምኩበት የመለያ ዘዴ የጂት ሃሽ እና የጂት ታግ ካለ አንድ ላይ ማጣመርን ያካትታል። ይህ መለያው ልዩ መሆኑን ያረጋግጣል እና የተመሰረተበትን ስብሰባ ለመለየት ቀላል ያደርገዋል. DOCKER_USERNAME и DOCKER_PASSWORD Travis CI በይነገጽን በመጠቀም ሊዋቀሩ የሚችሉ የተጠቃሚ አካባቢ ተለዋዋጮች ናቸው። Travis 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

ትኩረት ሊሰጣቸው የሚገቡ አንዳንድ ነገሮች

በSSH በኩል ከ Travis CI ከአገልጋዩ ጋር ሲገናኙ ስርዓቱ የተጠቃሚውን ምላሽ ስለሚጠብቅ መጫኑን እንዳይቀጥሉ የሚያደርግ ማስጠንቀቂያ ያያሉ።

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)?

የሕብረቁምፊ ቁልፍ በአመቺ እና በአስተማማኝ ሁኔታ ሊሰራበት በሚችል ቅጽ ለማስቀመጥ በbase64 ውስጥ መመሳጠር እንደሚቻል ተማርኩ። በመጫኛ ደረጃ, የአደባባይ ቁልፉን መፍታት እና በፋይል ላይ መፃፍ ይችላሉ known_hosts ከላይ ያለውን ስህተት ለማስወገድ.

echo <public key> | base64 # выводит <публичный ключ, закодированный в base64>

በተግባር ይህ ትእዛዝ ይህን ሊመስል ይችላል፡-

echo "123.45.67.89 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU
GPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3
Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA
t3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En
mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx
NrRFi9wrf+M7Q== [email protected]" | base64

እና የሚያመነጨው ይኸውና - ቤዝ64 ኮድ የተደረገ ሕብረቁምፊ፡

MTIzLjQ1LjY3Ljg5IHNzaC1yc2EgQUFBQUIzTnphQzF5YzJFQUFBQUJJd0FBQVFFQWtsT1Vwa0RIcmZIWTE3U2JybVRJcE5MVEdLOVRqb20vQldEU1UKR1BsK25hZnpsSERUWVc3aGRJNHlaNWV3MThKSDRKVzlqYmhVRnJ2aVF6TTd4bEVMRVZmNGg5bEZYNVFWa2JQcHBTd2cwY2RhMwpQYnY3a09kSi9NVHlCbFdYRkNSK0hBbzNGWFJpdEJxeGlYMW5LaFhwSEFac01jaUxxOFY2UmpzTkFRd2RzZE1GdlNsVksvN1hBCnQzRmFvSm9Bc25jTTFROXg1KzNWMFd3NjgvZUlGbWIxenVVRmxqUUpLcHJyWDg4WHlwTkR2allOYnk2dncvUGIwcndlcnQvRW4KbVorQVc0T1pQblRQSTg5WlBtVk1MdWF5ckQyY0U4NlovaWw4YitndzNyMysxbkthdG1Ja2puMnNvMWQwMVFyYVRsTXFWU3NieApOclJGaTl3cmYrTTdRPT0geW91QGV4YW1wbGUuY29tCg==

ከላይ የተጠቀሰው ትዕዛዝ ይኸውና

install:
  - echo < публичный ключ, закодированный в base64> | base64 -d >> $HOME/.ssh/known_hosts

ግንኙነት በሚፈጥሩበት ጊዜ ከግል ቁልፍ ጋር ተመሳሳይ ዘዴ መጠቀም ይቻላል ምክንያቱም አገልጋዩን ለማግኘት የግል ቁልፍ ሊያስፈልግዎ ስለሚችል። ከቁልፉ ጋር ሲሰሩ በTravis CI አካባቢ ተለዋዋጭ ውስጥ ደህንነቱ በተጠበቀ ሁኔታ መከማቸቱን እና በየትኛውም ቦታ እንደማይታይ ማረጋገጥ ብቻ ያስፈልግዎታል።

ሌላው ልብ ሊባል የሚገባው ነገር ሙሉውን የማሰማራት ስክሪፕት እንደ አንድ መስመር ለምሳሌ - በ doctl. ይህ የተወሰነ ተጨማሪ ጥረት ሊጠይቅ ይችላል።

doctl compute ssh <droplet> --ssh-command "все команды будут здесь && здесь"

TLS/SSL እና የጭነት ማመጣጠን

ከላይ የተጠቀሰውን ሁሉ ካደረግኩ በኋላ, ያጋጠመኝ የመጨረሻው ችግር አገልጋዩ SSL የለውም. ለማስገደድ የ Node.js አገልጋይ ስለምጠቀም ለመስራት Reverse proxy Nginx እና Let's Encrypt፣ ብዙ ማጠር አለብህ።

ይህንን ሁሉ የኤስኤስኤል ውቅረት በእጄ ማድረግ አልፈለግኩም፣ ስለዚህ የሎድ ሚዛን ፈጠርኩ እና ዝርዝሮቹን በዲ ኤን ኤስ ውስጥ መዝግቤያለው። ለምሳሌ በዲጂታል ውቅያኖስ ጉዳይ ላይ በሎድ ሚዛኑ ላይ በራስ-ሰር የሚያድስ የራስ ፊርማ ሰርተፍኬት መፍጠር ቀላል፣ ነፃ እና ፈጣን አሰራር ነው። ይህ አካሄድ አስፈላጊ ከሆነ ከሎድ ሚዛን ጀርባ በሚሄዱ በርካታ አገልጋዮች ላይ SSLን ማዋቀር በጣም ቀላል የሚያደርገው ተጨማሪ ጥቅም አለው። ይህ አገልጋዮቹ ራሳቸው ስለኤስኤስኤል “እንዲያስቡ” ያስችላቸዋል ፣ ግን በተመሳሳይ ጊዜ ወደብ እንደተለመደው ይጠቀሙ 80. ስለዚህ ኤስኤስኤልን በሎድ ሚዛን ማዋቀር ኤስኤስኤልን ከማዋቀር አማራጭ ዘዴዎች የበለጠ ቀላል እና ምቹ ነው።

አሁን ገቢ ግንኙነቶችን የሚቀበሉ ሁሉንም ወደቦች በአገልጋዩ ላይ መዝጋት ይችላሉ - ከወደቡ በስተቀር 80, ከጭነት ሚዛን እና ከወደብ ጋር ለመገናኘት ያገለግላል 22 ለኤስኤስኤች. በውጤቱም ከእነዚህ ሁለቱ ውጭ ባሉ ወደቦች ላይ አገልጋዩን በቀጥታ ለማግኘት የተደረገው ሙከራ አይሳካም።

ውጤቶች

በዚህ ጽሑፍ ውስጥ የተናገርኩትን ሁሉ ካደረግኩ በኋላ፣ የዶከር መድረክም ሆነ ራስ-ሰር የሲአይ/ሲዲ ሰንሰለቶች ጽንሰ-ሀሳቦች ከእንግዲህ አያስፈሩኝም። ቀጣይነት ያለው ውህደት ሰንሰለት ማዘጋጀት ችያለሁ, በዚህ ጊዜ ኮዱ ወደ ምርት ከመግባቱ በፊት ይሞከራል እና ኮዱ በራስ-ሰር በአገልጋዩ ላይ ይጫናል. ይህ ሁሉ አሁንም ለእኔ በአንፃራዊነት አዲስ ነው፣ እና የእኔን አውቶሜትድ የስራ ሂደት ለማሻሻል እና የበለጠ ቀልጣፋ ለማድረግ መንገዶች እንዳሉ እርግጠኛ ነኝ። ስለዚህ በዚህ ጉዳይ ላይ ሀሳብ ካሎት እባክዎን ያሳውቁኝ። ለእኔ። ማወቅ። ይህ ጽሑፍ በጥረታችሁ ውስጥ እንደረዳችሁ ተስፋ አደርጋለሁ። መጽሐፉን ካነበብኩ በኋላ የተማርኩትን ያህል የተማርከው በእሱ ውስጥ የተናገርኩትን ሁሉ እያወቅክ እንደሆነ ማመን እፈልጋለሁ።

PS በእኛ ውስጥ የገበያ ቦታ ምስል አለ። Docker, በአንድ ጠቅታ ውስጥ የተጫነ. ኮንቴይነሮችን መስራቱን ማረጋገጥ ይችላሉ VPS. ሁሉም አዲስ ደንበኞች ለ 3 ቀናት የሙከራ ጊዜ በነጻ ይሰጣቸዋል።

ውድ አንባቢዎች! በፕሮጀክቶችዎ ውስጥ CI/CD ቴክኖሎጂዎችን ይጠቀማሉ?

የ CI / ሲዲ ሰንሰለት መፍጠር እና ከዶከር ጋር በራስ ሰር መስራት

ምንጭ: hab.com

አስተያየት ያክሉ