A’ cruthachadh sèine CI/CD agus ag obair gu fèin-obrachail le Docker

Sgrìobh mi a’ chiad làraich-lìn agam aig deireadh na 90n. Air ais an uairsin bha e gu math furasta an cur ann an òrdugh obrach. Bha frithealaiche Apache air cuid de aoigheachd co-roinnte, dh'fhaodadh tu logadh a-steach don fhrithealaiche seo tro FTP le bhith a 'sgrìobhadh rudeigin mar ftp://ftp.example.com. An uairsin bha agad ri d’ ainm is facal-faire a chuir a-steach agus na faidhlichean a luchdachadh suas chun t-seirbheisiche. Bha amannan eadar-dhealaichte ann, bha a h-uile dad nas sìmplidh na bha e an-dràsta.

A’ cruthachadh sèine CI/CD agus ag obair gu fèin-obrachail le Docker

Anns an dà dheichead bhon uairsin, tha a h-uile càil air atharrachadh gu mòr. Tha làraich-lìn air fàs nas iom-fhillte; feumaidh iad a bhith air an cruinneachadh mus tèid an leigeil ma sgaoil gu cinneasachadh. Thàinig aon fhrithealaiche gu bhith na iomadh seirbheisiche a bha a 'ruith air cùlaibh luchd-cothromachaidh luchdan, agus dh'fhàs cleachdadh siostaman smachd dreach cumanta.

Airson mo phròiseact pearsanta bha rèiteachadh sònraichte agam. Agus bha fios agam gu robh feum agam air an comas an làrach a chleachdadh ann an riochdachadh le bhith a’ coileanadh dìreach aon ghnìomh: a’ sgrìobhadh còd gu meur master air GitHub. A bharrachd air an sin, bha fios agam, gus dèanamh cinnteach gum biodh an tagradh lìn beag agam ag obair, nach robh mi airson cruinneachadh mòr Kubernetes a riaghladh, no teicneòlas Docker Swarm a chleachdadh, no cabhlach de luchd-frithealaidh a chumail le pods, riochdairean agus gach seòrsa eile. iom-fhillteachd. Gus an amas airson obair a dhèanamh cho furasta ‘s a ghabhas, dh’ fheumadh mi a bhith eòlach air CI/CD.

Ma tha pròiseact beag agad (sa chùis seo, pròiseact Node.js) agus gum bu mhath leat faighinn a-mach mar as urrainn dhut cleachdadh a’ phròiseict seo a dhèanamh fèin-ghluasadach, fhad ‘s a nì thu cinnteach gu bheil na tha air a stòradh san stòr a’ freagairt gu dìreach ris na tha ag obair ann an cinneasachadh, an uairsin bidh mi smaoineachadh gur dòcha gu bheil ùidh agad san artaigil seo.

Ro-ghoireasan

Thathas an dùil gum bi tuigse bhunaiteach aig leughadair an artaigil seo air an loidhne-àithne agus a bhith a’ sgrìobhadh sgriobtaichean Bash. A bharrachd air an sin, bidh feum aige air cunntasan Travis CI и Hub Docker.

Amasan

Cha bhith mi ag ràdh gum faodar an artaigil seo gun chumhachan ainmeachadh mar “oideachadh”. Is e seo barrachd de sgrìobhainn anns a bheil mi a’ bruidhinn air na dh’ ionnsaich mi agus a’ toirt cunntas air a’ phròiseas a tha iomchaidh dhomh airson a bhith a’ dèanamh deuchainn agus a’ cleachdadh còd gu cinneasachadh, air a dhèanamh ann an aon bhealaich fèin-ghluasadach.

Seo mar a thàinig an sruth-obrach agam gu crìch.

Airson còd a chaidh a phostadh gu meur tasgaidh sam bith ach a-mhàin master, tha na gnìomhan a leanas air an coileanadh:

  • Tòisichidh am pròiseact togail air Travis CI.
  • Bithear a’ dèanamh a h-uile deuchainn aonad, aonachadh agus deireadh-gu-deireadh.

A-mhàin airson còd a tha a 'tuiteam a-steach master, tha na leanas air a dhèanamh:

  • A h-uile dad a chaidh ainmeachadh gu h-àrd, a bharrachd air ...
  • A’ togail ìomhaigh Docker stèidhichte air a’ chòd, na roghainnean agus an àrainneachd a th’ ann an-dràsta.
  • A’ cur an ìomhaigh gu Docker Hub.
  • Ceangal ris an fhrithealaiche riochdachaidh.
  • A’ luchdachadh suas dealbh bho Docker Hub chun t-seirbheisiche.
  • Stad an soitheach gnàthach agus tòisich fear ùr stèidhichte air an ìomhaigh ùr.

