Slabhra CI/CD a chruthú agus obair a uathoibriú le Docker

Scríobh mé mo chéad láithreáin ghréasáin sna 90í déanacha. Ar ais ansin bhí sé an-éasca iad a chur in ord oibre. Bhí freastalaí Apache ar roinnt óstáil roinnte, d'fhéadfá logáil isteach sa fhreastalaí seo trí FTP trí rud éigin cosúil le scríobh ftp://ftp.example.com. Ansin bhí ort d'ainm agus do phasfhocal a chur isteach agus na comhaid a uaslódáil chuig an bhfreastalaí. Bhí amanna éagsúla ann, bhí gach rud níos simplí ansin ná anois.

Slabhra CI/CD a chruthú agus obair a uathoibriú le Docker

Sa dá scór bliain ó shin, tá gach rud athraithe go mór. Tá láithreáin ghréasáin tar éis éirí níos casta; ní mór iad a chur le chéile sula scaoiltear iad le táirgeadh. Tháinig go leor freastalaithe amháin ar fhreastalaí amháin a bhí ag rith taobh thiar de chomhardaithe ualaigh, agus bhí úsáid córais rialaithe leagain níos coitianta.

Do mo thionscadal pearsanta bhí cumraíocht speisialta agam. Agus bhí a fhios agam go raibh an cumas ag teastáil uaim an suíomh a imscaradh i dtáirgeadh trí ghníomh amháin a dhéanamh: cód a scríobh chuig brainse master ar GitHub. Ina theannta sin, bhí a fhios agam, d'fhonn feidhmiú m'fheidhmchlár gréasáin beag a chinntiú, nach raibh mé ag iarraidh braisle ollmhór Kubernetes a bhainistiú, nó teicneolaíocht Docker Swarm a úsáid, nó cabhlach freastalaithe a chothabháil le pods, gníomhairí agus gach cineál eile. castachtaí. Chun an sprioc maidir le hobair a dhéanamh chomh héasca agus ab fhéidir a bhaint amach, bhí orm eolas a chur ar CI/CD.

Má tá tionscadal beag agat (sa chás seo, tionscadal Node.js) agus ba mhaith leat a fháil amach conas imscaradh an tionscadail seo a uathoibriú, agus ag an am céanna a chinntiú go dtagann an méid atá stóráilte sa stór go díreach leis an méid a oibríonn i dtáirgeadh, ansin I smaoineamh b'fhéidir go mbeadh suim agat san alt seo.

Réamhriachtanais

Táthar ag súil go mbeidh tuiscint bhunúsach ag léitheoir an ailt seo ar an líne ordaithe agus ar scripteanna Bash a scríobh. Ina theannta sin, beidh cuntais de dhíth air Travis C.I. и Mol dugaire.

Cuspóirí

Ní déarfaidh mé gur féidir “teagasc” a thabhairt ar an alt seo gan choinníoll. Tá sé seo níos mó de dhoiciméad ina labhair mé faoi na rudaí atá foghlamtha agam agus cur síos ar an bpróiseas a oireann dom a thástáil agus a imscaradh cód le táirgeadh, a dhéantar i pas uathoibrithe amháin.

Is é seo a chríochnaigh mo sreabhadh oibre.

Le haghaidh cód a phostáiltear chuig aon bhrainse stórtha seachas master, déantar na gníomhartha seo a leanas:

  • Cuirtear tús le tógáil an tionscadail ar Travis CI.
  • Déantar gach tástáil aonad, comhtháthú agus ceann go ceann.

Ach amháin le haghaidh cód a thagann isteach master, déantar an méid seo a leanas:

  • Gach rud a luaitear thuas, móide ...
  • Ag tógáil íomhá Docker bunaithe ar an gcód reatha, na socruithe agus an timpeallacht.
  • An íomhá á himscaradh chuig Docker Hub.
  • Ceangal leis an bhfreastalaí táirgeachta.
  • Íomhá a uaslódáil ó Docker Hub chuig an bhfreastalaí.
  • An coimeádán reatha a stopadh agus ceann nua a thosú bunaithe ar an íomhá nua.

