Abuuritaanka silsilad CI/CD ah iyo shaqo otomaatig ah oo lala yeesho Docker

Waxaan qoray mareegahaygii ugu horreeyay dabayaaqadii 90-meeyadii. Markaas aad bay u fududayd in loo habeeyo shaqada. Waxaa jiray server Apache ah qaar ka mid ah martigelinta la wadaago, waxaad gali kartaa server-kan adigoo isticmaalaya FTP adoo qoraya wax la mid ah ftp://ftp.example.com. Kadibna waa inaad gelisaa magacaaga iyo eraygaaga sirta ah oo aad gelisaa faylasha server-ka. Waxaa jiray waqtiyo kala duwan, wax walba way ka fududaayeen markaas.

Abuuritaanka silsilad CI/CD ah iyo shaqo otomaatig ah oo lala yeesho Docker

Labaatankii sano ee la soo dhaafay, wax walba aad bay isu beddeleen. Websaydhyadu waxay noqdeen kuwo aad u adag; waa in la ururiyaa ka hor inta aan loo sii dayn wax soo saarka. Hal server ayaa noqday adeegayaal badan oo gadaal ka riixaya culeyska culeyska, iyo adeegsiga nidaamyada xakamaynta nooca ayaa noqday wax caadi ah.

Mashruucayga gaarka ah waxaan u sameeyay qaabayn gaar ah. Oo waan ogaa in aan u baahanahay awoodda aan ku geynayo goobta wax-soo-saarka aniga oo fulinaya hal fal oo kaliya: qoraal koodka laanta master ku yaal GitHub. Intaa waxaa dheer, waxaan ogaa in si loo hubiyo hawlgalka codsigayga yar ee shabakada, ma aanan rabin in aan maamulo koox weyn oo Kubernetes ah, ama aan isticmaalo tignoolajiyada Docker Swarm, ama aan ilaaliyo koox server ah oo leh boodhyo, wakiilo iyo dhammaan noocyada kale. kakanaanta. Si aan u gaaro yoolka ah in shaqada loo fududeeyo sida ugu macquulsan, waxaan u baahday in aan barto CI/CD.

Haddii aad haysatid mashruuc yar (xaaladdan, mashruuca Node.js) oo aad jeclaan lahayd inaad ogaato sida loo habeeyo dejinta mashruucan, iyadoo la hubinayo in waxa lagu kaydiyo kaydka uu si sax ah u dhigmo waxa ka shaqeeya wax soo saarka, markaa waxaan ahay u malayn in aad xiisaynayso maqaalkan.

Shuruudaha

Akhristaha maqaalkan waxaa laga filayaa inuu yeesho faham aasaasi ah oo ku saabsan khadka taliska iyo qorista qoraallada Bash. Intaa waxaa dheer, wuxuu u baahan doonaa xisaabaadka Travis CI и Xarunta Docker.

Ujeeddooyinka

Ma dhihi doono maqaalkan si shuruud la'aan ah loogu yeeri karo "tutorial". Tani waa dukumeenti ka sii badan oo aan kaga hadlo waxa aan bartay oo aan ku tilmaamo habka igu habboon tijaabinta iyo geynta koodka soo saarista, oo lagu sameeyay hal baas oo iswada.

Tani waa waxa socodka shaqadeyda ku dhamaaday inuu ahaado.

Koodhka lagu dhejiyay laan kasta oo kayd ah marka laga reebo master, falalka soo socda ayaa la sameeyaa:

  • Mashruuca lagu dhisayo Travis CI wuxuu bilaabmayaa.
  • Dhammaan imtixaanada cutubka, isdhexgalka iyo dhamaadka-ilaa-dhamaadka ayaa la sameeyaa.

Kaliya kood ku dhaca master, waxa la sameeyaa:

  • Wax kasta oo kor lagu sheegay, oo lagu daray...
  • Dhisidda sawirka Docker ee ku salaysan koodka hadda jira, goobaha iyo deegaanka.
  • Gelinaya sawirka Docker Hub.
  • Isku xirka server-ka wax soo saarka.
  • Ku soo dejinta sawirka Docker Hub serferka
  • Joojinta weelka hadda jira iyo bilaabista mid cusub oo ku salaysan sawirka cusub.