Mura h-eil fios agad air rud sam bith mu Docker, ìomhaighean agus soithichean, na gabh dragh. Innsidh mi dhuibh uile mu dheidhinn.

Dè a th’ ann an CI/CD?

Tha an giorrachadh CI / CD a’ seasamh airson “amalachadh leantainneach / cleachdadh leantainneach.”

▍ Amalachadh leantainneach

Is e pròiseas a th’ ann an amalachadh leantainneach anns am bi luchd-leasachaidh a’ gealltainn gu prìomh stòr còd stòr a’ phròiseict (mar as trice meur master). Aig an aon àm, tha càileachd a’ chòd air a dhèanamh cinnteach tro dheuchainnean fèin-ghluasadach.

▍ Cleachdadh leantainneach

Is e cleachdadh leantainneach cleachdadh còd gu tric gu fèin-ghluasadach gu cinneasachadh. Tha an dàrna pàirt den acronaim CI / CD uaireannan air a litreachadh mar “lìbhrigeadh leantainneach.” Tha seo gu bunaiteach an aon rud ri “cleachdadh leantainneach”, ach tha “lìbhrigeadh leantainneach” a’ ciallachadh gum feumar atharrachaidhean a dhearbhadh le làimh mus tòisich iad air pròiseas cleachdadh a’ phròiseict.

Getting Started

Canar an aplacaid a chleachd mi airson seo uile ionnsachadh Thoir an aire. Is e seo pròiseact lìn air a bheil mi ag obair, air a dhealbhadh airson notaichean a ghabhail. An toiseach dh'fheuch mi ri dhèanamh JAMStack-project, no dìreach tagradh aghaidh-aghaidh às aonais frithealaiche, gus brath a ghabhail air na comasan aoigheachd àbhaisteach agus cleachdadh pròiseict a tha e a’ tabhann lìon. Mar a dh’ fhàs iom-fhillteachd an tagraidh, dh’ fheumadh mi am pàirt frithealaiche aige a chruthachadh, a bha a’ ciallachadh gum feumadh mi mo ro-innleachd fhìn a dhealbhadh airson amalachadh fèin-ghluasadach agus cleachdadh fèin-ghluasadach a’ phròiseict.

Anns a ’chùis agam, is e frithealaiche Express a tha san tagradh a’ ruith ann an àrainneachd Node.js, a ’frithealadh tagradh React aon-dhuilleag agus a’ toirt taic do API tèarainte taobh an fhrithealaiche. Tha an ailtireachd seo a’ leantainn na ro-innleachd a gheibhear ann seo Stiùireadh dearbhaidh làn stac.

Rinn mi co-chomhairle le caraid, a tha na eòlaiche fèin-ghluasaid, agus dh ’fhaighnich e dha dè a dh’ fheumadh mi a dhèanamh gus toirt air obrachadh mar a bha mi ag iarraidh. Thug e beachd dhomh air cò ris a bu chòir sruth-obrach fèin-ghluasadach a bhith coltach, air a mhìneachadh ann an roinn Amasan den artaigil seo. Leis na h-amasan sin bha sin a’ ciallachadh gum feumadh mi faighinn a-mach ciamar a chleachdas mi Docker.

Docker

Is e inneal a th’ ann an Docker a tha, le taing do theicneòlas containerization, a ’leigeil le tagraidhean a bhith air an sgaoileadh gu furasta, air an cleachdadh agus air an ruith san aon àrainneachd, eadhon ged a bhios an àrd-ùrlar Docker fhèin a’ ruith ann an diofar àrainneachdan. An toiseach, dh'fheumadh mi mo làmhan fhaighinn air innealan loidhne-àithne Docker (CLI). Stiùiridhean Chan urrainnear an stiùireadh stàlaidh Docker a ghairm gu math soilleir agus so-thuigsinn, ach bhuaithe faodaidh tu ionnsachadh gus a’ chiad cheum stàlaidh a ghabhail, feumaidh tu Docker Desktop (airson Mac no Windows) a luchdachadh sìos.