Mura bhfuil aon rud ar eolas agat faoi Docker, íomhánna agus coimeádáin, ná bí buartha. Inseoidh mé duit go léir faoi.

Cad é CI/CD?

Seasann an giorrúchán CI/CD do “comhtháthú leanúnach/imscaradh leanúnach.”

▍ Comhtháthú leanúnach

Is próiseas é comhtháthú leanúnach ina dtugann forbróirí gealltanais do stór cód foinse an tionscadail (brainse de ghnáth master). Ag an am céanna, áirithítear cáilíocht an chóid trí thástáil uathoibrithe.

▍ Imscaradh leanúnach

Is éard atá i gceist le himscaradh leanúnach cód a imscaradh go minic agus go huathoibríoch i dtáirgeadh. Uaireanta litrítear an dara cuid den acrainm CI/CD mar “seachadadh leanúnach.” Is ionann é seo go bunúsach agus “imscaradh leanúnach”, ach ciallaíonn “seachadadh leanúnach” go bhfuil gá le hathruithe a dhearbhú de láimh sula gcuirtear tús le próiseas imlonnaithe an tionscadail.

Ag Tosú

Tugtar an aip a d’úsáid mé chun é seo go léir a fhoghlaim Tóg Nóta. Is tionscadal gréasáin é seo a bhfuilim ag obair air, deartha chun nótaí a ghlacadh. Ar dtús rinne mé iarracht a dhéanamh JAMStack-project, nó díreach feidhmchlár tosaigh gan freastalaí, chun leas a bhaint as na hacmhainní caighdeánacha óstála agus imlonnaithe tionscadail a thairgeann sé glanluacháil. De réir mar a d'fhás castacht an fheidhmchláir, bhí orm a chuid freastalaí a chruthú, rud a chiallaigh go mbeadh orm mo straitéis féin a cheapadh maidir le comhtháthú uathoibrithe agus imscaradh uathoibrithe an tionscadail.

I mo chás, is freastalaí Express é an t-iarratas a ritheann i dtimpeallacht Node.js, ag freastal ar fheidhmchlár React aon-leathanach agus ag tacú le API slán ar thaobh an fhreastalaí. Leanann an ailtireacht seo an straitéis is féidir a fháil i tugtha Treoir fíordheimhnithe stack iomlán.

Chuaigh mé i gcomhairle le cara, atá ina shaineolaí uathoibrithe, agus d'iarr sé air cad ba ghá dom a dhéanamh chun go n-oibreodh sé ar fad mar a theastaigh uaim. Thug sé smaoineamh dom ar an gcuma ar cheart do shreabhadh oibre uathoibrithe, a leagtar amach sa chuid Spriocanna den Airteagal seo. Mar gheall ar na spriocanna seo a bheith agam bhí orm a dhéanamh amach conas Docker a úsáid.

dhugaire

Is uirlis é Docker a cheadaíonn, a bhuíochas le teicneolaíocht coimeádaithe, iarratais a dháileadh, a imscaradh agus a reáchtáil go héasca sa timpeallacht chéanna, fiú má ritheann ardán Docker féin i dtimpeallachtaí éagsúla. Ar dtús, bhí orm mo lámha a fháil ar na huirlisí líne ordaithe Docker (CLI). teagasc Ní féidir treoir suiteála Docker a ghairm an-soiléir agus intuigthe, ach uaidh sin is féidir leat a fhoghlaim go gcaithfidh tú Docker Desktop (le haghaidh Mac nó Windows) a íoslódáil chun an chéad chéim suiteála a ghlacadh.

Tá an rud céanna thart ar Docker Hub le GitHub le haghaidh stórtha git, nó clárlann npm le haghaidh pacáistí JavaScript. Is stór ar líne é seo le haghaidh íomhánna Docker. Is é seo a nascann Docker Desktop leis.