Haddii aadan gabi ahaanba waxba ka garanayn Docker, sawirada iyo weelasha, ha welwelin. Waan kuu sheegi doonaa dhammaan waxa ku saabsan.

Waa maxay CI/CD?

Soo gaabinta CI/CD waxay u taagan tahay "is-dhexgalka joogtada ah/diritaanka joogtada ah."

▍Isdhexgalka joogtada ah

Is dhexgalka joogtada ah waa nidaam ay horumariyayaashu ka go'aansadaan kaydinta koodhka isha ugu weyn ee mashruuca (badanaa laan master). Isla mar ahaantaana, tayada koodka waxaa lagu hubiyaa tijaabinta tooska ah.

▍Diiwaangelin joogto ah

Hawlgelinta joogtada ah waa soo-saarista koodka soo noqnoqda, si toos ah. Qaybta labaad ee gaabinta CI/CD waxaa mararka qaarkood loo higgaadiyaa "gaarsiin joogto ah." Tani waxay asal ahaan la mid tahay "dirista joogtada ah", laakiin "geysinta joogtada ah" waxay tusinaysaa baahida gacanta lagu xaqiijiyo isbeddelada ka hor inta aan la bilaabin habka geynta mashruuca.

Bilaabidda

App-ka aan ku baran jiray waxaas oo dhan ayaa la yiraahdaa QaadoNote. Kani waa mashruuc shabakadeed oo aan ka shaqaynayo, looguna talagalay in aan wax ku qoro. Markii hore waxaan isku dayay inaan sameeyo JAMStack-project, ama kaliya codsi hore oo aan lahayn server, si looga faa'iidaysto martigelinta caadiga ah iyo awoodaha geynta mashruuca ee ay bixiso Netlify. Marka ay kakanaanta codsigu korodho, waxaan u baahday in aan abuuro qaybteeda server-ka, taas oo macnaheedu yahay in aan u baahan doono in aan sameeyo istaraatijiyad ii gaar ah oo ku saabsan isdhexgalka tooska ah iyo geynta tooska ah ee mashruuca.

Xaaladeyda, codsigu waa server-ka Express ee ku shaqeeya deegaanka Node.js, isagoo u adeegaya hal bog oo falcelin ah oo taageeraya API-dhinac-server ah oo sugan. Nashqadani waxay raacdaa xeeladda laga dhex heli karo la siiyo Hagaha xaqiijinta raso buuxa.

waan la tashaday saaxiib, kaas oo ah khabiir ku takhasusay automation-ka, waxana uu waydiiyay waxa aan u baahanahay in aan sameeyo si ay u wada shaqeeyaan sida aan rabo. Wuxuu i siiyay fikradda ah sida socodka shaqada otomaatiga ah uu u ekaan karo, oo lagu qeexay qaybta yoolalka ee maqaalkan. Haysashada yoolalkan waxay la macno tahay inaan u baahanahay inaan ogaado sida loo isticmaalo Docker.

Docker

Docker waa aalad, iyadoo ay ugu wacan tahay tignoolajiyada weelka, u oggolaanaysa codsiyada in si fudud loo qaybiyo, la geeyo oo loogu shaqeeyo isla deegaan, xitaa haddii goobta Docker lafteeda ay ku shaqeyso deegaanno kala duwan. Marka hore, waxaan u baahday in aan gacmahayga ku qaato aaladaha khadka taliska ee Docker (CLI). Tilmaamaha Hagaha rakibaadda Docker laguma magacaabi karo mid aad u cad oo la fahmi karo, laakiin waxaad ka baran kartaa in si aad u qaadato tallaabada ugu horreysa ee rakibidda, aad u baahan tahay inaad soo dejiso Docker Desktop (Mac ama Windows).

Docker Hub waxay la mid tahay qiyaastii GitHub kaydka git, ama diiwaanka shm loogu talagalay xirmooyinka JavaScript. Kani waa kayd online ah oo loogu talagalay sawirada Docker. Tani waa waxa Docker Desktop ku xidho.

Marka, si aad u bilowdo Docker, waxaad u baahan tahay inaad sameyso laba shay:

Taas ka dib, waxaad hubin kartaa haddii Docker CLI uu shaqeynayo adoo socodsiinaya amarka soo socda si aad u hubiso nooca Docker:

docker -v

Marka xigta, gal Docker Hub adiga oo gelaya adeegsadahaaga iyo eraygaaga sirta ah marka lagu weydiiyo:

docker login

Si aad u isticmaasho Docker, waa inaad fahantaa fikradaha sawirada iyo weelasha.

▍Sawiro

Sawirku waa shay la mid ah qaab-qorshe oo ka kooban tilmaamo lagu ururinayo weelka. Kani waa sawir aan la bedeli karin ee nidaamka faylka codsiga iyo dejinta Soo-saarayaashu si fudud ayey u wadaagi karaan sawirrada.

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

Amarkani waxa uu soo saari doonaa shax leh madaxa soo socda:

REPOSITORY     TAG     IMAGE ID     CREATED     SIZE
---

Marka xigta waxaan eegi doonaa qaar ka mid ah tusaalooyinka amarrada oo isku qaab ah - marka hore waxaa jira amar leh faallo, ka dibna tusaale u ah waxa uu soo saari karo.

Konteenarada

Weelku waa xirmo la fulin karo oo ka kooban wax kasta oo loo baahan yahay si loo socodsiiyo codsiga. Codsiga habkan ayaa had iyo jeer u shaqayn doona isku mid, iyadoon loo eegin kaabayaasha: deegaan go'doonsan iyo isla deegaan. Ujeedadu waa in tusaalooyin isku muuqaal ah laga bilaabo deegaan kala duwan.

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

▍Tags

Taagtu waa calaamad muujinaysa nooc gaar ah oo sawirka ah.

Tixraaca degdega ah ee amarrada Docker

Halkan waxaa ah dulmar ku saabsan qaar ka mid ah amarrada Docker ee inta badan la isticmaalo.

kooxda

Dulucda

saamaynta

dhisme docker

Sawir

Dhisida sawir laga soo qaaday Dockerfile

docker tag

Sawir

Calaamadaynta sawirka

sawirrada dharka

Sawir

Liiska sawirada

docker run

Kontayn

Ku socodsiinta weel ku salaysan sawir

docker riix

Sawir

U soo dejinta sawirka diiwaanka

dookh jiid

Sawir

Soo dejinta sawirka diiwaanka

docker ps

Kontayn

weelasha liiska

nidaamka docker-ka gooyo

Sawirka/Konteenarada

Ka saarida weelasha iyo sawirada aan la isticmaalin

▍Dockerfile

Waan ogahay sida loo socodsiiyo codsiga wax soo saarka gudaha. Waxaan haystaa qaabeynta xirmo shabakadeed oo loogu talagalay in lagu dhiso codsi falcelin diyaarsan. Marka xigta, waxaan haystaa amar bilaabaya Node.js server ku salaysan dekedda 5000. Waxay u egtahay sidan:

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

Waa in la ogaadaa in aanan haysan codsi tusaale ah alaabtan. Laakiin halkan, tijaabooyinka, codsi kasta oo Node fudud ayaa sameyn doona.

Si aad u isticmaasho weelka, waxaad u baahan doontaa inaad tilmaamo siiso Docker. Tan waxaa lagu sameeyaa fayl la yiraahdo Dockerfile, oo ku yaal tusaha xididka mashruuca. Faylkan, marka hore, wuxuu u muuqdaa mid aan la fahmi karin.

Laakiin waxa ay ka kooban tahay ayaa kaliya ku sifeynaya, amarro gaar ah, wax la mid ah dejinta jawi shaqo. Waa kuwan qaar ka mid ah amaradan:

  • KA - Amarkani wuxuu bilaabaa fayl. Waxay qeexaysaa sawirka saldhigga ah ee weelka lagu dhisay.
  • NUQUL - Ka-koobiynta feylasha laga keenay ilo maxalli ah una guuri jiray weel.
  • WORKDIR - Dejinta hagaha shaqada ee amarrada soo socda.
  • Orod - Orod amarrada.
  • BANDHIG - Dejinta dejinta.
  • GELIN - Tilmaanta amarka la fulinayo.