Tha Docker Hub timcheall air an aon rud ri GitHub airson tasgaidhean git, no clàradh npm airson pacaidean javascript. Is e seo stòr air-loidhne airson ìomhaighean Docker. Is e seo a tha Docker Desktop a’ ceangal ris.

Mar sin, gus tòiseachadh le Docker, feumaidh tu dà rud a dhèanamh:

Às deidh seo, faodaidh tu dèanamh cinnteach a bheil an Docker CLI ag obair le bhith a ’ruith an àithne a leanas gus sùil a thoirt air dreach Docker:

docker -v

An uairsin, log a-steach gu Docker Hub le bhith a’ cuir a-steach d’ ainm-cleachdaidh agus facal-faire nuair a thèid faighneachd dhut:

docker login

Gus Docker a chleachdadh, feumaidh tu bun-bheachdan ìomhaighean agus soithichean a thuigsinn.

▍ Ìomhaighean

Tha ìomhaigh rudeigin mar ghorm-dhealbh anns a bheil stiùireadh airson an soitheach a cho-chruinneachadh. Seo dealbh nach gabh atharrachadh de shiostam faidhle agus roghainnean an aplacaid. Faodaidh luchd-leasachaidh ìomhaighean a cho-roinn gu furasta.

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

Bheir an àithne seo a-mach clàr leis a’ cheann a leanas:

REPOSITORY     TAG     IMAGE ID     CREATED     SIZE
---

An uairsin seallaidh sinn ri eisimpleirean de dh’ àitheantan san aon chruth - an toiseach tha àithne ann le beachd, agus an uairsin eisimpleir de na dh’ fhaodas e a thoirt a-mach.

▍ Luchd-gleidhidh

Is e pasgan so-ghnìomhaichte a th’ ann an soitheach anns a bheil a h-uile dad a dh’ fheumar gus tagradh a ruith. Bidh tagradh leis an dòigh-obrach seo an-còmhnaidh ag obair mar an ceudna, ge bith dè am bun-structar: ​​ann an àrainneachd iomallach agus san aon àrainneachd. Is e a’ phuing gu bheil eisimpleirean den aon ìomhaigh air an cur air bhog ann an diofar àrainneachdan.

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

▍ Tagaichean

Tha tag na chomharra air dreach sònraichte de dh’ ìomhaigh.

▍ Iomradh sgiobalta air òrdughan Docker

Seo tar-shealladh air cuid de òrdughan Docker a chleachdar gu cumanta.

sgioba

Co-theacs

bhuaidh

togail docker

Ìomhaigh

A 'togail ìomhaigh bho Dockerfile

tag docker

Ìomhaigh

Tagradh ìomhaigh

ìomhaighean docker

Ìomhaigh

A’ clàradh dhealbhan

docker run

Container

A 'ruith soitheach stèidhichte air ìomhaigh

putadh docker

Ìomhaigh

A luchdadh a-nuas dealbh air a ' chlàr

tarraing docker

Ìomhaigh

A luchdadh a-nuas dealbh bho registry

docker ps

Container

Liosta de na soithichean

prune siostam docker

Ìomhaigh / Container

Thoir air falbh soithichean agus ìomhaighean nach deach a chleachdadh

▍Dockerfile

Tha fios agam mar a ruitheas mi tagradh riochdachaidh gu h-ionadail. Tha rèiteachadh Webpack agam air a dhealbhadh gus tagradh React deiseil a thogail. An ath rud, tha àithne agam a thòisicheas frithealaiche stèidhichte air Node.js air a’ phort 5000. Tha e coltach ri seo:

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

Bu chòir a thoirt fa-near nach eil eisimpleir de thagradh agam airson an stuth seo. Ach an seo, airson deuchainnean, nì tagradh Node sìmplidh sam bith.

Gus an soitheach a chleachdadh, feumaidh tu stiùireadh a thoirt do Docker. Tha seo ga dhèanamh tro fhaidhle ris an canar Dockerfile, suidhichte ann an eòlaire freumh a’ phròiseict. Tha coltas gu bheil am faidhle seo, an toiseach, gu math mì-chinnteach.