Mar sin, chun tús a chur le Docker, ní mór duit dhá rud a dhéanamh:

Tar éis seo, is féidir leat a sheiceáil an bhfuil an Docker CLI ag obair tríd an ordú seo a leanas a rith chun an leagan Docker a sheiceáil:

docker -v

Ansin, logáil isteach i Docker Hub trí d'ainm úsáideora agus do phasfhocal a chur isteach nuair a iarrtar ort:

docker login

Chun Docker a úsáid, ní mór duit coincheapa na n-íomhánna agus na gcoimeádán a thuiscint.

▍ Íomhánna

Is ionann íomhá agus treoirphlean ina bhfuil treoracha chun an coimeádán a chur le chéile. Seo léargas do-athlasta ar chóras comhaid agus ar shocruithe an fheidhmchláir. Is féidir le forbróirí íomhánna a roinnt go héasca.

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

Aschuirfidh an t-ordú seo tábla leis an gceanntásc seo a leanas:

REPOSITORY     TAG     IMAGE ID     CREATED     SIZE
---

Ansin féachfaimid ar roinnt samplaí d'orduithe san fhormáid chéanna - ar dtús tá ordú le trácht, agus ansin sampla de cad is féidir é a aschur.

▍ Coimeádáin

Is pacáiste inrite é coimeádán ina bhfuil gach rud is gá chun feidhmchlár a rith. Oibreoidh feidhmchlár leis an gcur chuige seo mar an gcéanna i gcónaí, beag beann ar an mbonneagar: i dtimpeallacht iargúlta agus sa timpeallacht chéanna. Is é an pointe go seoltar cásanna den íomhá céanna i dtimpeallachtaí éagsúla.

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

▍ Clibeanna

Is léiriú é clib ar leagan sonrach d’íomhá.

▍ Tagairt thapa d'orduithe Docker

Seo forbhreathnú ar roinnt orduithe Docker a úsáidtear go coitianta.

Foireann

Comhthéacs

éifeacht

tógáil duga

Íomhá

Ag tógáil íomhá ó Dockerfile

clib docker

Íomhá

Clibeáil íomhá

íomhánna docker

Íomhá

Íomhánna a liostú

docker reáchtáil

Coimeádán

Coimeádán a rith bunaithe ar íomhá

bhrú docker

Íomhá

Íomhá a uaslódáil chuig an gclárlann

tarraingt docker

Íomhá

Íoslódáil an pictiúr as an gclárlann

docker ps

Coimeádán

Coimeádáin liostú

prune córas docker

Íomhá/Coimeádán

Coimeádáin agus íomhánna nár úsáideadh a bhaint

▍Dockerfile

Tá a fhios agam conas feidhmchlár táirgthe a reáchtáil go háitiúil. Tá cumraíocht Webpack agam atá deartha chun feidhmchlár réidh React a thógáil. Ar aghaidh, tá ordú agam a thosaíonn freastalaí atá bunaithe ar Node.js ar an gcalafort 5000. Breathnaíonn sé mar seo:

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

Ba chóir a thabhairt faoi deara nach bhfuil iarratas samplach agam ar an ábhar seo. Ach anseo, le haghaidh turgnaimh, déanfaidh aon iarratas Nód simplí.

Chun an coimeádán a úsáid, beidh ort treoracha a thabhairt do Docker. Déantar é seo trí chomhad ar a dtugtar Dockerfile, atá suite i bhfréamh-eolaire an tionscadail. Is cosúil go bhfuil an comhad seo, ar dtús, sách dothuigthe.

Ach ní dhéanann an méid atá ann ach cur síos, le horduithe speisialta, ar rud éigin cosúil le timpeallacht oibre a bhunú. Seo cuid de na horduithe seo:

  • Ó - Tosaíonn an t-ordú seo comhad. Sonraíonn sé an buníomhá ar a dtógtar an coimeádán.
  • CÓIP — Comhaid a chóipeáil ó fhoinse áitiúil go coimeádán.
  • OIBREACHA — An t-eolaire oibre a shocrú do na horduithe seo a leanas.
  • RUN - Rith orduithe.
  • MÍNIÚ - Socruithe calafoirt.
  • ENTRYPOINT — Léiriú ar an ordú a bheidh le forghníomhú.

