Mo kọ awọn oju opo wẹẹbu akọkọ mi ni awọn 90s ti o kẹhin. Pada lẹhinna o rọrun pupọ lati fi wọn sinu aṣẹ iṣẹ. Olupin Apache kan wa lori diẹ ninu alejo gbigba pinpin, o le wọle si olupin yii nipasẹ FTP nipa kikọ nkan bii ftp://ftp.example.com. Lẹhinna o ni lati tẹ orukọ rẹ ati ọrọ igbaniwọle sii ati gbe awọn faili si olupin naa. Awọn akoko oriṣiriṣi wa, ohun gbogbo rọrun lẹhinna ju bayi lọ.
Ni awọn ọdun meji lati igba naa, ohun gbogbo ti yipada pupọ. Awọn oju opo wẹẹbu ti di eka sii; wọn gbọdọ pejọ ṣaaju ki wọn to tu silẹ sinu iṣelọpọ. Olupin kan ṣoṣo di ọpọlọpọ awọn olupin ti n ṣiṣẹ lẹhin awọn iwọntunwọnsi fifuye, ati lilo awọn eto iṣakoso ẹya di ibi ti o wọpọ.
Fun mi ti ara ẹni ise agbese Mo ní pataki kan iṣeto ni. Ati pe Mo mọ pe Mo nilo agbara lati mu aaye naa ṣiṣẹ ni iṣelọpọ nipasẹ ṣiṣe iṣe kan kan: koodu kikọ si ẹka kan master lori GitHub. Ni afikun, Mo mọ pe lati rii daju iṣẹ ti ohun elo wẹẹbu kekere mi, Emi ko fẹ lati ṣakoso iṣupọ Kubernetes nla kan, tabi lo imọ-ẹrọ Docker Swarm, tabi ṣetọju ọkọ oju-omi kekere ti awọn olupin pẹlu awọn adarọ-ese, awọn aṣoju ati gbogbo iru awọn miiran. complexities. Lati le ṣaṣeyọri ibi-afẹde ti ṣiṣe iṣẹ ni irọrun bi o ti ṣee, Mo nilo lati faramọ pẹlu CI/CD.
Ti o ba ni iṣẹ akanṣe kekere kan (ninu ọran yii, iṣẹ akanṣe Node.js) ati pe iwọ yoo fẹ lati mọ bi o ṣe le ṣe adaṣe imuṣiṣẹ ti iṣẹ akanṣe yii, lakoko ti o rii daju pe ohun ti o fipamọ sinu ibi-ipamọ ni deede ohun ti o ṣiṣẹ ni iṣelọpọ, lẹhinna Mo ro o le jẹ nife ninu yi article.
Awọn ohun pataki
Oluka ti nkan yii ni a nireti lati ni oye ipilẹ ti laini aṣẹ ati kikọ awọn iwe afọwọkọ Bash. Ni afikun, oun yoo nilo awọn akọọlẹ и .
Awọn ifojusi
Emi kii yoo sọ pe nkan yii le pe lainidi ni “ẹkọ ikẹkọ”. Eyi jẹ diẹ sii ti iwe-ipamọ ninu eyiti Mo sọrọ nipa ohun ti Mo ti kọ ati ṣapejuwe ilana ti o baamu fun mi fun idanwo ati fifi koodu ranṣẹ si iṣelọpọ, ti a ṣe ni adaṣe adaṣe kan.
Eyi ni ohun ti iṣan-iṣẹ mi pari ni jije.
Fun koodu ti a fiweranṣẹ si eyikeyi ẹka ibi ipamọ ayafi master, awọn iṣe wọnyi ni a ṣe:
- Ise agbese kọ lori Travis CI bẹrẹ.
- Gbogbo ẹyọkan, isọpọ ati awọn idanwo ipari-si-opin ni a ṣe.
Nikan fun koodu ti o ṣubu sinu master, atẹle naa ni a ṣe:
- Ohun gbogbo ti a mẹnuba loke, pẹlu ...
- Ṣiṣe aworan Docker kan ti o da lori koodu lọwọlọwọ, awọn eto ati agbegbe.
- Gbigbe aworan naa si Ipele Docker.
- Asopọ si olupin iṣelọpọ.
- Ikojọpọ aworan lati Docker Hub si olupin naa.
- Idaduro eiyan lọwọlọwọ ati bẹrẹ tuntun kan ti o da lori aworan tuntun.
Ti o ko ba mọ nkankan rara nipa Docker, awọn aworan ati awọn apoti, maṣe yọ ara rẹ lẹnu. Emi yoo sọ gbogbo rẹ fun ọ.
Kini CI/CD?
Abbreviation CI/CD duro fun “isọdọkan tẹsiwaju / imuṣiṣẹ tẹsiwaju.”
▍Idapọ ti o tẹsiwaju
Isọpọ tẹsiwaju jẹ ilana kan ninu eyiti awọn olupilẹṣẹ ṣe awọn adehun si ibi ipamọ koodu orisun akọkọ ti iṣẹ akanṣe (nigbagbogbo ẹka kan master). Ni akoko kanna, didara koodu naa ni idaniloju nipasẹ idanwo adaṣe.
▍Ilọsiwaju ilọsiwaju
Ilọsiwaju ilọsiwaju jẹ loorekoore, imuṣiṣẹ adaṣe ti koodu sinu iṣelọpọ. Apa keji ti adape CI/CD ni a maa n sọ jade bi “ifijiṣẹ tẹsiwaju.” Eyi jẹ ipilẹ kanna bii “imuṣiṣẹ ilọsiwaju”, ṣugbọn “ifijiṣẹ tẹsiwaju” tumọ si iwulo lati jẹrisi awọn ayipada pẹlu ọwọ ṣaaju bẹrẹ ilana imuṣiṣẹ iṣẹ akanṣe.
Bibẹrẹ
App ti mo lo lati ko gbogbo eyi ni a npe ni . Eyi jẹ iṣẹ akanṣe wẹẹbu ti Mo n ṣiṣẹ lori, ti a ṣe apẹrẹ fun ṣiṣe awọn akọsilẹ. Ni akọkọ Mo gbiyanju lati ṣe -project, tabi o kan ohun elo ipari-iwaju laisi olupin kan, lati le ni anfani ti alejo gbigba boṣewa ati awọn agbara imuṣiṣẹ iṣẹ akanṣe ti o funni . Bi idiju ohun elo naa ṣe dagba, Mo nilo lati ṣẹda apakan olupin rẹ, eyiti o tumọ si pe Emi yoo nilo lati ṣe agbekalẹ ilana ti ara mi fun isọpọ adaṣe ati imuṣiṣẹ adaṣe adaṣe ti iṣẹ naa.
Ninu ọran mi, ohun elo naa jẹ olupin KIAKIA ti nṣiṣẹ ni agbegbe Node.js, ṣiṣe ohun elo React oju-iwe kan ṣoṣo ati atilẹyin API ẹgbẹ olupin to ni aabo. Yi faaji telẹ awọn nwon.Mirza ti o le ri ni Itọsọna ìfàṣẹsí akopọ ni kikun.
Mo ti gbimọran pẹlu , ti o jẹ alamọdaju adaṣe, o beere lọwọ rẹ kini MO nilo lati ṣe lati jẹ ki gbogbo rẹ ṣiṣẹ ni ọna ti Mo fẹ. O fun mi ni imọran kini iṣan-iṣẹ adaṣe adaṣe yẹ ki o dabi, ti ṣe ilana ni apakan Awọn ibi-afẹde ti nkan yii. Nini awọn ibi-afẹde wọnyi tumọ si pe Mo nilo lati ro ero bi o ṣe le lo Docker.
Docker
Docker jẹ ohun elo ti, o ṣeun si imọ-ẹrọ iṣipopada, ngbanilaaye awọn ohun elo lati pin ni irọrun, gbejade ati ṣiṣẹ ni agbegbe kanna, paapaa ti Syeed Docker funrararẹ n ṣiṣẹ ni awọn agbegbe oriṣiriṣi. Ni akọkọ, Mo nilo lati gba ọwọ mi lori awọn irinṣẹ laini aṣẹ Docker (CLI). Ìtọ́sọ́nà ìfisẹ́lẹ̀ Docker kò ṣe kedere àti pé ó rọrùn, ṣùgbọ́n ó sọ fún ọ pé láti gbé ìgbésẹ̀ àkọ́kọ́ nínú fífi sori ẹrọ, o nílò láti gba Docker Desktop (fún Mac tàbí Windows).
Docker Hub jẹ aijọju ohun kanna bi fun awọn ibi ipamọ git, tabi iforukọsilẹ fun JavaScript jo. Eyi jẹ ibi ipamọ ori ayelujara fun awọn aworan Docker. Eyi ni ohun ti Docker Desktop sopọ si.
Nitorinaa, lati le bẹrẹ pẹlu Docker, o nilo lati ṣe awọn nkan meji:
- Fi sori ẹrọ .
- Forukọsilẹ fun .
Lẹhin eyi, o le ṣayẹwo boya Docker CLI n ṣiṣẹ nipa ṣiṣe pipaṣẹ atẹle lati ṣayẹwo ẹya Docker:
docker -vNigbamii, wọle si Docker Hub nipa titẹ orukọ olumulo ati ọrọ igbaniwọle rẹ nigbati o beere:
docker loginLati lo Docker, o gbọdọ loye awọn imọran ti awọn aworan ati awọn apoti.
▍ Awọn aworan
Aworan jẹ nkan ti o dabi awoṣe ti o ni awọn ilana fun iṣakojọpọ apoti naa. Eyi jẹ aworan alaileyipada ti eto faili ati eto ohun elo naa. Awọn olupilẹṣẹ le pin awọn aworan ni rọọrun.
# Вывод сведений обо всех образах
docker imagesAṣẹ yii yoo gbe tabili kan jade pẹlu akọsori atẹle:
REPOSITORY TAG IMAGE ID CREATED SIZE
---Nigbamii ti a yoo wo diẹ ninu awọn apẹẹrẹ ti awọn aṣẹ ni ọna kika kanna - akọkọ aṣẹ kan wa pẹlu asọye, lẹhinna apẹẹrẹ ti ohun ti o le jade.
▍ Awọn apoti
Apoti jẹ package ti o le ṣiṣẹ ti o ni ohun gbogbo ti o nilo lati ṣiṣẹ ohun elo kan. Ohun elo pẹlu ọna yii yoo ṣiṣẹ nigbagbogbo kanna, laibikita awọn amayederun: ni agbegbe ti o ya sọtọ ati ni agbegbe kanna. Oro naa ni pe awọn iṣẹlẹ ti aworan kanna ni a ṣe ifilọlẹ ni awọn agbegbe oriṣiriṣi.
# Перечисление всех контейнеров
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
---▍Tags
Aami aami jẹ itọkasi ti ẹya kan pato ti aworan kan.
▍Itọkasi iyara si awọn aṣẹ Docker
Eyi ni awotẹlẹ diẹ ninu awọn aṣẹ Docker ti o wọpọ julọ.
Egbe
Àyíká
Iṣe
Aworan
Ṣiṣe aworan kan lati Dockerfile kan
Aworan
Ifi aami si aworan
Aworan
Awọn aworan atokọ
Apoti
Nṣiṣẹ a eiyan da lori aworan kan
Aworan
Ikojọpọ aworan si iforukọsilẹ
Aworan
Ikojọpọ aworan kan lati iforukọsilẹ
Apoti
Awọn apoti akojọ
Aworan / Apoti
Yiyọ ajeku awọn apoti ati awọn aworan
▍Dockerfile
Mo mọ bi o ṣe le ṣiṣẹ ohun elo iṣelọpọ ni agbegbe. Mo ni a Webpack iṣeto ni a še lati kọ kan setan-ṣe React ohun elo. Nigbamii ti, Mo ni aṣẹ kan ti o bẹrẹ olupin orisun Node.js lori ibudo naa 5000. O dabi eleyi:
npm i # установка зависимостей
npm run build # сборка React-приложения
npm run start # запуск Node-сервераO yẹ ki o ṣe akiyesi pe Emi ko ni ohun elo apẹẹrẹ fun ohun elo yii. Ṣugbọn nibi, fun awọn idanwo, eyikeyi ohun elo Node ti o rọrun yoo ṣe.
Lati le lo eiyan, iwọ yoo nilo lati fun awọn itọnisọna si Docker. Eyi ni a ṣe nipasẹ faili ti a npe ni Dockerfile, be ni root liana ti ise agbese. Faili yii, ni akọkọ, dabi ohun ti ko ni oye.
Ṣugbọn ohun ti o ni nikan ṣapejuwe, pẹlu awọn aṣẹ pataki, nkan ti o jọra si iṣeto agbegbe iṣẹ kan. Eyi ni diẹ ninu awọn aṣẹ wọnyi:
- - Aṣẹ yii bẹrẹ faili kan. O pato awọn mimọ aworan lori eyi ti awọn eiyan ti wa ni itumọ ti.
- - Didaakọ awọn faili lati orisun agbegbe si apoti kan.
- - Ṣiṣeto itọsọna iṣẹ fun awọn aṣẹ wọnyi.
- - Ṣiṣe awọn aṣẹ.
- - Awọn eto ibudo.
- - Itọkasi aṣẹ lati ṣiṣẹ.
Dockerfile le wo nkan bi eyi:
# Загрузить базовый образ
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 startGẹ́gẹ́ bí àwòrán ìpìlẹ̀ tí o yàn, o lè nílò láti fi àwọn ìgbẹ́kẹ̀lé afikún sí i. Èyí jẹ́ nítorí àwọn àwòrán ìpìlẹ̀ kan (bíi Node Alpine) Linux) ni a ṣe láti jẹ́ kí ó wúwo tó bí ó ti ṣeé ṣe tó. Nítorí náà, wọ́n lè má ní àwọn ètò tí o ń gbẹ́kẹ̀lé.
▍ Ṣiṣeto, fifi aami si ati ṣiṣe apoti naa
Apejọ agbegbe ati ifilọlẹ ti eiyan jẹ lẹhin ti a ni Dockerfile, awọn iṣẹ-ṣiṣe jẹ ohun rọrun. Ṣaaju ki o to Titari aworan naa si Docker Hub, o nilo lati ṣe idanwo ni agbegbe.
▍Apejọ
Ni akọkọ o nilo lati gba , ti n ṣalaye orukọ kan ati, ni yiyan, tag kan (ti ko ba jẹ ami kan pato, eto naa yoo fi aami kan si aworan laifọwọyi. latest).
# Сборка образа
docker build -t <image>:<tag> .Lẹhin ṣiṣe aṣẹ yii, o le wo Docker kọ aworan naa.
Sending build context to Docker daemon 2.88MB
Step 1/9 : FROM node:12-alpine
---> ...выполнение этапов сборки...
Successfully built 123456789123
Successfully tagged <image>:<tag> Kọ le gba to iṣẹju diẹ - gbogbo rẹ da lori iye awọn igbẹkẹle ti o ni. Ni kete ti ikole ti pari, o le ṣiṣe aṣẹ naa docker images ki o si wo apejuwe aworan titun rẹ.
REPOSITORY TAG IMAGE ID CREATED SIZE
<image> latest 123456789123 About a minute ago x.xxGB▍ Ifilọlẹ
Aworan naa ti ṣẹda. Eyi tumọ si pe o le ṣiṣe apoti ti o da lori rẹ. Nitori ti mo fẹ lati ni anfani lati wọle si awọn ohun elo nṣiṣẹ ninu awọn eiyan ni localhost:5000, emi, ni apa osi ti awọn bata 5000:5000 ni nigbamii ti pipaṣẹ sori ẹrọ 5000. Ni apa ọtun ni ibudo eiyan naa.
# Запуск с использованием локального порта 5000 и порта контейнера 5000
docker run -p 5000:5000 <image>:<tag> Ni bayi pe eiyan ti ṣẹda ati ṣiṣiṣẹ, o le lo aṣẹ naa docker ps lati wo alaye nipa eiyan yii (tabi o le lo aṣẹ naa docker ps -a, eyi ti o ṣe afihan alaye nipa gbogbo awọn apoti, kii ṣe awọn nṣiṣẹ nikan).
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 Ti o ba bayi lọ si adirẹsi localhost:5000 - o le wo oju-iwe kan ti ohun elo nṣiṣẹ ti o dabi oju-iwe ti ohun elo ti n ṣiṣẹ ni agbegbe iṣelọpọ kan.
▍Tagging ati ki o te
Lati le lo ọkan ninu awọn aworan ti a ṣẹda lori olupin iṣelọpọ, a nilo lati ni anfani lati ṣe igbasilẹ aworan yii lati Docker Hub. Eyi tumọ si pe o nilo akọkọ lati ṣẹda ibi ipamọ kan fun iṣẹ akanṣe lori Ipele Docker. Lẹhin eyi, a yoo ni aaye kan nibiti a ti le fi aworan ranṣẹ. Aworan naa nilo lati tunrukọ jẹ ki orukọ rẹ bẹrẹ pẹlu orukọ olumulo Docker Hub wa. Eyi yẹ ki o tẹle orukọ ibi ipamọ naa. Eyikeyi tag le wa ni gbe ni opin ti awọn orukọ. Ni isalẹ jẹ apẹẹrẹ ti sisọ awọn aworan ni lilo ero yii.
Bayi o le kọ aworan naa pẹlu orukọ titun ati ṣiṣe aṣẹ naa docker push lati Titari si ibi ipamọ 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.0Ti ohun gbogbo ba lọ daradara, aworan naa yoo wa lori Docker Hub ati pe o le ni irọrun gbe si olupin tabi gbe lọ si awọn olupilẹṣẹ miiran.
Next awọn igbesẹ
Ni bayi a ti rii daju pe ohun elo naa, ni irisi apoti Docker kan, n ṣiṣẹ ni agbegbe. A ti gbe apoti si Docker Hub. Gbogbo eyi tumọ si pe a ti ni ilọsiwaju pupọ si ibi-afẹde wa tẹlẹ. Bayi a nilo lati yanju awọn ibeere meji diẹ sii:
- Ṣiṣeto ohun elo CI kan fun idanwo ati fifi koodu ranṣẹ.
- Ṣiṣeto olupin iṣelọpọ ki o le ṣe igbasilẹ ati ṣiṣẹ koodu wa.
Ninu ọran wa, a lo . Gẹgẹbi olupin - .
O yẹ ki o ṣe akiyesi pe nibi o le lo apapo awọn iṣẹ miiran. Fun apẹẹrẹ, dipo Travis CI, o le lo CircleCI tabi Awọn iṣe Github. Ati dipo DigitalOcean - AWS tabi Lindode.
A pinnu a iṣẹ pẹlu Travis CI, ati ki o Mo ti tẹlẹ nkankan ni tunto ni yi iṣẹ. Nitorinaa, ni bayi Emi yoo sọ ni ṣoki nipa bi a ṣe le murasilẹ fun iṣẹ.
Travis C.I.
Travis CI jẹ ohun elo fun idanwo ati fifi koodu ranṣẹ. Emi kii yoo fẹ lati lọ sinu awọn intricacies ti iṣeto Travis CI, nitori iṣẹ akanṣe kọọkan jẹ alailẹgbẹ, ati pe eyi kii yoo mu anfani pupọ wa. Ṣugbọn Emi yoo bo awọn ipilẹ lati jẹ ki o bẹrẹ ti o ba pinnu lati lo Travis CI. Boya o yan Travis CI, CircleCI, Jenkins, tabi nkan miiran, awọn ọna iṣeto ni yoo ṣee lo nibi gbogbo.
Lati bẹrẹ pẹlu Travis CI, lọ si ki o si ṣẹda iroyin. Lẹhinna ṣepọ Travis CI pẹlu akọọlẹ GitHub rẹ. Nigbati o ba ṣeto eto naa, iwọ yoo nilo lati pato ibi-ipamọ pẹlu eyiti o fẹ lati ṣe adaṣe iṣẹ ati mu iraye si. (Mo lo GitHub, ṣugbọn Mo ni idaniloju pe Travis CI le ṣepọ pẹlu BitBucket, ati GitLab, ati awọn iṣẹ miiran ti o jọra).
Nigbakugba ti Travis CI ti bẹrẹ, olupin naa ti ṣe ifilọlẹ, ṣiṣe awọn aṣẹ ti o pato ninu faili iṣeto ni, pẹlu gbigbe awọn ẹka ibi ipamọ ti o baamu.
▍Ipo aye iṣẹ
Travis CI iṣeto ni faili ti a npe ni .travis.yml ati ti o ti fipamọ ni awọn ise agbese root liana, atilẹyin awọn Erongba ti awọn iṣẹlẹ awọn iṣẹ-ṣiṣe. Awọn iṣẹlẹ wọnyi ti wa ni atokọ ni ọna ti wọn waye:
apt addonscache componentsbefore_installinstallbefore_scriptscriptbefore_cacheafter_success или after_failurebefore_deploydeployafter_deployafter_script
▍ Idanwo
Ninu faili iṣeto ni Emi yoo tunto olupin Travis CI agbegbe. Mo ti yan Node 12 bi ede naa o sọ fun eto naa lati fi sori ẹrọ awọn igbẹkẹle ti o nilo lati lo Docker.
Ohun gbogbo ti o ti wa ni akojọ .travis.yml, yoo ṣee ṣe nigbati gbogbo awọn ibeere fifa ni a ṣe si gbogbo awọn ẹka ti ibi ipamọ, ayafi bibẹẹkọ pato. Eyi jẹ ẹya ti o wulo nitori pe o tumọ si pe a le ṣe idanwo gbogbo koodu ti n bọ sinu ibi ipamọ naa. Eyi jẹ ki o mọ boya koodu naa ti ṣetan lati kọ si ẹka naa. master, ati boya o yoo fọ ilana iṣẹ akanṣe naa. Ni iṣeto ni agbaye yii, Mo fi ohun gbogbo sori agbegbe, ṣiṣe olupin dev Webpack ni abẹlẹ (eyi jẹ ẹya ti iṣan-iṣẹ mi), ati ṣiṣe awọn idanwo.
Ti o ba fẹ ki ibi ipamọ rẹ ṣe afihan awọn baagi ti o nfihan agbegbe idanwo, O le wa awọn itọnisọna kukuru lori lilo Jest, Travis CI ati Coveralls lati gba ati ṣafihan alaye yii.
Nitorina eyi ni akoonu ti faili naa .travis.yml:
# Установить язык
language: node_js
# Установить версию Node.js
node_js:
- '12'
services:
# Использовать командную строку Docker
- docker
install:
# Установить зависимости для тестов
- npm ci
before_script:
# Запустить сервер и клиент для тестов
- npm run dev &
script:
# Запустить тесты
- npm run testEyi ni ibi ti awọn iṣe ti o ṣe fun gbogbo awọn ẹka ibi ipamọ ati fun awọn ibeere fa dopin.
▍ Ifijiṣẹ
Da lori ero pe gbogbo awọn idanwo adaṣe ti pari ni aṣeyọri, a le, eyiti o jẹ iyan, fi koodu naa ranṣẹ si olupin iṣelọpọ. Niwọn igba ti a fẹ ṣe eyi nikan fun koodu lati ẹka master, a fun eto awọn ilana ti o yẹ ni awọn eto imuṣiṣẹ. Ṣaaju ki o to gbiyanju lati lo koodu ti a yoo wo atẹle ninu iṣẹ akanṣe rẹ, Emi yoo fẹ lati kilo fun ọ pe o gbọdọ ni iwe afọwọkọ gangan ti a pe fun imuṣiṣẹ.
deploy:
# Собрать Docker-контейнер и отправить его на Docker Hub
provider: script
script: bash deploy.sh
on:
branch: masterIwe afọwọkọ imuṣiṣẹ yanju awọn iṣoro meji:
- Kọ, samisi ati fi aworan ranṣẹ si Docker Hub nipa lilo ohun elo CI kan (ninu ọran wa, Travis CI).
- Ikojọpọ aworan lori olupin, didaduro eiyan atijọ ati bẹrẹ ọkan tuntun (ninu ọran wa, olupin naa nṣiṣẹ lori pẹpẹ DigitalOcean).
Ni akọkọ, o nilo lati ṣeto ilana adaṣe kan fun kikọ, fifi aami si, ati titari aworan si Docker Hub. Eyi jẹ gbogbo iru pupọ si ohun ti a ti ṣe pẹlu ọwọ, ayafi pe a nilo ilana kan fun yiyan awọn ami alailẹgbẹ si awọn aworan ati awọn iwọle adaṣe adaṣe. Mo ni iṣoro pẹlu diẹ ninu awọn alaye ti iwe afọwọkọ imuṣiṣẹ, gẹgẹbi ilana fifi aami si, iwọle, fifi koodu SSH, idasile asopọ SSH. Ṣugbọn ni Oriire ọrẹkunrin mi dara pupọ pẹlu bash, bi pẹlu ọpọlọpọ awọn ohun miiran. O ṣe iranlọwọ fun mi lati kọ iwe afọwọkọ yii.
Nitorinaa, apakan akọkọ ti iwe afọwọkọ naa n gbe aworan si Docker Hub. Eyi jẹ ohun rọrun lati ṣe. Eto fifi aami si ti Mo lo pẹlu apapọ git hash ati tag git kan, ti ọkan ba wa. Eyi ṣe idaniloju pe tag jẹ alailẹgbẹ ati ki o jẹ ki o rọrun lati ṣe idanimọ apejọ ti o da lori. DOCKER_USERNAME и DOCKER_PASSWORD jẹ awọn oniyipada ayika olumulo ti o le ṣeto nipa lilo wiwo Travis CI. Travis CI yoo ṣe ilana data ifura laifọwọyi ki o ko ṣubu sinu awọn ọwọ ti ko tọ.
Eyi ni apakan akọkọ ti iwe afọwọkọ naa 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} Kini apakan keji ti iwe afọwọkọ naa yoo dale patapata lori iru agbalejo ti o nlo ati bi a ṣe ṣeto asopọ si rẹ. Ninu ọran mi, niwon Mo lo Digital Ocean, Mo lo awọn aṣẹ lati sopọ si olupin naa . Nigbati o ba n ṣiṣẹ pẹlu AWS, ohun elo naa yoo ṣee lo aws, ati bẹbẹ lọ.
Ṣíṣeto olupin naa ko nira rara. Mo ṣeto droplet kan ti o da lori aworan ipilẹ. O ṣe pataki lati ṣe akiyesi pe eto ti mo yan nilo fifi Docker sori ẹrọ ni ẹẹkan ati ifilọlẹ Docker ni ẹẹkan. Mo lo Ubuntu 18.04, nítorí náà ìwọ, tí o bá tún lo UbuntuLáti ṣe bẹ́ẹ̀, o lè tẹ̀lé e ní tààrà o rọrun guide.
Emi ko sọrọ nibi nipa awọn aṣẹ kan pato fun iṣẹ naa, nitori abala yii le yatọ pupọ ni awọn ọran oriṣiriṣi. Emi yoo kan fun ero gbogbogbo ti iṣe lati ṣe lẹhin sisopọ nipasẹ SSH si olupin lori eyiti yoo gbe iṣẹ naa lọ:
- A nilo lati wa apoti ti o nṣiṣẹ lọwọlọwọ ki o da duro.
- Lẹhinna o nilo lati ṣe ifilọlẹ eiyan tuntun ni abẹlẹ.
- Iwọ yoo nilo lati ṣeto ibudo agbegbe olupin si
80- Eyi yoo gba ọ laaye lati tẹ aaye sii ni adirẹsi biiexample.com, laisi pato ibudo, dipo lilo adirẹsi biexample.com:5000. - Nikẹhin, o nilo lati pa gbogbo awọn apoti atijọ ati awọn aworan rẹ.
Eyi ni itesiwaju iwe afọwọkọ naa.
# Найти 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 -fDiẹ ninu awọn nkan lati san ifojusi si
O ṣee ṣe pe nigbati o ba sopọ si olupin nipasẹ SSH lati Travis CI, iwọ yoo rii ikilọ kan ti yoo ṣe idiwọ fun ọ lati tẹsiwaju pẹlu fifi sori ẹrọ bi eto naa yoo duro fun esi olumulo.
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)? Mo kọ pe bọtini okun le wa ni koodu ni base64 lati le fipamọ ni fọọmu kan ninu eyiti o le ni irọrun ati ni igbẹkẹle ṣiṣẹ pẹlu. Ni ipele fifi sori ẹrọ, o le pinnu bọtini ita gbangba ki o kọ si faili kan known_hosts lati le yọ aṣiṣe ti o wa loke kuro.
echo <public key> | base64 # выводит <публичный ключ, закодированный в base64>Ni iṣe, aṣẹ yii le dabi eyi:
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== you@example.com" | base64Ati pe eyi ni ohun ti o gbejade - okun ti koodu koodu base64:
MTIzLjQ1LjY3Ljg5IHNzaC1yc2EgQUFBQUIzTnphQzF5YzJFQUFBQUJJd0FBQVFFQWtsT1Vwa0RIcmZIWTE3U2JybVRJcE5MVEdLOVRqb20vQldEU1UKR1BsK25hZnpsSERUWVc3aGRJNHlaNWV3MThKSDRKVzlqYmhVRnJ2aVF6TTd4bEVMRVZmNGg5bEZYNVFWa2JQcHBTd2cwY2RhMwpQYnY3a09kSi9NVHlCbFdYRkNSK0hBbzNGWFJpdEJxeGlYMW5LaFhwSEFac01jaUxxOFY2UmpzTkFRd2RzZE1GdlNsVksvN1hBCnQzRmFvSm9Bc25jTTFROXg1KzNWMFd3NjgvZUlGbWIxenVVRmxqUUpLcHJyWDg4WHlwTkR2allOYnk2dncvUGIwcndlcnQvRW4KbVorQVc0T1pQblRQSTg5WlBtVk1MdWF5ckQyY0U4NlovaWw4YitndzNyMysxbkthdG1Ja2puMnNvMWQwMVFyYVRsTXFWU3NieApOclJGaTl3cmYrTTdRPT0geW91QGV4YW1wbGUuY29tCg==Eyi ni aṣẹ ti a mẹnuba loke
install:
- echo < публичный ключ, закодированный в base64> | base64 -d >> $HOME/.ssh/known_hostsỌna kanna le ṣee lo pẹlu bọtini ikọkọ nigbati o ba ṣeto asopọ kan, nitori o le nilo bọtini ikọkọ lati wọle si olupin naa. Nigbati o ba n ṣiṣẹ pẹlu bọtini, o kan nilo lati rii daju pe o wa ni ipamọ ni aabo ni iyipada agbegbe Travis CI ati pe ko han nibikibi.
Ohun miiran lati ṣe akiyesi ni pe o le nilo lati ṣiṣe gbogbo iwe afọwọkọ imuṣiṣẹ bi laini kan, fun apẹẹrẹ - pẹlu doctl. Eleyi le nilo diẹ ninu awọn afikun akitiyan.
doctl compute ssh <droplet> --ssh-command "все команды будут здесь && здесь"TLS/SSL ati Iwontunwosi fifuye
Lẹhin ti Mo ṣe ohun gbogbo ti a mẹnuba loke, iṣoro ikẹhin ti Mo pade ni pe olupin naa ko ni SSL. Niwọn igba ti Mo lo olupin Node.js, lati fi ipa mu yiyipada aṣoju Nginx ati Jẹ ki a Encrypt, o nilo lati tinker pupọ.
Emi ko fẹ lati ṣe gbogbo iṣeto SSL yii pẹlu ọwọ, nitorinaa Mo kan ṣẹda iwọntunwọnsi fifuye kan ati ṣe igbasilẹ awọn alaye rẹ ni DNS. Ninu ọran ti DigitalOcean, fun apẹẹrẹ, ṣiṣẹda ijẹrisi ti ara ẹni isọdọtun adaṣe lori iwọntunwọnsi fifuye jẹ ilana ti o rọrun, ọfẹ ati iyara. Ọna yii ni anfani ti a ṣafikun pe o jẹ ki o rọrun pupọ lati ṣeto SSL lori awọn olupin pupọ ti n ṣiṣẹ lẹhin iwọntunwọnsi fifuye ti o ba nilo. Eyi ngbanilaaye awọn olupin funrararẹ ko “ronu” nipa SSL rara, ṣugbọn ni akoko kanna lo ibudo naa bi o ti ṣe deede 80. Nitorinaa iṣeto SSL lori iwọntunwọnsi fifuye jẹ rọrun pupọ ati irọrun diẹ sii ju awọn ọna yiyan ti iṣeto SSL.
Bayi o le pa gbogbo awọn ebute oko oju omi lori olupin ti o gba awọn asopọ ti nwọle - ayafi ibudo naa 80, ti a lo lati ṣe ibaraẹnisọrọ pẹlu iwọntunwọnsi fifuye, ati ibudo 22 fun SSH. Bi abajade, igbiyanju lati wọle si olupin taara lori eyikeyi awọn ebute oko oju omi miiran ju awọn meji wọnyi yoo kuna.
Awọn esi
Lẹhin ti Mo ti ṣe ohun gbogbo ti Mo sọrọ nipa ninu ohun elo yii, bẹni pẹpẹ Docker tabi awọn imọran ti awọn ẹwọn CI/CD adaṣe ti ko bẹru mi mọ. Mo ni anfani lati ṣeto pq isọpọ lemọlemọfún, lakoko eyiti koodu ti ni idanwo ṣaaju ki o lọ sinu iṣelọpọ ati pe koodu naa ti gbejade laifọwọyi lori olupin naa. Eyi tun jẹ tuntun tuntun si mi, ati pe Mo ni idaniloju pe awọn ọna wa lati ṣe ilọsiwaju iṣan-iṣẹ adaṣe adaṣe mi ati jẹ ki o munadoko diẹ sii. Nitorina ti o ba ni awọn ero eyikeyi lori ọrọ yii, jọwọ jẹ ki mi mọ. mọ. Mo nireti pe nkan yii ti ṣe iranlọwọ fun ọ ninu awọn igbiyanju rẹ. Mo fẹ lati gbagbọ pe lẹhin kika rẹ, o kọ ẹkọ pupọ bi mo ti kọ lakoko ti o n ṣalaye ohun gbogbo ti Mo sọrọ nipa rẹ.
PS Ninu wa aworan kan wa , eyi ti o le fi sori ẹrọ ni ọkan tẹ. O le ṣayẹwo iṣẹ awọn apoti ni . Gbogbo awọn alabara tuntun ni a fun ni awọn ọjọ mẹta ti idanwo ọfẹ.
Eyin onkawe! Ṣe o lo awọn imọ-ẹrọ CI/CD ninu awọn iṣẹ akanṣe rẹ?
orisun: www.habr.com