Ach chan eil na tha ann ach a’ toirt cunntas, le òrdughan sònraichte, rudeigin coltach ri bhith a’ stèidheachadh àrainneachd obrach. Seo cuid de na h-òrdughan sin:

  • BHO BHO - Bidh an àithne seo a’ tòiseachadh faidhle. Tha e a’ sònrachadh an ìomhaigh bhunaiteach air a bheil an soitheach air a thogail.
  • COPAIDH - Dèan lethbhreac de fhaidhlichean bho stòr ionadail gu soitheach.
  • OBRACH - A’ suidheachadh an eòlaire obrach airson na h-òrdughan a leanas.
  • RUN - Ruith òrdughan.
  • TORAIDHEAN - Suidhichidhean port.
  • EADAR-MHINEACHADH - Comharradh air an àithne a tha ri chur an gnìomh.

Dockerfile is dòcha gum faicear rudeigin mar seo:

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

A rèir an ìomhaigh bhunaiteach a thaghas tu, is dòcha gum feum thu eisimeileachd a bharrachd a stàladh. Is e an fhìrinn gu bheil cuid de dh’ ìomhaighean bunaiteach (leithid Node Alpine Linux) air an cruthachadh leis an amas an dèanamh cho teann sa ghabhas. Mar thoradh air an sin, is dòcha nach bi cuid de na prògraman a tha thu an dùil.

▍ A’ togail, a’ tagadh agus a’ ruith an t-soithich

Tha co-chruinneachadh ionadail agus cur air bhog an t-soithich às deidh dhuinn a bhith againn Dockerfile, tha na gnìomhan gu math sìmplidh. Mus brùth thu an ìomhaigh gu Docker Hub, feumaidh tu a dhearbhadh gu h-ionadail.

▍ Seanadh

An toiseach feumaidh tu cruinneachadh ìomhaigh, a’ sònrachadh ainm agus, gu roghnach, tag (mura h-eil taga air a shònrachadh, sònraichidh an siostam taga dhan ìomhaigh gu fèin-obrachail latest).

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

Às deidh dhut an àithne seo a ruith, faodaidh tu coimhead air Docker a’ togail an ìomhaigh.

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

Is dòcha gun toir an togail mionaid no dhà - tha e uile an urra ri cia mheud eisimeileachd a tha agad. Aon uair ‘s gu bheil an togail deiseil, faodaidh tu an àithne a ruith docker images agus thoir sùil air an tuairisgeul air an ìomhaigh ùr agad.

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

▍ Cur air bhog

Tha an ìomhaigh air a chruthachadh. Tha seo a 'ciallachadh gun urrainn dhut soitheach a ruith stèidhichte air. Leis gu bheil mi airson a bhith comasach air faighinn chun aplacaid a tha a’ ruith anns a’ ghobhar aig localhost:5000, mi, air taobh clì na paidhir 5000:5000 san ath àithne a chaidh a stàladh 5000. Air an taobh cheart tha port an t-soithich.

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

A-nis gu bheil an soitheach air a chruthachadh agus air a ruith, faodaidh tu an àithne a chleachdadh docker ps gus sùil a thoirt air fiosrachadh mun ghobhar seo (no faodaidh tu an àithne a chleachdadh docker ps -a, a sheallas fiosrachadh mu na soithichean uile, chan e dìreach feadhainn ruith).

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

Ma thèid thu a-nis chun an t-seòlaidh localhost:5000 - chì thu duilleag de thagradh ruith a tha a’ coimhead dìreach mar a tha duilleag tagradh a’ ruith ann an àrainneachd cinneasachaidh.

▍ Tagradh agus foillseachadh

Gus aon de na h-ìomhaighean cruthaichte a chleachdadh air an t-seirbheisiche riochdachaidh, feumaidh sinn a bhith comasach air an ìomhaigh seo a luchdachadh sìos bho Docker Hub. Tha seo a’ ciallachadh gum feum thu an toiseach stòr-tasgaidh a chruthachadh airson a’ phròiseict air Docker Hub. Às deidh seo, bidh àite againn far an urrainn dhuinn an ìomhaigh a chuir. Feumar an ìomhaigh ath-ainmeachadh gus am bi an t-ainm a’ tòiseachadh leis an ainm-cleachdaidh Docker Hub againn. Bu chòir seo a leantainn le ainm an stòrais. Faodar taga sam bith a chuir aig deireadh an ainm. Gu h-ìosal tha eisimpleir de bhith ag ainmeachadh ìomhaighean a’ cleachdadh an sgeama seo.

A-nis faodaidh tu an ìomhaigh a thogail le ainm ùr agus ruith an àithne docker push gus a phutadh gu stòr 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