Dockerfile seans go bhfeicfeadh rud éigin 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

Ag brath ar an íomhá bonn a roghnaíonn tú, b'fhéidir go mbeadh ort spleáchais bhreise a shuiteáil. Is é an bhfíric go gcruthaítear roinnt buníomhánna (cosúil le Node Alpine Linux) leis an sprioc iad a dhéanamh chomh dlúth agus is féidir. Mar thoradh air sin, b'fhéidir nach bhfuil cuid de na cláir a bhfuil súil agat leo.

▍ An coimeádán a thógáil, a chlibeáil agus a rith

Tá cóimeáil áitiúil agus seoladh an choimeádáin tar éis dúinn Dockerfile, tá na tascanna simplí go leor. Sula ndéanann tú an íomhá a bhrú chuig Docker Hub, ní mór duit í a thástáil go háitiúil.

▍ Tionól

An Chéad is gá duit a bhailiú íomhá, ag sonrú ainm agus, go roghnach, clib (mura bhfuil clib sonraithe, sannfaidh an córas clib go huathoibríoch don íomhá latest).

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

Tar éis duit an t-ordú seo a rith, is féidir leat féachaint ar Docker an íomhá a thógáil.

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

Féadfaidh an tógáil cúpla nóiméad a ghlacadh - braitheann sé ar fad ar cé mhéad spleáchas atá agat. Nuair a bheidh an tógáil críochnaithe, is féidir leat an t-ordú a rith docker images agus féach ar an gcur síos ar d’íomhá nua.

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

▍ Seoladh

Tá an íomhá cruthaithe. Ciallaíonn sé seo gur féidir leat coimeádán a rith bunaithe air. Toisc gur mhaith liom a bheith in ann rochtain a fháil ar an bhfeidhmchlár atá ag rith sa choimeádán ag localhost:5000, liom, ar thaobh na láimhe clé den péire 5000:5000 sa chéad ordú eile suiteáilte 5000. Ar an taobh dheis tá an calafort coimeádán.

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

Anois go bhfuil an coimeádán cruthaithe agus á rith, is féidir leat an t-ordú a úsáid docker ps chun breathnú ar fhaisnéis faoin gcoimeádán seo (nó is féidir leat an t-ordú a úsáid docker ps -a, a thaispeánann faisnéis faoi gach coimeádán, ní hamháin cinn reatha).

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

Má théann tú anois chuig an seoladh localhost:5000 — is féidir leat leathanach d'fheidhmchlár reatha a fheiceáil a bhfuil an chuma chéanna air agus atá ar leathanach feidhmchláir atá ag rith i dtimpeallacht táirgthe.

▍ Clibeáil agus foilsiú

Chun ceann de na híomhánna cruthaithe a úsáid ar an bhfreastalaí táirgthe, ní mór dúinn a bheith in ann an íomhá seo a íoslódáil ó Docker Hub. Ciallaíonn sé seo go gcaithfidh tú stór a chruthú don tionscadal ar Docker Hub ar dtús. Tar éis seo, beidh áit againn inar féidir linn an íomhá a sheoladh. Ní mór an íomhá a athainmniú ionas go dtosaíonn a hainm lenár n-ainm úsáideora Docker Hub. Ba chóir ainm an taisc a chur ina dhiaidh sin. Is féidir aon chlib a chur ag deireadh an ainm. Seo thíos sampla d’íomhánna a ainmniú ag baint úsáide as an scéim seo.

Anois is féidir leat an íomhá a thógáil le hainm nua agus an t-ordú a rith docker push chun é a bhrú chuig 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

