د CI / CD سلسله رامینځته کول او د ډاکر سره کار اتومات کول

ما د 90 لسیزې په وروستیو کې زما لومړنۍ ویب پاڼې لیکلي. وروسته بیا دا خورا اسانه وه چې دوی په کاري ترتیب کې واچول شي. په یو څه شریک شوي کوربه توب کې د اپاچي سرور شتون درلود ، تاسو کولی شئ د FTP له لارې دې سرور ته د یو څه لیکلو سره ننوځئ ftp://ftp.example.com. بیا تاسو باید خپل نوم او پټنوم دننه کړئ او فایلونه سرور ته اپلوډ کړئ. مختلف وختونه وو، هر څه د اوس په پرتله ساده وو.

د CI / CD سلسله رامینځته کول او د ډاکر سره کار اتومات کول

له هغه وروسته په دوو لسیزو کې هر څه ډېر بدل شوي دي. ویب پاڼې ډیر پیچلي شوي؛ دوی باید د تولید لپاره خوشې کیدو دمخه راټول شي. یو واحد سرور ډیری سرورونه شو چې د بار بیلانسرونو شاته روان دي، او د نسخې کنټرول سیسټمونو کارول معمول شو.

زما د شخصي پروژې لپاره ما یو ځانګړی ترتیب درلود. او زه پوهیدم چې زه یوازې د یوې کړنې په ترسره کولو سره په تولید کې د سایټ ځای پرځای کولو وړتیا ته اړتیا لرم: څانګې ته کوډ لیکل master په GitHub کې. سربیره پردې ، زه پوهیدم چې زما د کوچني ویب غوښتنلیک د عملیاتو ډاډ ترلاسه کولو لپاره ، زه نه غواړم د کبرنیټس لوی کلسټر اداره کړم ، یا د ډاکر سوارم ټیکنالوژي وکاروم ، یا د پوډونو ، اجنټانو او نورو ټولو ډولونو سره د سرورونو بیړۍ وساتم. پیچلتیاوې د امکان تر حده د کار اسانه کولو هدف ته د رسیدو لپاره، زه اړتیا لرم چې د CI/CD سره آشنا شم.

که تاسو یوه کوچنۍ پروژه لرئ (په دې حالت کې، د Node.js پروژه) او تاسو غواړئ پوه شئ چې څنګه د دې پروژې ګمارل اتوماتیک کړئ، پداسې حال کې چې ډاډ ترلاسه کړئ چې په ذخیره کې ذخیره شوي هغه څه سره سمون لري چې په تولید کې کار کوي، بیا زه فکر وکړئ تاسو ممکن پدې مقاله کې علاقه ولرئ.

شرطونه

د دې مقالې لوستونکي تمه کیږي چې د کمانډ لاین او د بش سکریپټونو لیکلو لومړني پوهه ولري. سربیره پردې، هغه به حسابونو ته اړتیا ولري Travis CI и ډاکر هب.

موخې

زه به ونه وایم چې دا مقاله په غیر مشروط ډول د "تدریس" په نوم یادیږي. دا یو ډیر سند دی په کوم کې چې زه د هغه څه په اړه خبرې کوم چې ما زده کړي دي او هغه پروسې تشریح کوم چې ما ته د تولید لپاره د کوډ ازموینې او ځای په ځای کولو لپاره مناسب دی ، په یو اتوماتیک پاس کې ترسره شوی.

دا هغه څه دي چې زما د کار جریان پای ته ورسید.

د کوډ لپاره چې د ذخیره کولو څانګې ته لیږل شوي پرته له دې masterلاندې کړنې ترسره کیږي:

  • په Travis CI کې د جوړولو پروژه پیل کیږي.
  • ټول واحد، ادغام او د پای څخه تر پای ازموینې ترسره کیږي.

یوازې د کوډ لپاره چې په کې راځي master، لاندې ترسره کیږي:

  • هرڅه چې پورته ذکر شوي، پلس ...
  • د اوسني کوډ ، ترتیباتو او چاپیریال پراساس د ډاکر عکس رامینځته کول.
  • د ډاکر هب ته د عکس ځای په ځای کول.
  • د تولید سرور سره اړیکه.
  • د ډاکر هب څخه سرور ته د عکس اپلوډ کول.
  • د اوسني کانټینر ودرول او د نوي عکس پراساس یو نوی پیل کول.

که تاسو د ډاکر ، عکسونو او کانټینرونو په اړه هیڅ نه پوهیږئ ، اندیښنه مه کوئ. زه به تاسو ته دا ټول ووایم.

CI/CD څه شی دی؟