Ma thèid a h-uile càil gu math, bidh an ìomhaigh ri fhaighinn air Docker Hub agus faodar a luchdachadh suas gu furasta chun t-seirbheisiche no a ghluasad gu luchd-leasachaidh eile.

Na h-ath cheumannan

Le seo tha sinn air dearbhadh gu bheil an tagradh, ann an cruth soitheach Docker, a’ ruith gu h-ionadail. Tha sinn air an soitheach a luchdachadh suas gu Docker Hub. Tha seo uile a’ ciallachadh gu bheil sinn air adhartas fìor mhath a dhèanamh a dh’ionnsaigh ar n-amas. A-nis feumaidh sinn dà cheist eile fhuasgladh:

  • A’ stèidheachadh inneal CI airson còd a dhearbhadh agus a chleachdadh.
  • A’ stèidheachadh an t-seirbheisiche riochdachaidh gus an urrainn dha ar còd a luchdachadh sìos agus a ruith.

Anns a 'chùis againn, bidh sinn a' cleachdadh Travis CI. Mar fhrithealaiche - Cuan Didseatach.

Bu chòir a thoirt fa-near gum faod thu an seo measgachadh eile de sheirbheisean a chleachdadh. Mar eisimpleir, an àite Travis CI, faodaidh tu CircleCI no Github Actions a chleachdadh. Agus an àite DigitalOcean - AWS no Linode.

Cho-dhùin sinn a bhith ag obair le Travis CI, agus tha rudeigin agam mu thràth air a rèiteachadh san t-seirbheis seo. Mar sin, a-nis bruidhnidh mi goirid mu mar a nì thu ullachadh airson obair.

Travis CI

Tha Travis CI na inneal airson còd a dhearbhadh agus a chleachdadh. Cha bu mhath leam a dhol a-steach do na duilgheadasan a thaobh stèidheachadh Travis CI, leis gu bheil gach pròiseact gun samhail, agus cha toir seo mòran buannachd. Ach còmhdaichidh mi na bunaitean gus do thòiseachadh ma cho-dhùnas tu Travis CI a chleachdadh. Co-dhiù a thaghas tu Travis CI, CircleCI, Jenkins, no rudeigin eile, thèid dòighean rèiteachaidh coltach ris a chleachdadh anns a h-uile àite.

Gus tòiseachadh le Travis CI, rachaibh gu làrach-lìn pròiseict agus cruthaich cunntas. An uairsin fhilleadh a-steach Travis CI leis a’ chunntas GitHub agad. Nuair a bhios tu a’ stèidheachadh an t-siostam, feumaidh tu an stòr a shònrachadh leis a bheil thu airson obair a dhèanamh fèin-ghluasadach agus cothrom a thoirt dha. (Bidh mi a’ cleachdadh GitHub, ach tha mi cinnteach gun urrainn dha Travis CI aonachadh le BitBucket, agus GitLab, agus seirbheisean eile den aon seòrsa).

Gach uair a thèid Travis CI a thòiseachadh, thèid am frithealaiche a chuir air bhog, a’ cur an gnìomh na h-òrdughan a tha air an sònrachadh anns an fhaidhle rèiteachaidh, a’ toirt a-steach cleachdadh na meuran tasgaidh co-fhreagarrach.

▍ Cearcall beatha obrach

Faidhle rèiteachaidh Travis CI ris an canar .travis.yml agus air a stòradh ann an eòlaire freumh a’ phròiseict, a’ toirt taic do bhun-bheachd thachartasan cearcall beatha gnìomhan. Tha na tachartasan sin air an liostadh san òrdugh anns a bheil iad a’ tachairt:

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

▍Deuchainn

Anns an fhaidhle rèiteachaidh tha mi a 'dol a rèiteachadh an fhrithealaiche Travis CI ionadail. Thagh mi Node 12 mar an cànan agus dh'iarr mi air an t-siostam na h-eisimeileachd a chuir a-steach airson Docker a chleachdadh.

A h-uile dad a tha air a liostadh ann an .travis.yml, a chuir gu bàs nuair a thèid a h-uile iarrtas tarraing a dhèanamh gu gach meur den stòr, mura h-eilear ag innse a chaochladh. Tha seo na fheart feumail oir tha e a’ ciallachadh gun urrainn dhuinn deuchainn a dhèanamh air a h-uile còd a thig a-steach don stòr. Leigidh seo fios dhut a bheil an còd deiseil airson a sgrìobhadh chun mheur. master, agus am bris e pròiseas togail a’ phròiseict. Anns an rèiteachadh chruinneil seo, bidh mi a’ stàladh a h-uile càil gu h-ionadail, a’ ruith frithealaiche Webpack dev air a’ chùl (tha seo na fheart den t-sruth-obrach agam), agus a’ ruith dheuchainnean.