Má théann gach rud go maith, beidh an íomhá ar fáil ar Docker Hub agus is féidir é a uaslódáil go héasca ar an bhfreastalaí nó a aistriú chuig forbróirí eile.

Na chéad chéimeanna eile

Faoin am seo tá sé deimhnithe againn go bhfuil an feidhmchlár, i bhfoirm coimeádán Docker, ag rith go háitiúil. Táimid tar éis an coimeádán a uaslódáil chuig Docker Hub. Ciallaíonn sé seo go léir go bhfuil dul chun cinn an-mhaith déanta againn cheana féin i dtreo ár sprice. Anois caithfimid dhá cheist eile a réiteach:

  • Uirlis CI a bhunú chun cód a thástáil agus a imscaradh.
  • An freastalaí táirgeachta a shocrú ionas gur féidir leis ár gcód a íoslódáil agus a rith.

In ár gcás, úsáidimid Travis C.I.. Mar fhreastalaí - Aigéan Digiteach.

Ba chóir a thabhairt faoi deara gur féidir leat teaglaim eile de sheirbhísí a úsáid anseo. Mar shampla, in ionad Travis CI, is féidir leat CircleCI nó Gníomhartha Github a úsáid. Agus in ionad DigitalOcean - AWS nó Linode.

Shocraigh muid oibriú le Travis CI, agus tá rud éigin cumraithe agam cheana féin sa tseirbhís seo. Dá bhrí sin, anois beidh mé ag caint go hachomair faoi conas é a ullmhú le haghaidh oibre.

Travis C.I.

Is uirlis é Travis CI chun cód a thástáil agus a imscaradh. Níor mhaith liom dul isteach sa intricacies a bhaineann le bunú Travis CI, ós rud é go bhfuil gach tionscadal uathúil, agus ní thabharfaidh sé seo mórán tairbhe. Ach clúdóidh mé na bunghnéithe chun tú a chur ar bun má shocraíonn tú Travis CI a úsáid. Cibé an roghnaíonn tú Travis CI, CircleCI, Jenkins, nó rud éigin eile, bainfear úsáid as modhanna cumraíochta comhchosúla i ngach áit.

Chun tús a chur le Travis CI, téigh go dtí sayt proekta agus cruthaigh cuntas. Ansin comhtháthú Travis CI le do chuntas GitHub. Agus an córas á bhunú, beidh ort an stór a bhfuil tú ag iarraidh obair a uathoibriú leis a shonrú agus rochtain air a chumasú. (Úsáidim GitHub, ach táim cinnte gur féidir le Travis CI comhtháthú le BitBucket, agus GitLab, agus seirbhísí eile dá samhail).

Gach uair a thosaítear Travis CI, seoltar an freastalaí, ag déanamh na n-orduithe a shonraítear sa chomhad cumraíochta, lena n-áirítear na brainsí stór comhfhreagracha a imscaradh.

▍ Saolré an phoist

Comhad cumraíochta Travis CI ar a dtugtar .travis.yml agus a stóráil i bhfréamh-eolaire an tionscadail, tacaíonn sé le coincheap na n-imeachtaí saolré tascanna. Tá na teagmhais seo liostaithe san ord ina dtarlaíonn siad:

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

▍ Tástáil

Sa chomhad cumraíochta táim chun an freastalaí Travis CI áitiúil a chumrú. Roghnaigh mé Nód 12 mar an teanga agus dúirt mé leis an gcóras na spleáchais a theastaíonn chun Docker a úsáid a shuiteáil.

Gach rud atá liostaithe i .travis.yml, a fhorghníomhú nuair a dhéanfar gach iarratas ar tharraingt chuig gach brainse den stór, mura sonraítear a mhalairt. Is gné úsáideach é seo toisc go gciallaíonn sé gur féidir linn gach cód a thagann isteach sa stór a thástáil. Ligeann sé seo duit an bhfuil an cód réidh le scríobh chuig an mbrainse. master, agus cibé an mbrisfidh sé an próiseas tógála tionscadail. Sa chumraíocht dhomhanda seo, shuiteáilim gach rud go háitiúil, reáchtáil an freastalaí Webpack dev sa chúlra (is gné de mo sreabhadh oibre é seo), agus reáchtáil tástálacha.