لنډیز CI/CD د "دوامداره ادغام/دوامداره ګمارنې" لپاره ولاړ دی.

▍ پرله پسې ادغام

دوامداره ادغام یوه پروسه ده په کوم کې چې پراختیا کونکي د پروژې اصلي سرچینې کوډ ذخیره کولو ته ژمنې کوي (معمولا یوه څانګه master). په ورته وخت کې، د کوډ کیفیت د اتوماتیک ازموینې له لارې ډاډمن کیږي.

▍ پرله پسې ګومارل

دوامداره ګمارنه په تولید کې د کوډ مکرر ، اتوماتیک ځای پرځای کول دي. د CI/CD لنډیز دویمه برخه ځینې وختونه د "دوامداره تحویل" په توګه ویل کیږي. دا اساسا د "دوامداره ګمارنې" په څیر دی، مګر "دوامداره تحویل" د پروژې پلي کولو پروسې پیل کولو دمخه د لاسي بدلونونو تصدیق کولو اړتیا په ګوته کوي.

تر لاسه کول پیل شول

هغه اپلیکیشن چې ما دا ټول زده کړل هغه نومیږي ټیک نوټ. دا یوه ویب پروژه ده چې زه یې کار کوم، د نوټونو اخیستلو لپاره ډیزاین شوی. په لومړي سر کې ما هڅه وکړه JAMStack-پروژه، یا د سرور پرته یوازې د مخکښې پای غوښتنلیک، د دې لپاره چې د معیاري کوربه توب او د پروژې پلي کولو وړتیاو څخه ګټه پورته کړي چې دا وړاندیز کوي Netliify. لکه څنګه چې د غوښتنلیک پیچلتیا وده وکړه، زه اړتیا لرم چې د دې سرور برخه جوړه کړم، پدې معنی چې زه به د پروژې د اتوماتیک ادغام او اتوماتیک پلي کولو لپاره خپله ستراتیژي جوړه کړم.

زما په قضیه کې، غوښتنلیک یو ایکسپریس سرور دی چې په Node.js چاپیریال کې روان دی، د یو واحد پاڼې عکس العمل غوښتنلیک خدمت کوي او د خوندي سرور اړخ API ملاتړ کوي. دا جوړښت هغه ستراتیژي تعقیبوي چې په کې موندل کیدی شي ورکړل د بشپړ سټیک تصدیق کولو لارښود.

ما ورسره مشوره وکړه ملګری، چې د اتوماتیک کارپوه دی، او له هغه یې وپوښتل چې زه څه کولو ته اړتیا لرم ترڅو دا ټول هغه ډول کار وکړم چې زه یې غواړم. هغه ما ته دا نظر راکړ چې د اتوماتیک کاري فلو باید څه ډول ښکاري، د دې مقالې د اهدافو برخه کې تشریح شوي. د دې اهدافو درلودل پدې معنی دي چې ما اړتیا درلوده معلومه کړم چې څنګه د ډاکر کارولو څرنګوالی.

ډاکر

ډاکر یوه وسیله ده چې د کانټینر کولو ټیکنالوژۍ څخه مننه ، غوښتنلیکونو ته اجازه ورکوي چې په اسانۍ سره توزیع شي ، ځای په ځای شي او په ورته چاپیریال کې پرمخ بوځي ، حتی که د ډاکر پلیټ فارم پخپله په مختلف چاپیریال کې پرمخ ځي. لومړی ، ما اړتیا درلوده چې خپل لاسونه د ډاکر کمانډ لاین وسیلو (CLI) کې ترلاسه کړم. لارښوونې د ډاکر نصبولو لارښود خورا روښانه او د پوهیدو وړ نه بلل کیدی ، مګر له دې څخه تاسو زده کولی شئ چې د لومړي نصب کولو ګام اخیستو لپاره ، تاسو اړتیا لرئ د ډاکر ډیسټاپ ډاونلوډ کړئ (د ماک یا وینډوز لپاره).

د ډاکر هب تقریبا ورته شی دی GitHub د 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
---

▍ ټګونه

ټاګ د عکس د یوې ځانګړې نسخې نښه ده.

▍ د ډاکر امرونو ته چټک حواله

دلته د ځینې عام کارول شوي ډاکر کمانډونو یوه عمومي کتنه ده.

ټیم

مقاله

اغېز

ډاکر جوړول

انځور

د Dockerfile څخه د انځور جوړول

د ډاکر نښه

انځور

د انځور نښه کول

ډاکر انځورونه

انځور

د انځورونو لیست کول

ډاکر چل

کانټینر

د عکس پر بنسټ د کانټینر چلول

ډاکر فشار

انځور

ثبت ته د عکس اپلوډ کول