Ma tha thu airson gum bi bràistean aig an stòr agad a’ sealltainn còmhdach deuchainn, an seo Gheibh thu stiùireadh goirid mu bhith a’ cleachdadh Jest, Travis CI agus Coveralls gus am fiosrachadh seo a chruinneachadh agus a thaisbeanadh.

Mar sin seo susbaint an fhaidhle .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

Seo far a bheil na gnìomhan a thèid a dhèanamh airson gach meur den stòr agus airson iarrtasan tarraing a’ tighinn gu crìch.

▍ Cleachdadh

Stèidhichte air a’ bharail gun deach a h-uile deuchainn fèin-ghluasadach a chrìochnachadh gu soirbheachail, is urrainn dhuinn, a tha roghainneil, an còd a chuir chun t-seirbheisiche riochdachaidh. Leis gu bheil sinn airson seo a dhèanamh a-mhàin airson còd bhon mheur master, bheir sinn stiùireadh iomchaidh don t-siostam anns na roghainnean cleachdadh. Mus feuch thu ris a’ chòd a chleachdadh air am bi sinn a’ coimhead an ath rud sa phròiseact agad, bu mhath leam rabhadh a thoirt dhut gum feum fìor sgriobt a bhith agad airson a chleachdadh.

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

Tha an sgriobt cleachdadh a’ fuasgladh dà dhuilgheadas:

  • Tog, tag agus cuir an ìomhaigh gu Docker Hub a ’cleachdadh inneal CI (anns a’ chùis againn, Travis CI).
  • A 'luchdachadh an ìomhaigh air an fhrithealaiche, a' stad an t-seann container agus a 'tòiseachadh air fear ùr (anns a' chùis againn, an fhrithealaiche a 'ruith air an àrd-ùrlar DigitalOcean).

An toiseach, feumaidh tu pròiseas fèin-ghluasadach a stèidheachadh airson togail, tagadh, agus putadh air an ìomhaigh gu Docker Hub. Tha seo uile glè choltach ris na tha sinn air a dhèanamh le làimh mar-thà, ach a-mhàin gu bheil feum againn air ro-innleachd airson tagaichean sònraichte a shònrachadh do dhealbhan agus logadh a-steach fèin-ghluasadach. Bha duilgheadas agam le beagan mion-fhiosrachaidh mun sgriobt cleachdadh, leithid ro-innleachd tagadh, logadh a-steach, còdachadh iuchrach SSH, stèidheachadh ceangail SSH. Ach gu fortanach tha mo leannan glè mhath le bash, mar le iomadh rud eile. Chuidich e mi a’ sgrìobhadh an sgriobt seo.

Mar sin, is e a’ chiad phàirt den sgriobt an ìomhaigh a luchdachadh suas gu Docker Hub. Tha seo gu math furasta a dhèanamh. Tha an sgeama tagaidh a chleachd mi a’ toirt a-steach a bhith a’ cothlamadh git hash agus tag git, ma tha fear ann. Nì seo cinnteach gu bheil an taga gun samhail agus ga dhèanamh nas fhasa an co-chruinneachadh air a bheil e stèidhichte a chomharrachadh. DOCKER_USERNAME и DOCKER_PASSWORD nan caochladairean àrainneachd luchd-cleachdaidh a dh’ fhaodar a shuidheachadh le bhith a’ cleachdadh eadar-aghaidh Travis CI. Bidh Travis CI a’ làimhseachadh dàta mothachail gu fèin-ghluasadach gus nach tuit e anns na làmhan ceàrr.

Seo a’ chiad phàirt den sgriobt 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}

Bidh na bhios an dàrna pàirt den sgriobt gu tur an urra ris an aoigh a tha thu a’ cleachdadh agus mar a tha an ceangal ris air a chuir air dòigh. Anns a 'chùis agam, leis gu bheil mi a' cleachdadh Digital Ocean, bidh mi a 'cleachdadh nan òrduighean gus ceangal ris an fhrithealaiche doctl. Nuair a bhios tu ag obair le AWS, thèid an goireas a chleachdadh aws, Agus mar sin air adhart.