Dockerfile waxaa laga yaabaa inay u ekaato wax sidan oo kale ah:

# Загрузить базовый образ
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

Iyadoo ku xiran sawirka hoose ee aad doorato, waxaa laga yaabaa inaad u baahato inaad ku xirto ku-tiirsanaan dheeraad ah. Xaqiiqdu waxay tahay in qaar ka mid ah sawirada asaasiga ah (sida Node Alpine Linux) la abuuray iyada oo ujeedadu tahay in laga dhigo mid isku dhafan intii suurtagal ah. Natiijo ahaan, waxaa laga yaabaa inaysan haysan qaar ka mid ah barnaamijyada aad filayso.

▍ Dhisidda, calaamadaynta iyo socodsiinta weelka

Isku soo wada duuboo iyo bilaabista weelka waa ka dib markii aan haysano Dockerfile, hawluhu aad bay u fudud yihiin. Kahor intaadan ku riixin sawirka Docker Hub, waxaad u baahan tahay inaad ku tijaabiso gudaha.

▍Golaha

Marka hore waxaad u baahan tahay inaad ururiso sawir, cayimida magaca iyo, optionally, tag (haddii calaamad aan la cayimin, nidaamku wuxuu si toos ah u meelayn doonaa sumadda sawirka latest).

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

Kadib socodsiinta amarkan, waxaad daawan kartaa Docker oo dhisaya sawirka.

Sending build context to Docker daemon   2.88MB
Step 1/9 : FROM node:12-alpine
 ---> ...выполнение этапов сборки...
Successfully built 123456789123
Successfully tagged <image>:<tag>

Dhismuhu wuxuu qaadan karaa dhowr daqiiqo - waxay dhammaan kuxirantahay inta ku tiirsanaanta aad haysato. Marka dhismuhu dhammaado, waxaad socodsiin kartaa amarka docker images oo fiiri sharraxaadda sawirkaaga cusub.

REPOSITORY          TAG               IMAGE ID            CREATED              SIZE
<image>             latest            123456789123        About a minute ago   x.xxGB

▍Bilow

Sawirka waa la sameeyay Taas macneheedu waxa weeye in aad ku shaqayn karto weel ku salaysan. Sababtoo ah waxaan rabaa inaan awoodo inaan galo arjiga ku socda weelka localhost:5000, aniga, dhanka bidix ee lammaanaha 5000:5000 amarka xiga ee lagu rakibay 5000. Dhinaca midig waxaa ku yaal dekeddii kontaynarrada.

# Запуск с использованием локального порта 5000 и порта контейнера 5000
docker run -p 5000:5000 <image>:<tag>

Hadda oo weelka la abuuray oo socda, waxaad isticmaali kartaa amarka docker ps si aad u eegto macluumaadka ku saabsan weelkan (ama waxaad isticmaali kartaa amarka docker ps -a, kaas oo soo bandhigaya macluumaadka ku saabsan dhammaan weelasha, ma aha oo kaliya kuwa socda).

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

Hadii aad hada aado ciwaanka localhost:5000 - waxaad arki kartaa bogga codsiga socda oo si sax ah ula mid ah bogga codsiga ee ku socda jawi wax soo saar.

Calaamadaynta iyo daabacaadda

Si aan u isticmaalno mid ka mid ah sawirada la abuuray ee server-ka wax soo saarka, waxaan u baahanahay inaan awoodno inaan ka soo dejino sawirkan Docker Hub. Tani waxay ka dhigan tahay inaad marka hore u baahan tahay inaad u abuurto kayd mashruuca Docker Hub. Taas ka dib, waxaan yeelan doonaa meel aan ku diri karno sawirka. Sawirku wuxuu u baahan yahay in dib loo magacaabo si uu magaciisu ugu bilowdo isticmaaleha Docker Hub. Tan waa in lagu raacaa magaca kaydka. Calaamad kasta waxaa la dhigi karaa dhamaadka magaca. Hoos waxaa ku yaal tusaale magac-bixinta sawirada iyadoo la isticmaalayo nidaamkan.

Hadda waxaad ku dhisi kartaa sawirka magac cusub oo aad socodsiiso amarka docker push si aad ugu riixdo kaydka 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