ډاکر کشول

انځور

د ثبت څخه د عکس پورته کول

ډاکر ps

کانټینر

د کانتینرونو لیست کول

د ډاکر سیسټم پرې کول

انځور/کانټینر

د نه کارول شوي کانټینرونو او عکسونو لرې کول

▍ډاکر فایل

زه پوهیږم چې څنګه په محلي توګه د تولید غوښتنلیک پرمخ وړم. زه د ویب پیک ترتیب لرم چې د چمتو شوي عکس العمل غوښتنلیک جوړولو لپاره ډیزاین شوی. بیا، زه یو کمانډ لرم چې په بندر کې د Node.js پر بنسټ سرور پیل کوي 5000. دا داسې ښکاري:

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

دا باید په یاد ولرئ چې زه د دې موادو لپاره د مثال غوښتنلیک نلرم. مګر دلته، د تجربو لپاره، کوم ساده نوډ غوښتنلیک به ترسره کړي.

د کانټینر کارولو لپاره ، تاسو اړتیا لرئ ډاکر ته لارښوونې ورکړئ. دا د فایل په نوم ترسره کیږي Dockerfileد پروژې په روټ لارښود کې موقعیت لري. دا دوتنې، په لومړي سر کې، د نه پوهیدو وړ ښکاري.

مګر هغه څه چې پدې کې شامل دي یوازې د ځانګړي حکمونو سره ، د کاري چاپیریال تنظیم کولو ته ورته یو څه تشریح کوي. دلته د دې حکمونو څخه ځینې دي:

  • له - دا کمانډ یو فایل پیلوي. دا د اساس عکس مشخص کوي په کوم کې چې کانټینر جوړ شوی.
  • COPY - د ځایی سرچینې څخه کانټینر ته د فایلونو کاپي کول.
  • ورکډیر - د لاندې کمانډونو لپاره د کاري لارښود تنظیم کول.
  • RUN - امرونه پرمخ وړئ.
  • EXPOSE - د بندر ترتیبات.
  • ENTRYPOINT - د اجرا کولو امر ته اشاره.

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 وسیله تنظیم کول.
  • د تولید سرور تنظیم کول ترڅو دا زموږ کوډ ډاونلوډ او چلولی شي.

زموږ په قضیه کې، موږ کاروو Travis CI. د سرور په توګه - DitigalOcean.

دا باید په یاد ولرئ چې دلته تاسو کولی شئ د خدماتو بل ترکیب وکاروئ. د مثال په توګه، د Travis CI پرځای، تاسو کولی شئ د CircleCI یا Github اعمال وکاروئ. او د ډیجیټل اوسین - AWS یا Linode پرځای.

موږ پریکړه وکړه چې د Travis CI سره کار وکړو، او ما دمخه په دې خدمت کې یو څه ترتیب کړی دی. له همدې کبله، زه به په لنډه توګه د کار لپاره د چمتو کولو څرنګوالي په اړه خبرې وکړم.

Travis CI

Travis CI د کوډ ازموینې او پلي کولو لپاره وسیله ده. زه نه غواړم د ټریوس CI تنظیم کولو پیچلتیاو ته لاړ شم ، ځکه چې هره پروژه ځانګړې ده ، او دا به ډیره ګټه ونه کړي. مګر زه به تاسو د پیل کولو لپاره اساسات پوښم که تاسو پریکړه وکړئ چې د Travis CI وکاروئ. که تاسو Travis CI، CircleCI، Jenkins، یا بل څه غوره کړئ، د ورته ترتیب کولو میتودونه به هرچیرې وکارول شي.