Cha robh e gu sònraichte doirbh am frithealaiche a stèidheachadh. Mar sin, stèidhich mi droplet stèidhichte air an ìomhaigh bhunaiteach. Bu chòir a thoirt fa-near gu bheil an siostam a thagh mi feumach air stàladh làimhe aon-ùine de Docker agus foillseachadh làimhe aon-ùine de Docker. Chleachd mi Ubuntu 18.04 gus Docker a stàladh, mar sin ma tha thu cuideachd a’ cleachdadh Ubuntu airson an aon rud a dhèanamh, faodaidh tu leantainn gu seo stiùireadh sìmplidh.

Chan eil mi a’ bruidhinn an seo mu òrdughan sònraichte airson na seirbheis, oir faodaidh an taobh seo atharrachadh gu mòr ann an diofar chùisean. Bheir mi dìreach plana gnìomh coitcheann a thèid a choileanadh às deidh dhomh ceangal tro SSH ris an fhrithealaiche air am bi am pròiseact air a chleachdadh:

  • Feumaidh sinn an container a tha a’ ruith an-dràsta a lorg agus stad a chur air.
  • An uairsin feumaidh tu soitheach ùr a chuir air bhog air a ’chùl.
  • Feumaidh tu port ionadail an fhrithealaiche a shuidheachadh gu 80 - leigidh seo leat a dhol a-steach don làrach aig seòladh mar example.com, gun a bhith a 'sònrachadh a' phort, seach a bhith a 'cleachdadh seòladh mar example.com:5000.
  • Mu dheireadh, feumaidh tu na seann shoithichean agus ìomhaighean uile a dhubhadh às.

Seo leantainn air adhart leis an sgriobt.

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

Cuid de rudan airson aire a thoirt dhaibh

Tha e comasach nuair a cheanglas tu ris an fhrithealaiche tro SSH bho Travis CI, gum faic thu rabhadh a chuireas stad ort bho bhith a’ leantainn leis an stàladh oir bidh an siostam a’ feitheamh ri freagairt an neach-cleachdaidh.

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

Dh’ ionnsaich mi gum faodar iuchair sreang a chòdachadh ann am base64 gus a shàbhaladh ann an cruth anns am faodar obrachadh leis gu goireasach agus gu earbsach. Aig an ìre stàlaidh, faodaidh tu an iuchair phoblach a dhì-chòdachadh agus a sgrìobhadh gu faidhle known_hosts gus cur às don mhearachd gu h-àrd.

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

Ann an cleachdadh, is dòcha gum bi an òrdugh seo a 'coimhead mar seo:

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

Agus seo na tha e a’ toirt a-mach - sreang le còd base64:

MTIzLjQ1LjY3Ljg5IHNzaC1yc2EgQUFBQUIzTnphQzF5YzJFQUFBQUJJd0FBQVFFQWtsT1Vwa0RIcmZIWTE3U2JybVRJcE5MVEdLOVRqb20vQldEU1UKR1BsK25hZnpsSERUWVc3aGRJNHlaNWV3MThKSDRKVzlqYmhVRnJ2aVF6TTd4bEVMRVZmNGg5bEZYNVFWa2JQcHBTd2cwY2RhMwpQYnY3a09kSi9NVHlCbFdYRkNSK0hBbzNGWFJpdEJxeGlYMW5LaFhwSEFac01jaUxxOFY2UmpzTkFRd2RzZE1GdlNsVksvN1hBCnQzRmFvSm9Bc25jTTFROXg1KzNWMFd3NjgvZUlGbWIxenVVRmxqUUpLcHJyWDg4WHlwTkR2allOYnk2dncvUGIwcndlcnQvRW4KbVorQVc0T1pQblRQSTg5WlBtVk1MdWF5ckQyY0U4NlovaWw4YitndzNyMysxbkthdG1Ja2puMnNvMWQwMVFyYVRsTXFWU3NieApOclJGaTl3cmYrTTdRPT0geW91QGV4YW1wbGUuY29tCg==

Seo an àithne a chaidh ainmeachadh gu h-àrd

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

Faodar an aon dòigh-obrach a chleachdadh le iuchair phrìobhaideach nuair a stèidhicheas tu ceangal, oir is dòcha gu bheil feum agad air iuchair phrìobhaideach gus faighinn chun fhrithealaiche. Nuair a bhios tu ag obair leis an iuchair, cha leig thu leas ach dèanamh cinnteach gu bheil e air a stòradh gu tèarainte ann an caochladair àrainneachd Travis CI agus nach eil e air a thaisbeanadh an àite sam bith.