Haddii wax waliba si fiican u socdaan, sawirka ayaa laga heli doonaa Docker Hub oo si fudud ayaa loogu dhejin karaa server-ka ama waxaa lagu wareejin karaa horumariyeyaal kale.

Tallaabooyinka xiga

Hadda waxaan xaqiijinay in codsiga, qaabka weelka Docker, uu u socdo gudaha. Waxaan ku shubnay weelka Docker Hub. Waxaas oo dhami waxay ka dhigan tahay inaan horeba u samaynay horumar aad u wanaagsan xagga yoolkeenna. Hadda waxaan u baahanahay inaan xallino laba su'aalood oo kale:

  • Dejinta qalabka CI ee tijaabinta iyo geynta koodka.
  • Dejinta server-ka wax soo saarka si uu u soo dejiyo oo u socodsiiyo koodkayaga.

Xaaladeena, waxaan isticmaalnaa Travis CI. Server ahaan- DitigalOcean.

Waa in la ogaadaa in halkan aad isticmaali karto adeegyo kale oo isku dhafan. Tusaale ahaan, halkii Travis CI, waxaad isticmaali kartaa CircleCI ama Github Actions. Iyo halkii DigitalOcean - AWS ama Lindode.

Waxaan go'aansanay inaan la shaqeyno Travis CI, waxaanan horay u haystay wax lagu habeeyey adeeggan. Sidaa darteed, hadda waxaan si kooban uga hadli doonaa sida loogu diyaariyo shaqada.

Travis CI

Travis CI waa qalab lagu tijaabiyo laguna geynayo koodka. Ma jecli inaan galo qallafsanaanta dejinta Travis CI, maadaama mashruuc kastaa uu gaar yahay, tanina faa'iido badan ma keenayso. Laakiin waxaan dabooli doonaa aasaaska si aan kuu bilaabo haddii aad go'aansato inaad isticmaasho Travis CI. Haddii aad doorato Travis CI, CircleCI, Jenkins, ama shay kale, hababka qaabeynta la mid ah ayaa loo isticmaali doonaa meel kasta.

Si aad u bilowdo Travis CI, aad website-ka mashruuca oo samee xisaab. Kadib ku dhex dar Travis CI akoonkaaga GitHub. Markaad dejinayso nidaamka, waxaad u baahan doontaa inaad qeexdo kaydka aad rabto inaad si otomaatig ah ugu shaqeyso shaqada oo aad awood u siiso gelitaanka. (Anigu waxaan isticmaalaa GitHub, laakiin waxaan hubaa in Travis CI uu ku dhex milmi karo BitBucket, iyo GitLab, iyo adeegyo kale oo la mid ah).

Mar kasta oo Travis CI la bilaabo, server-ka ayaa la bilaabay, fulinta amarrada lagu qeexay faylka qaabeynta, oo ay ku jiraan geynta laamaha kaydka ee u dhigma.

▍ wareegga nolosha shaqada

Travis CI qaabeynta faylka loo yaqaan .travis.yml oo lagu kaydiyaa tusaha xididka mashruuca, wuxuu taageeraa fikradda dhacdooyinka meertada nolosha hawlaha. Dhacdooyinkan waxa loo taxaabay siday u kala horreeyaan:

  • apt addons
  • cache components
  • before_install
  • install
  • before_script
  • script
  • before_cache
  • after_success или after_failure
  • before_deploy
  • deploy
  • after_deploy
  • after_script

Imtixaanka

Faylka qaabeynta waxaan ku habeyn doonaa server-ka Travis CI ee deegaanka. Waxaan u doortay Node 12 luqad ahaan oo waxaan u sheegay nidaamka si loo rakibo ku-tiirsanaanta loo baahan yahay isticmaalka Docker.