د Travis CI سره پیل کولو لپاره، لاړ شئ ویب پاڼه او یو حساب جوړ کړئ. بیا د خپل GitHub حساب سره Travis CI مدغم کړئ. کله چې سیسټم تنظیم کړئ، تاسو به اړتیا ولرئ هغه ذخیره مشخص کړئ چې تاسو یې غواړئ کار اتومات کړئ او دې ته لاسرسی وړ کړئ. (زه 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

▍ ازمایښت

د ترتیب کولو فایل کې زه د محلي ټریوس CI سرور تنظیم کوم. ما نوډ 12 د ژبې په توګه غوره کړ او سیسټم ته یې وویل چې د ډاکر کارولو لپاره اړین انحصارونه نصب کړي.

هرڅه چې په کې لیست شوي دي .travis.yml، به اجرا شي کله چې د ذخیره کولو ټولو څانګو ته ټولې پلې غوښتنې وشي ، پرته لدې چې بل ډول مشخص شي. دا یو ګټور خصوصیت دی ځکه چې دا پدې مانا ده چې موږ کولی شو ټول کوډ معاینه کړو چې ذخیره ته راځي. دا تاسو ته اجازه درکوي پوه شئ چې کوډ چمتو دی چې څانګې ته ولیکل شي. master، او ایا دا به د پروژې د جوړولو پروسه مات کړي. پدې نړیوال ترتیب کې ، زه هرڅه په ځایی ډول نصب کوم ، په شالید کې د Webpack dev سرور چلوم (دا زما د کاري فلو ځانګړتیا ده) ، او ازموینې پرمخ وړم.

که تاسو غواړئ چې ستاسو ذخیره د ازموینې پوښښ عکسونه ښکاره کړي، دلته تاسو کولی شئ د دې معلوماتو راټولولو او ښودلو لپاره د Jest، Travis CI او Coveralls کارولو په اړه لنډ لارښوونې ومومئ.

نو دلته د فایل مینځپانګه ده .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 د کارن چاپیریال متغیرونه دي چې د 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

ځینې ​​​​شیان باید پاملرنه وکړي

دا ممکنه ده کله چې تاسو د Travis 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 د پورته تېروتنې څخه د خلاصون لپاره.

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 سرور کاروم کار کول ریورس پراکسي نګینکس او راځئ چې کوډ کړو، تاسو اړتیا لرئ ډیر ټینکر وکړئ.

ما واقعیا نه غوښتل چې دا ټول SSL تشکیلات په لاسي ډول ترسره کړم ، نو ما یوازې د بار بیلنس جوړ کړ او د دې توضیحات یې په DNS کې ثبت کړل. د ډیجیټل اوشین په قضیه کې ، د مثال په توګه ، د بار بیلنسر کې د اتوماتیک نوي کولو ځان لاسلیک شوي سند رامینځته کول یو ساده ، وړیا او ګړندی کړنلاره ده. دا طریقه اضافي ګټه لري چې دا د اړتیا په صورت کې د ډیری سرورونو په اړه د SSL تنظیم کول خورا اسانه کوي که اړتیا وي. دا پخپله سرورونو ته اجازه ورکوي چې د SSL په اړه "فکر" ونه کړي، مګر په ورته وخت کې د معمول په توګه بندر وکاروئ 80. نو د بار بیلنسر کې د SSL تنظیم کول د SSL تنظیم کولو بدیل میتودونو څخه خورا اسانه او ډیر اسانه دي.

اوس تاسو کولی شئ په سرور کې ټول بندرونه وتړئ چې راتلونکي اړیکې مني - پرته له بندر څخه 80، د بار توازن کونکي او بندر سره د خبرو اترو لپاره کارول کیږي 22 د SSH لپاره. د پایلې په توګه، د دې دوو پرته په نورو بندرونو کې سرور ته د مستقیم لاسرسي هڅه به ناکامه شي.

پایلې

وروسته له دې چې ما هرڅه وکړل چې ما پدې موادو کې خبرې وکړې، نه د ډاکر پلیټ فارم او نه هم د اتوماتیک CI/CD زنځیرونو مفکورې نور ما نه ډاروي. زه توانیدلی وم چې د دوامداره ادغام سلسله جوړه کړم، په کوم کې چې کوډ ازمول کیږي مخکې لدې چې تولید ته لاړ شي او کوډ په اتوماتيک ډول په سرور کې ځای په ځای شوی. دا ټول لاهم زما لپاره نسبتا نوي دي، او زه ډاډه یم چې زما د اتوماتیک کاري فلو د ښه کولو لپاره لارې شتون لري او دا ډیر اغیزمن کړي. نو که تاسو په دې اړه کوم نظر لرئ، مهرباني وکړئ ما ته خبر راکړئ. ما ته پوه زه امید لرم چې دا مقاله ستاسو په هڅو کې ستاسو سره مرسته کړې. زه غواړم باور وکړم چې د دې لوستلو وروسته ، تاسو څومره چې ما زده کړل هغه څه زده کړل پداسې حال کې چې هر هغه څه چې ما په دې کې خبرې کړې دي.

PS زموږ کې بازار یو انځور دی ډاکر، کوم چې په یو کلیک کې نصب کیدی شي. تاسو کولی شئ د کانټینرونو عملیات وګورئ VPS. ټولو نویو پیرودونکو ته د 3 ورځو ازموینه وړیا ورکول کیږي.

ګرانو لوستونکو! ایا تاسو په خپلو پروژو کې د CI/CD ټیکنالوژۍ کاروئ؟

د CI / CD سلسله رامینځته کول او د ډاکر سره کار اتومات کول

سرچینه: www.habr.com

Add a comment