Más mian leat go dtaispeánfadh do stór suaitheantais a léiríonn clúdach tástála, anseo Is féidir leat treoracha gearra a fháil maidir le Jest, Travis CI agus Coveralls a úsáid chun an fhaisnéis seo a bhailiú agus a thaispeáint.

Mar sin anseo tá ábhar an chomhaid .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 nuair a thagann deireadh leis na gníomhartha a dhéantar do gach brainse den stór agus d’iarratais ar tharraingt.

▍Imscaradh

Bunaithe ar an toimhde gur críochnaíodh gach tástáil uathoibrithe go rathúil, is féidir linn, rud atá roghnach, an cód a imscaradh chuig an bhfreastalaí táirgeachta. Ós rud é ba mhaith linn é seo a dhéanamh ach amháin le haghaidh cód ón mbrainse master, tugaimid treoracha cuí don chóras sna socruithe imscaradh. Sula ndéanann tú iarracht an cód a úsáid a bhreathnóimid air i do thionscadal, ba mhaith liom rabhadh a thabhairt duit go gcaithfidh script iarbhír a bheith agat ar a dtugtar le haghaidh imscaradh.

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

Réitíonn an script imlonnaithe dhá fhadhb:

  • Tóg, clibeáil agus seol an íomhá chuig Docker Hub ag baint úsáide as uirlis CI (Travis CI inár gcás).
  • An íomhá a luchtú ar an bhfreastalaí, stop a chur leis an sean-choimeádán agus ceann nua a thosú (inár gcás, ritheann an freastalaí ar an ardán DigitalOcean).

Ar dtús, ní mór duit próiseas uathoibríoch a bhunú chun an íomhá a thógáil, a chlibeáil agus a bhrú chuig Docker Hub. Tá sé seo ar fad an-chosúil leis an méid atá déanta againn cheana féin de láimh, ach amháin go bhfuil straitéis ag teastáil uainn chun clibeanna uathúla a shannadh d'íomhánna agus logáil isteach a uathoibriú. Bhí deacracht agam le roinnt sonraí faoin script imscaradh, mar straitéis clibeála, logáil isteach, ionchódú eochair SSH, bunú nasc SSH. Ach ar an ádh tá mo bhuachaill an-mhaith le bash, mar atá le go leor rudaí eile. Chuidigh sé liom an script seo a scríobh.

Mar sin, tá an chéad chuid den script ag uaslódáil an íomhá chuig Docker Hub. Tá sé seo éasca go leor a dhéanamh. Is éard atá i gceist leis an scéim chlibeála a d'úsáid mé ná git hash agus clib git a chomhcheangal, má tá ceann ann. Cinntíonn sé seo go bhfuil an chlib uathúil agus déanann sé níos éasca an tionól ar a bhfuil sé bunaithe a aithint. DOCKER_USERNAME и DOCKER_PASSWORD is athróga timpeallachta úsáideora iad is féidir a shocrú le comhéadan Travis CI. Déanfaidh Travis CI sonraí íogaire a phróiseáil go huathoibríoch ionas nach dtagann sé isteach sna lámha mícheart.

Seo é an chéad chuid den script 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}

Braitheann cad a bheidh sa dara cuid den script go hiomlán ar an óstach atá in úsáid agat agus conas a eagraítear an nasc leis. I mo chás, ós rud é go n-úsáideann mé Digital Ocean, úsáidim na horduithe chun ceangal leis an bhfreastalaí docht. Agus tú ag obair le AWS, bainfear úsáid as an bhfóntas aws, agus mar sin de.