Wax kasta oo ku qoran .travis.yml, waxa la fulin doonaa marka dhammaan codsiyada jiidista lagu sameeyo dhammaan laamaha kaydka, haddii aan si kale loo cayimin. Tani waa sifo faa'iido leh sababtoo ah waxay ka dhigan tahay inaan tijaabin karno dhammaan koodka soo galaya kaydka. Tani waxay kuu ogolaaneysaa inaad ogaato haddii koodka uu diyaar u yahay in loo qoro laanta. master, iyo haddii ay jabin doonto habka dhismaha mashruuca. Qaabeyntan caalamiga ah, waxaan ku rakibaa wax walba gudaha, waxaan ku socodsiiyaa server-ka Webpack dev dhabarka (tani waa sifada socodka shaqadeyda), oo waxaan sameeyaa imtixaanno.

Haddii aad rabto in kaydkaagu uu muujiyo calaamado muujinaya daboolida tijaabada, halkan Waxaad ka heli kartaa tilmaamo gaagaaban oo ku saabsan adeegsiga Jest, Travis CI iyo Coveralls si aad u ururiso una muujiso macluumaadkan.

Markaa waa kan nuxurka faylka .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

Halkani waa halka ficilada lagu sameeyo dhamaan laamaha kaydka iyo codsiyada jiididu ay ku dhamaadaan.

▍In la geeyo

Iyada oo ku saleysan malaha in dhammaan imtixaanada otomaatiga ah ay si guul leh u dhammaadeen, waxaan awoodnaa, taas oo ah ikhtiyaari, u diri koodka server-ka wax soo saarka. Maadaama aan rabno inaan tan u sameyno kaliya koodka laanta master, waxaanu siinaa nidaamka tilmaamo ku haboon goobaha geynta. Kahor intaadan isku dayin inaad isticmaasho koodka aan ku eegi doono mashruucaaga xiga, waxaan jeclaan lahaa inaan kaaga digayo inaad haysato qoraal dhab ah oo loogu yeero meelaynta.

deploy:
  # Собрать Docker-контейнер и отправить его на Docker Hub
  provider: script
  script: bash deploy.sh
  on:
    branch: master

Qoraalka dejinta wuxuu xalliyaa laba dhibaato:

  • Dhis, calaamadee oo u dir sawirka Docker Hub adoo isticmaalaya aaladda CI (xaaladkeena, Travis CI).
  • Ku dhejinta sawirka server-ka, joojinta weelka hore iyo bilaabista mid cusub (xaaladkeena, serverku wuxuu ku shaqeeyaa madal DigitalOcean).

Marka hore, waxaad u baahan tahay inaad dejiso hab toos ah oo loogu talagalay dhisidda, calaamadaynta, iyo riixitaanka sawirka Docker Hub. Dhammaan tani waxay la mid tahay wixii aan gacanta ku qabannay, marka laga reebo inaan u baahanahay istaraatiijiyad aan ku qoondeyno calaamado gaar ah sawirada iyo si otomaatig ah loo galo. Waxaa igu adkaatay in aan helo faahfaahinta qoraalka geynta, sida istaraatiijiyad sumadeynta, galitaanka, SSH codeing, aasaaska isku xirka SSH. Laakiin nasiib wanaag saaxiibkay aad buu ugu fiican yahay bash, sida waxyaabo kale oo badan. Wuxuu iga caawiyay inaan qoro qoraalkan.

Markaa, qaybta hore ee qoraalka ayaa ku soo raraysa sawirka Docker Hub. Tani waa arrin sahlan in la sameeyo. Nidaamka calaamadaynta ee aan isticmaalay waxa ku jira isku darka git hash iyo git tag, haddii mid jiro. Tani waxay hubinaysaa in sumadu ay tahay mid gaar ah waxayna sahlaysaa in la aqoonsado golaha ay ku saleysan tahay. DOCKER_USERNAME и DOCKER_PASSWORD waa doorsoomayaal deegaanka isticmaala kuwaas oo lagu dejin karo iyadoo la isticmaalayo Travis CI interface. Travis CI ayaa si toos ah u habayn doonta xogta xasaasiga ah si aanay ugu dhicin gacmo khaldan.

Waa kan qaybta koowaad ee qoraalka 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}

Qaybta labaad ee qoraalka waxay noqon doontaa gebi ahaanba waxay ku xidhan tahay martigeliyaha aad isticmaalayso iyo sida xidhiidhka isaga loo habeeyey. Xaaladeyda, maadaama aan isticmaalo Badweynta Dijital ah, waxaan isticmaalaa amarrada si aan ugu xiro server-ka doctl. Markaad la shaqaynayso AWS, utility waa la isticmaali doonaa aws, iyo wixi la mida.