Is e rud eile ri thoirt fa-near gur dòcha gum feum thu an sgriobt cleachdadh gu lèir a ruith mar aon loidhne, mar eisimpleir - le doctl. Is dòcha gu feum seo beagan oidhirp a bharrachd.

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

TLS / SSL agus cothromachadh luchdan

Às deidh dhomh a h-uile càil a chaidh ainmeachadh gu h-àrd a dhèanamh, b’ e an duilgheadas mu dheireadh a thachair mi nach robh SSL aig an fhrithealaiche. Leis gu bheil mi a’ cleachdadh frithealaiche Node.js, gus sparradh a bhith ag obair neach-ionaid cùl Nginx agus Let's Encrypt, feumaidh tu tòrr a chluinntinn.

Cha robh mi dha-rìribh ag iarraidh an rèiteachadh SSL seo a dhèanamh le làimh, agus mar sin chruthaich mi cothromachadh luchdan agus chlàraich mi am mion-fhiosrachadh ann an DNS. A thaobh DigitalOcean, mar eisimpleir, tha cruthachadh teisteanas fèin-soidhnichte fèin-ùrachaidh air an neach-cothromachaidh luchdan na dhòigh-obrach sìmplidh, an-asgaidh agus luath. Tha buannachd a bharrachd aig an dòigh-obrach seo gu bheil e ga dhèanamh glè fhurasta SSL a stèidheachadh air ioma-fhrithealaiche a’ ruith air cùl cothromachadh luchdan ma tha feum air. Leigidh seo leis na frithealaichean fhèin gun a bhith “smaoineachadh” mu SSL idir, ach aig an aon àm am port a chleachdadh mar as àbhaist 80. Mar sin tha e tòrr nas fhasa agus nas goireasaiche SSL a stèidheachadh air cothromachadh luchd na dòighean eile air SSL a stèidheachadh.

A-nis faodaidh tu a h-uile port air an fhrithealaiche a tha a 'gabhail ri ceanglaichean a tha a' tighinn a-steach a dhùnadh - ach a-mhàin am port 80, air a chleachdadh airson conaltradh leis an neach-cothromachaidh luchd, agus am port 22 airson SSH. Mar thoradh air an sin, bidh oidhirp air faighinn chun fhrithealaiche gu dìreach air puirt sam bith eile seach an dà rud seo.

Builean

Às deidh dhomh a h-uile dad a bhruidhinn mi mu dheidhinn san stuth seo a dhèanamh, cha do chuir an àrd-ùrlar Docker no bun-bheachdan slabhraidhean CI / CD fèin-ghluasadach eagal orm tuilleadh. Bha e comasach dhomh sèine amalachaidh leantainneach a stèidheachadh, nuair a thèid an còd a dhearbhadh mus tèid e a-steach gu cinneasachadh agus thèid an còd a chuir gu fèin-ghluasadach air an fhrithealaiche. Tha seo uile fhathast an ìre mhath ùr dhomh, agus tha mi cinnteach gu bheil dòighean ann airson mo shruth-obrach fèin-ghluasadach a leasachadh agus a dhèanamh nas èifeachdaiche. Mar sin ma tha beachdan sam bith agad air a’ chùis seo, leig fios dhomh. mi fios. Tha mi an dòchas gu bheil an artaigil seo air do chuideachadh anns na h-oidhirpean agad. Tha mi airson a chreidsinn, às deidh dhut a leughadh, gun do dh’ ionnsaich thu na h-uimhir ’s a dh’ ionnsaich mi fhad ‘s a bha mi a’ faighinn a-mach a h-uile dad a bhruidhinn mi ann.

PS Anns ar margaidh tha dealbh ann Docker, a dh'fhaodar a stàladh ann an aon bhriogadh. Faodaidh tu sgrùdadh a dhèanamh air gnìomhachd soithichean aig VPS. Gheibh a h-uile neach-dèiligidh ùr 3 latha de dheuchainn an-asgaidh.

Luchd leughaidh! Am bi thu a’ cleachdadh theicneòlasan CI/CD anns na pròiseactan agad?

A’ cruthachadh sèine CI/CD agus ag obair gu fèin-obrachail le Docker

Source: www.habr.com

Cuir beachd ann