Ní raibh sé thar a bheith deacair an freastalaí a shocrú. Mar sin, bhunaigh mé droplet bunaithe ar an íomhá bonn. Ba chóir a thabhairt faoi deara go n-éilíonn an córas a roghnaigh mé suiteáil láimhe aon-uaire de Docker agus seoladh láimhe aon-uaire de Docker. Bhain mé úsáid as Ubuntu 18.04 chun Docker a shuiteáil, mar sin má tá Ubuntu á úsáid agat freisin chun an rud céanna a dhéanamh, is féidir leat a leanúint seo treoir shimplí.

Níl mé ag caint anseo faoi orduithe sonracha don tseirbhís, toisc go bhféadfadh an ghné seo athrú go mór i gcásanna éagsúla. Ní thabharfaidh mé ach plean gníomhaíochta ginearálta a bheidh le déanamh tar éis nascadh trí SSH leis an bhfreastalaí ar a n-imscarfar an tionscadal:

  • Ní mór dúinn an coimeádán atá ar siúl faoi láthair a aimsiú agus é a stopadh.
  • Ansin ní mór duit coimeádán nua a sheoladh sa chúlra.
  • Beidh ort port áitiúil an fhreastalaí a shocrú go 80 - ligfidh sé seo duit dul isteach ar an suíomh ag seoladh cosúil le example.com, gan an port a shonrú, seachas seoladh cosúil le example.com:5000.
  • Ar deireadh, ní mór duit gach coimeádán agus íomhánna d'aois a scriosadh.

Seo é leanúint leis an script.

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

Roinnt rudaí aird a thabhairt orthu

Is féidir nuair a nascann tú leis an bhfreastalaí trí SSH ó Travis CI, feicfidh tú rabhadh a chuirfidh cosc ​​ort leanúint ar aghaidh leis an tsuiteáil mar go mbeidh an córas ag fanacht le freagra an úsáideora.

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

D’fhoghlaim mé gur féidir eochair teaghrán a ionchódú i base64 chun í a shábháil i bhfoirm inar féidir oibriú go háisiúil agus go hiontaofa léi. Ag an gcéim suiteála, is féidir leat an eochair phoiblí a dhíchódú agus é a scríobh chuig comhad known_hosts chun fáil réidh leis an earráid thuas.

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

Go praiticiúil, b'fhéidir go mbeadh cuma mar seo ar an ordú 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 a tháirgeann sé - teaghrán ionchódaithe base64:

MTIzLjQ1LjY3Ljg5IHNzaC1yc2EgQUFBQUIzTnphQzF5YzJFQUFBQUJJd0FBQVFFQWtsT1Vwa0RIcmZIWTE3U2JybVRJcE5MVEdLOVRqb20vQldEU1UKR1BsK25hZnpsSERUWVc3aGRJNHlaNWV3MThKSDRKVzlqYmhVRnJ2aVF6TTd4bEVMRVZmNGg5bEZYNVFWa2JQcHBTd2cwY2RhMwpQYnY3a09kSi9NVHlCbFdYRkNSK0hBbzNGWFJpdEJxeGlYMW5LaFhwSEFac01jaUxxOFY2UmpzTkFRd2RzZE1GdlNsVksvN1hBCnQzRmFvSm9Bc25jTTFROXg1KzNWMFd3NjgvZUlGbWIxenVVRmxqUUpLcHJyWDg4WHlwTkR2allOYnk2dncvUGIwcndlcnQvRW4KbVorQVc0T1pQblRQSTg5WlBtVk1MdWF5ckQyY0U4NlovaWw4YitndzNyMysxbkthdG1Ja2puMnNvMWQwMVFyYVRsTXFWU3NieApOclJGaTl3cmYrTTdRPT0geW91QGV4YW1wbGUuY29tCg==

Seo é an t-ordú a luaitear thuas

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

Is féidir an cur chuige céanna a úsáid le heochair phríobháideach agus nasc á bhunú agat, mar go bhféadfadh go mbeadh eochair phríobháideach ag teastáil uait chun rochtain a fháil ar an bhfreastalaí. Nuair a bhíonn tú ag obair leis an eochair, ní mór duit ach a chinntiú go stóráiltear go sábháilte é in athróg timpeallachta Travis CI agus nach bhfuil sé ar taispeáint in áit ar bith.