Dejinta seerfarku si gaar ah uma adkayn. Markaa, waxaan dhigay dhibic ku salaysan sawirka salka. Waa in la ogaadaa in nidaamka aan doortay uu u baahan yahay rakibaadda gacanta ee hal mar ah ee Docker iyo hal mar oo gacanta ah oo Docker ah. Waxaan u adeegsaday Ubuntu 18.04 si aan u rakibo Docker, marka haddii aad sidoo kale u isticmaaleyso Ubuntu si la mid ah, waad raaci kartaa tan hage fudud.

Halkan kama hadlayo amarrada gaarka ah ee adeegga, maadaama ay arrintani si aad ah u kala duwanaan karto xaalado kala duwan. Waxaan kaliya siin doonaa qorshe hawleed guud oo la sameeyo ka dib marka lagu xidho SSH server-ka mashruuca la geyn doono:

  • Waxaan u baahanahay inaan helno weelka hadda socda oo joojiya.
  • Markaa waxaad u baahan tahay inaad weel cusub gashato gadaal.
  • Waxaad u baahan doontaa inaad dejiso server-ka dekediisa deegaanka 80 - tani waxay kuu ogolaanaysaa inaad geliso goobta ciwaanka sida example.com, iyada oo aan la cayimin dekedda, halkii aad isticmaali lahayd cinwaan sida example.com:5000.
  • Ugu dambeyntii, waxaad u baahan tahay inaad tirtirto dhammaan weelasha hore iyo sawirada.

Waa kan sii socoshada qoraalka

# Найти 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

Waxyaabaha qaar ay tahay in fiiro gaar ah loo yeesho

Waxaa suurtagal ah in marka aad ku xirto server-ka adigoo isticmaalaya SSH oo ka socda Travis CI, waxaad arki doontaa digniin kaa ilaalin doonta inaad sii wadato rakibidda maadaama nidaamku sugi doono jawaabta isticmaalaha.

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

Waxaan bartay in furaha xargaha lagu dhejin karo base64 si loo badbaadiyo qaab kaas oo si ku habboon oo la isku halleyn karo loogu shaqeyn karo. Marxaladda rakibidda, waxaad go'aamin kartaa furaha dadweynaha oo aad u qori kartaa fayl known_hosts si meesha looga saaro qaladka kore.

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

Dhaqan ahaan, amarkani wuxuu u ekaan karaa sidan:

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

Oo waa kan waxa ay soo saarto - saldhig64 xardhan oo codeed:

MTIzLjQ1LjY3Ljg5IHNzaC1yc2EgQUFBQUIzTnphQzF5YzJFQUFBQUJJd0FBQVFFQWtsT1Vwa0RIcmZIWTE3U2JybVRJcE5MVEdLOVRqb20vQldEU1UKR1BsK25hZnpsSERUWVc3aGRJNHlaNWV3MThKSDRKVzlqYmhVRnJ2aVF6TTd4bEVMRVZmNGg5bEZYNVFWa2JQcHBTd2cwY2RhMwpQYnY3a09kSi9NVHlCbFdYRkNSK0hBbzNGWFJpdEJxeGlYMW5LaFhwSEFac01jaUxxOFY2UmpzTkFRd2RzZE1GdlNsVksvN1hBCnQzRmFvSm9Bc25jTTFROXg1KzNWMFd3NjgvZUlGbWIxenVVRmxqUUpLcHJyWDg4WHlwTkR2allOYnk2dncvUGIwcndlcnQvRW4KbVorQVc0T1pQblRQSTg5WlBtVk1MdWF5ckQyY0U4NlovaWw4YitndzNyMysxbkthdG1Ja2puMnNvMWQwMVFyYVRsTXFWU3NieApOclJGaTl3cmYrTTdRPT0geW91QGV4YW1wbGUuY29tCg==

Waa kan amarka kor ku xusan

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

Isla habkan ayaa lagu isticmaali karaa furaha gaarka ah marka la samaynayo xiriir, maadaama laga yaabo inaad si fiican ugu baahan tahay fure gaar ah si aad u gasho serverka. Markaad la shaqaynayso furaha, waxaad u baahan tahay oo kaliya inaad hubiso in si badbaado leh loogu kaydiyay beddelka deegaanka Travis CI iyo inaan meelna lagu soo bandhigin.

Wax kale oo xusid mudan ayaa ah in laga yaabo inaad u baahato inaad ku socodsiiso dhammaan qoraalka hawlgelinta sidii hal xariiq, tusaale ahaan - oo leh doctl. Tani waxay u baahan kartaa xoogaa dadaal dheeri ah.

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

TLS/SSL iyo Dheelitirka Xamuulka

Ka dib markii aan sameeyay wax kasta oo kor ku xusan, dhibkii ugu dambeeyay ee aan la kulmay waxay ahayd in server-ku aanu haysan SSL. Maadaama aan isticmaalo server-ka Node.js, si aan u qasbo inay shaqeeyaan Nginx iyo Aynu Sirinno, waxaad u baahan tahay inaad wax badan ka ogaato.

Runtii ma aanan rabin in aan gacanta ku sameeyo dhammaan qaabeynta SSL-ka, marka waxaan abuuray culeyska culeyska waxaanan ku duubay tafaasiisha DNS. Marka laga hadlayo DigitalOcean, tusaale ahaan, abuurista shahaado iskiis u saxiix ah oo dib-u-cusbooneysiin ah oo ku saabsan dheelitirka culeyska waa nidaam fudud, bilaash ah oo degdeg ah. Habkani wuxuu leeyahay faa'iidada dheeraadka ah ee ka dhigaysa mid aad u fudud in lagu dhejiyo SSL on servers badan oo ka dambeeya culeyska culeyska haddii loo baahdo. Tani waxay u oggolaaneysaa server-yada laftooda inaysan "ka fikirin" SSL gabi ahaanba, laakiin isla mar ahaantaana u isticmaalaan dekedda sida caadiga ah 80. Markaa dejinta SSL ee isku dheelitirka culeyska ayaa aad uga sahlan oo ka sahlan hababka kale ee dejinta SSL.

Hadda waxaad xiri kartaa dhammaan dekedaha server-ka aqbala isku xirka soo socda - marka laga reebo dekedda 80, loo isticmaalo in lagula xiriiro dheelitiriyaha culeyska, iyo dekedda 22 ee SSH. Natiijo ahaan, isku dayga in si toos ah loo galo server-ka dekedo aan labadan ahayn wuu guul-darraystaa.

Natiijooyinka

Ka dib markii aan sameeyay wax kasta oo aan kaga hadlay maaddadan, madal Docker ama fikradaha silsiladaha CI/CD ee iswada toosan mar dambe igama cabsiin. Waxaan awooday inaan dejiyo silsilad is-dhex-gal joogto ah, inta lagu gudajiro koodka la tijaabiyay ka hor inta uusan soo gelin wax-soo-saarka oo koodka si toos ah loogu dhejiyo server-ka. Waxaas oo dhami wali waa igu cusub yihiin, waxaana hubaa inay jiraan siyaabo lagu wanaajiyo socodka shaqadayda tooska ah oo aan uga dhigo mid hufan. Markaa haddii aad wax fikrad ah ka hayso arrintan, fadlan ii soo sheeg. aniga ogow. Waxaan rajeynayaa in maqaalkani uu kugu caawiyay dadaalkaaga. Waxaan rabaa inaan rumaysto in markaan akhriyay ka dib, aad baratay intii aan bartay adigoo ogaanaya wax kasta oo aan kaga hadlay.

PS Inaga suuqa waxaa jira sawir Docker, kaas oo lagu rakibi karo hal gujis. Waxaad ka hubin kartaa shaqada weelasha goobta VPS. Dhammaan macaamiisha cusub waxaa la siiyaa 3 maalmood oo tijaabo ah oo bilaash ah.

Akhristayaasha sharafta leh! Ma isticmaashaa tignoolajiyada CI/CD mashaariicdaada?

Abuuritaanka silsilad CI/CD ah iyo shaqo otomaatig ah oo lala yeesho Docker

Source: www.habr.com

Add a comment