Rud eile le tabhairt faoi deara ná go bhféadfadh go mbeadh ort an script imlonnaithe iomlán a rith mar líne amháin, mar shampla - le doctl. B’fhéidir go mbeadh gá le roinnt iarracht bhreise.

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

TLS/SSL agus Cothromú Ualach

Tar éis dom gach rud a luaitear thuas a dhéanamh, ba í an fhadhb dheireanach a tháinig orm ná nach raibh SSL ag an bhfreastalaí. Ós rud é go n-úsáideann mé freastalaí Node.js, chun fórsa a dhéanamh a bheith ag obair seachfhreastalaí droim ar ais Nginx agus Let's Encrypt, ní mór duit a tinker go leor.

I ndáiríre ní raibh mé ag iarraidh an chumraíocht SSL seo go léir a dhéanamh de láimh, agus mar sin chruthaigh mé cothromóir ualaigh agus thaifead mé a shonraí i DNS. I gcás DigitalOcean, mar shampla, is nós imeachta simplí, saor agus tapa é deimhniú féin-sínithe um athnuachan uathoibríoch a chruthú ar an gcothromóir ualaigh. Is é an buntáiste breise a bhaineann leis an gcur chuige seo ná go ndéanann sé an-éasca SSL a chur ar bun ar fhreastalaithe iolracha a ritheann taobh thiar de chothromóir ualaigh más gá. Ligeann sé seo do na freastalaithe gan “smaoineamh” ar SSL ar chor ar bith, ach an port a úsáid mar is gnách ag an am céanna 80. Mar sin tá sé i bhfad níos éasca agus níos áisiúla SSL a bhunú ar chothromóir ualaigh ná modhanna eile chun SSL a bhunú.

Anois is féidir leat gach calafort a dhúnadh ar an bhfreastalaí a ghlacann le naisc atá ag teacht isteach - ach amháin an calafort 80, a úsáidtear chun cumarsáid a dhéanamh leis an balancer ualach, agus an port 22 le haghaidh SSH. Mar thoradh air sin, ní theipeann ar iarracht rochtain dhíreach a dhéanamh ar an bhfreastalaí ar aon chalafoirt seachas an dá cheann seo.

Torthaí

Tar éis dom gach rud ar labhair mé faoi san ábhar seo a dhéanamh, níor chuir ardán Docker ná coincheapa na slabhraí CI/CD uathoibrithe eagla orm níos mó. Bhí mé in ann slabhra comhtháthú leanúnach a bhunú, ina ndéantar an cód a thástáil sula dtéann sé i dtáirgeadh agus go ndéantar an cód a imscaradh go huathoibríoch ar an bhfreastalaí. Tá sé seo ar fad fós sách nua domsa, agus táim cinnte go bhfuil bealaí ann chun mo shreabhadh oibre uathoibrithe a fheabhsú agus é a dhéanamh níos éifeachtaí. Mar sin má tá aon smaointe agat ar an ábhar seo, cuir in iúl dom le do thoil. dom fios. Tá súil agam gur chabhraigh an t-alt seo leat i do chuid iarrachtaí. Ba mhaith liom a chreidiúint, tar éis duit é a léamh, gur fhoghlaim tú an oiread agus a d'fhoghlaim mé agus mé ag déanamh amach gach rud a labhair mé faoi.

PS Inár margadh tá íomhá dhugaire, is féidir a shuiteáil i gceann cliceáil. Is féidir leat oibriú coimeádáin a sheiceáil ag VPS. Tugtar 3 lá tástála saor in aisce do gach cliant nua.

Léitheoirí a chara! An úsáideann tú teicneolaíochtaí CI/CD i do thionscadail?

Slabhra CI/CD a chruthú agus obair a uathoibriú le Docker

Foinse: will.com

Add a comment