Ho theha ketane ea CI / CD le ho iketsetsa mosebetsi ka Docker

Ke ngotse liwebsaete tsa ka tsa pele ho elella bofelong ba lilemo tsa bo-90. Mehleng eo ho ne ho le bonolo haholo ho li kenya tšebetsong. Ho ne ho e-na le seva sa Apache sebakeng se seng se arolelanoang, u ka kena ka har'a seva sena ka FTP ka ho ngola ntho e kang ftp://ftp.example.com. Ebe o tlameha ho kenya lebitso la hau le password mme o kenye lifaele ho seva. Ho ne ho e-na le linako tse fapaneng, ntho e 'ngoe le e' ngoe e ne e le bonolo ho feta hona joale.

Ho theha ketane ea CI / CD le ho iketsetsa mosebetsi ka Docker

Lilemong tse mashome a mabeli ho tloha ka nako eo, ntho e 'ngoe le e' ngoe e fetohile haholo. Liwebsaete li se li rarahane ho feta; li tlameha ho bokelloa pele li lokolloa hore li hlahisoe. Seva e le 'ngoe e ile ea fetoha li-server tse ngata tse mathang ka morao ho li-balancers tsa mojaro,' me ts'ebeliso ea litsamaiso tsa taolo ea mofuta e ile ea fetoha ntho e tloaelehileng.

Bakeng sa morero oa ka oa botho ke ne ke e-na le tlhophiso e khethehileng. Mme ke ne ke tseba hore ke hloka bokhoni ba ho tsamaisa sebaka sa tlhahiso ka ho etsa ketso e le 'ngoe feela: ho ngola khoutu ho ea lekaleng. master ho GitHub. Ntle le moo, ke ne ke tseba hore molemong oa ho netefatsa ts'ebetso ea ts'ebeliso ea ka e nyane ea webo, ke ne ke sa batle ho laola sehlopha se seholo sa Kubernetes, kapa ho sebelisa theknoloji ea Docker Swarm, kapa ho boloka sehlopha sa li-server tse nang le li-pods, baemeli le mefuta eohle ea tse ling. mathata. E le hore ke finyelle pakane ea ho nolofatsa mosebetsi ka hohle kamoo ho ka khonehang, ke ne ke lokela ho tloaelana le CI/CD.

Haeba u na le morero o monyenyane (tabeng ena, morero oa Node.js) 'me u ka rata ho tseba mokhoa oa ho iketsetsa ts'ebetso ea morero ona, ha u ntse u etsa bonnete ba hore se bolokiloeng sebakeng sa polokelo se lumellana hantle le se sebetsang tlhahiso, joale ke nahana hore u ka thahasella sehlooho sena.

Lintho tse hlokahalang

'Mali oa sengoloa sena o lebelletsoe ho ba le kutloisiso ea mantlha ea mola oa taelo le ho ngola mangolo a Bash. Ho phaella moo, o tla hloka litlaleho Travis C.I. и Sebaka sa Docker.

Sepheo

Nke ke ka re sengoloa sena se ka bitsoa "tutorial" ntle le maemo. Ena ke tokomane eo ho eona ke buang ka seo ke ithutileng sona le ho hlalosa ts'ebetso e ntšoanelang bakeng sa tlhahlobo le ho tsamaisa khoutu ho tlhahiso, e etsoang ka pasa e le 'ngoe e ikemetseng.

Sena ke seo mosebetsi oa ka o ileng oa qetella e le sona.

Bakeng sa khoutu e rometsoeng lekaleng lefe kapa lefe la polokelo ntle le master, liketso tse latelang li etsoa:

  • Morero o hahang ho Travis CI oa qala.
  • Liteko tsohle, ho kopanya le liteko tsa ho qetela li etsoa.

Ke feela bakeng sa khoutu e oelang ho eona master, tse latelang li etsoa:

  • Tsohle tse boletsoeng ka holimo, hammoho le ...
  • Ho aha setšoantšo sa Docker ho ipapisitse le khoutu ea hajoale, litlhophiso le tikoloho.
  • Ho isa setšoantšo ho Docker Hub.
  • Khokahano ho seva sa tlhahiso.
  • E kenya setšoantšo ho tloha Docker Hub ho ea ho seva.
  • Ho emisa setshelo sa hajoale le ho qala e ncha ho latela setšoantšo se secha.

Haeba u sa tsebe letho ka Docker, litšoantšo le lijana, u seke oa tšoenyeha. Ke tla le bolella tsohle ka yona.

CI/CD ke eng?

Kgutsufatso ya CI/CD e emetse “kopano e tswelang pele/kabelo e tswelang pele.”

▍ Kopanyo e tsoelang pele

Khokahano e tsoelang pele ke ts'ebetso eo bahlahisi ba etsang boitlamo ho polokelo ea khoutu ea mohloli oa projeke (hangata e le lekala. master). Ka nako e ts'oanang, boleng ba khoutu bo tiisetsoa ka tlhahlobo e ikemetseng.

▍ Tšebeliso e tsoelang pele

Tšebeliso e tsoelang pele ke phepelo ea likhoutu khafetsa tlhahisong. Karolo ea bobeli ea mantsoe a khutsufalitsoeng a CI/CD ka linako tse ling e hlalosoa e le "phepelo e tsoelang pele." Ha e le hantle sena se tšoana le "phepelo e tsoelang pele", empa "phepelo e tsoelang pele" e fana ka maikutlo a tlhokahalo ea ho netefatsa liphetoho pele ho qala ts'ebetso ea ho tsamaisa morero.

Ho qala

Sesebelisoa seo ke neng ke ithuta sona sena sohle se bitsoa TakeNote. Ona ke projeke ea tepo eo ke sebetsang ho eona, e etselitsoeng ho ngola lintlha. Qalong ke ile ka leka ho etsa joalo JAMStack-project, kapa kopo ea ho qetela ntle le seva, e le hore u sebelise monyetla oa ho amohela maemo a tloaelehileng le bokhoni ba ho fana ka morero oo e fanang ka oona. Netify. Ha ho rarahana ha kopo ho ntse ho hola, ke ne ke hloka ho theha karolo ea seva sa eona, ho bolelang hore ke tla hloka ho iketsetsa leano la ka la ho kopanya ka boiketsetso le ho tsamaisa morero.

Tabeng ea ka, ts'ebeliso ke seva sa Express se sebetsang tikolohong ea Node.js, se sebeletsang leqephe le le leng React application le ho ts'ehetsa API ea lehlakore la seva. Moaho ona o latela leano le ka fumanoang ho sena Tataiso e felletseng ea netefatso ea stack.

Ke ile ka buisana le motsoalle, eo e leng setsebi sa li-automation, ’me ka mo botsa hore na ke lokela ho etsa’ng hore lintho tsohle li sebetse kamoo ke batlang kateng. O ile a mpha mohopolo oa hore na mokhoa oa ho sebetsa o ikemetseng o lokela ho shebahala joang, o hlalositsoe karolong ea Lipakane ea sengoloa sena. Ho ba le lipheo tsena ho ne ho bolela hore ke hloka ho tseba ho sebelisa Docker.

Docker

Docker ke sesebelisoa seo, ka lebaka la theknoloji ea lisebelisoa, e lumellang lits'ebetso hore li ajoe habonolo, li sebelisoe le ho tsamaisoa sebakeng se le seng, leha sethala sa Docker ka boeona se sebetsa libakeng tse fapaneng. Taba ea pele, ke ne ke hloka ho kenya matsoho holim'a lisebelisoa tsa mola oa taelo ea Docker (CLI). Litaelo Tataiso ea ho kenya Docker e ke ke ea bitsoa e hlakileng haholo ebile ea utloahala, empa ho eona u ka ithuta hore ho nka mohato oa pele oa ho kenya, o hloka ho khoasolla Docker Desktop (bakeng sa Mac kapa Windows).

Docker Hub e batla e tšoana le GitHub bakeng sa polokelo ea git, kapa registry npm bakeng sa liphutheloana tsa JavaScript. Ena ke polokelo ea Marang-rang ea litšoantšo tsa Docker. Sena ke seo Docker Desktop e hokelang ho sona.

Kahoo, ho qala ka Docker, o hloka ho etsa lintho tse peli:

Kamora sena, o ka sheba hore na Docker CLI ea sebetsa ka ho sebelisa taelo e latelang ho lekola mofuta oa Docker:

docker -v

E latelang, kena ho Docker Hub ka ho kenya lebitso la hau la mosebelisi le password ha u botsoa:

docker login

Ho sebelisa Docker, o tlameha ho utloisisa mehopolo ea litšoantšo le lijana.

▍Litšoantšo

Setšoantšo ke ntho e kang polane e nang le litaelo tsa ho kopanya setshelo. Ena ke senepe se sa fetoheng sa sistimi ea faele ea sesebelisoa le litlhophiso. Bahlahisi ba ka arolelana litšoantšo habonolo.

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

Taelo ena e tla hlahisa tafole e nang le hlooho e latelang:

REPOSITORY     TAG     IMAGE ID     CREATED     SIZE
---

Ka mor'a moo re tla sheba mehlala e meng ea litaelo ka mokhoa o tšoanang - pele ho na le taelo e nang le maikutlo, 'me e be mohlala oa seo e ka se hlahisang.

▍ Lijana

Setshelo ke sephutheloana se sebetsang se nang le tsohle tse hlokahalang ho tsamaisa kopo. Kopo e nang le mokhoa ona e tla lula e sebetsa ka mokhoa o ts'oanang, ho sa tsotellehe lisebelisoa tsa motheo: sebakeng se ka thōko le tikolohong e tšoanang. Taba ke hore liketsahalo tsa setšoantšo se ts'oanang li hlahisoa libakeng tse fapaneng.

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

▍ Li-tag

Theke ke sesupo sa mofuta o itseng oa setšoantšo.

▍ Tšupiso e potlakileng ea litaelo tsa Docker

Mona ke kakaretso ea litaelo tsa Docker tse sebelisoang hangata.

sehlopha

Mohopolo

e le hantle

mohaho oa docker

Setšoantšo

Ho aha setšoantšo ho tsoa ho Dockerfile

tekete ea docker

Setšoantšo

Ho kenya litšoantšo

litšoantšo tsa docker

Setšoantšo

Ho hlahisa litšoantšo

docker e matha

Setshelo

Ho tsamaisa setshelo ho latela setšoantšo

docker push

Setšoantšo

Ho kenya setšoantšo ho registry

docker hula

Setšoantšo

E kenya setšoantšo ho tsoa ho registry

docker ps

Setshelo

Ho thathamisa lijana

tsamaiso ea docker e prune

Setšoantšo/Setshelo

Ho tlosa lijana le litšoantšo tse sa sebelisoeng

▍Dockerfile

Ke tseba ho tsamaisa kopo ea tlhahiso sebakeng sa heno. Ke na le tlhophiso ea Webpack e etselitsoeng ho aha sesebelisoa sa React se seng se entsoe. Ka mor'a moo, ke na le taelo e qalang seva sa Node.js boema-kepeng 5000. E shebahala tjena:

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

Re lokela ho hlokomela hore ha ke na mohlala oa kopo bakeng sa boitsebiso bona. Empa mona, bakeng sa liteko, kopo efe kapa efe e bonolo ea Node e tla etsa.

Bakeng sa ho sebelisa setshelo, o tla hloka ho fana ka litaelo ho Docker. Sena se etsoa ka faele e bitsoang Dockerfile, e fumanehang bukeng ea motso ea morero. Faele ena, qalong, e bonahala e sa utloisisehe.

Empa seo e se fupereng se hlalosa feela, ka litaelo tse khethehileng, ntho e tšoanang le ho theha tikoloho ea ho sebetsa. Tse ling tsa litaelo ke tsena:

  • HO TLOHA — Taelo ena e qala faele. E totobatsa setšoantšo sa motheo seo setshelo se hahiloeng holim'a sona.
  • Kopitsa - Ho qopitsa lifaele ho tsoa mohloling oa lehae ho ea ho setshelo.
  • MOEKETSI - Ho beha buka ea ho sebetsa bakeng sa litaelo tse latelang.
  • RUN - Tsamaisa litaelo.
  • BONOLOA - Litlhophiso tsa boema-kepe.
  • MOKHOAOA - Pontšo ea taelo e lokelang ho etsoa.

Dockerfile e ka shebahala tjena:

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

Ho itšetlehile ka setšoantšo sa motheo seo u se khethileng, ho ka 'na ha hlokahala hore u kenye litšepe tse eketsehileng. 'Nete ke hore litšoantšo tse ling tsa motheo (joaloka Node Alpine Linux) li entsoe ka sepheo sa ho li etsa hore li kopane ka hohle kamoo ho ka khonehang. Ka lebaka leo, ba kanna ba se be le mananeo a mang ao u a lebelletseng.

▍ Ho haha, ho tšoaea le ho tsamaisa setshelo

Kopano ea sebaka le ho thakholoa ha setshelo ke ka mor'a hore re be le Dockerfile, mesebetsi e bonolo haholo. Pele o sutumelletsa setšoantšo ho Docker Hub, o hloka ho se leka sebakeng sa heno.

▍ Kopano

Pele u lokela ho bokella setšoantšo, ho hlakisa lebitso mme, ka boikhethelo, tag (haeba tag e sa hlalosoa, sistimi e tla fana ka tag setšoantšong ka bo eona. latest).

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

Kamora ho tsamaisa taelo ena, o ka shebella Docker e haha ​​​​setšoantšo.

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

Kaho e ka nka metsotso e 'maloa - tsohle li ipapisitse le hore na u na le litšepe tse kae. Hang ha mohaho o phethiloe, o ka tsamaisa taelo docker images 'me u shebe tlhaloso ea setšoantšo sa hau se secha.

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

▍ Qala

Setšoantšo se entsoe. Sena se bolela hore o ka tsamaisa setshelo ho latela eona. Hobane ke batla ho khona ho fihlella kopo e sebetsang ka har'a setshelo ho localhost:5000, 'na, ka lehlakoreng le letšehali la para 5000:5000 taelong e latelang e kentsoeng 5000. Ka lehlakoreng le letona ke kou ea lijana.

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

Kaha joale setshelo se bōpiloe ebile se sebetsa, u ka sebelisa taelo docker ps ho sheba tlhahisoleseling mabapi le setshelo sena (kapa o ka sebelisa taelo docker ps -a, e bonts'ang tlhahisoleseling mabapi le lijana tsohle, eseng tse tsamaeang feela).

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

Haeba joale u ea atereseng localhost:5000 - o ka bona leqephe la ts'ebeliso e sebetsang e ts'oanang hantle le leqephe la kopo e sebetsang tikolohong ea tlhahiso.

▍ Ho ngola le ho hatisa

E le hore re sebelise e 'ngoe ea litšoantšo tse entsoeng ho seva sa tlhahiso, re hloka ho khona ho khoasolla setšoantšo sena ho Docker Hub. Sena se bolela hore o hloka pele ho theha polokelo ea projeke ho Docker Hub. Ka mor'a sena, re tla ba le sebaka seo re ka romelang setšoantšo ho sona. Setšoantšo se hloka ho rehoa bocha hore lebitso la sona le qale ka lebitso la rona la mosebelisi la Docker Hub. Sena se lokela ho lateloa ke lebitso la polokelo. Tag efe kapa efe e ka behoa qetellong ea lebitso. Ka tlase ke mohlala oa ho reha litšoantšo ka mokhoa ona.

Hona joale o ka haha ​​setšoantšo ka lebitso le lecha 'me u tsamaise taelo docker push ho e sutumelletsa sebakeng sa polokelo ea 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

Haeba ntho e 'ngoe le e' ngoe e tsamaea hantle, setšoantšo se tla fumaneha ho Docker Hub 'me se ka kenngoa habonolo ho seva kapa sa fetisetsoa ho bahlahisi ba bang.

Mehato e latelang

Hona joale re se re netefalitse hore kopo, ka sebopeho sa setshelo sa Docker, e ntse e sebetsa sebakeng sa heno. Re kentse setshelo ho Docker Hub. Sena sohle se bolela hore re se re entse tsoelo-pele e ntle haholo ho fihlela sepheo sa rona. Joale re hloka ho araba lipotso tse ling tse peli:

  • Ho theha sesebelisoa sa CI bakeng sa liteko le ho tsamaisa khoutu.
  • Ho theha seva ea tlhahiso e le hore e ka khoasolla le ho tsamaisa khoutu ea rona.

Tabeng ea rona, re sebelisa Travis C.I.. Joalo ka seva - DitigalOcean.

Re lokela ho hlokomela hore mona o ka sebelisa motsoako o mong oa litšebeletso. Ka mohlala, sebakeng sa Travis CI, u ka sebelisa CircleCI kapa Github Actions. Mme sebakeng sa DigitalOcean - AWS kapa Linode.

Re nkile qeto ea ho sebetsa le Travis CI, 'me ke se ke ntse ke e-na le ho hong ho lokiselitsoeng ts'ebeletso ena. Ka hona, joale ke tla bua ka bokhutšoanyane ka mokhoa oa ho e lokisetsa mosebetsi.

Travis C.I.

Travis CI ke sesebelisoa sa ho leka le ho tsamaisa khoutu. Ke ne nke ke ka rata ho kena mekhoeng e rarahaneng ea ho theha Travis CI, kaha morero o mong le o mong o ikhethile, 'me sena se ke ke sa tlisa molemo o moholo. Empa ke tla akaretsa lintlha tsa motheo ho u qalisa haeba u nka qeto ea ho sebelisa Travis CI. Hore na o khetha Travis CI, CircleCI, Jenkins, kapa ntho e 'ngoe, mekhoa e tšoanang ea tlhophiso e tla sebelisoa hohle.

Ho qala ka Travis CI, ea ho webosaete ea morero le ho theha akhaonto. Ebe o kopanya Travis CI le ak'haonte ea hau ea GitHub. Ha o theha sistimi, o tla hloka ho hlakisa sebaka sa polokelo eo u batlang ho iketsetsa mosebetsi ka eona le ho e nolofalletsa ho e fumana. (Ke sebelisa GitHub, empa ke na le bonnete ba hore Travis CI e ka kopanya le BitBucket, le GitLab, le litšebeletso tse ling tse tšoanang).

Nako le nako ha Travis CI e qalisoa, seva se qalisoa, se phethahatsa litaelo tse boletsoeng faeleng ea tlhophiso, ho kenyelletsa le ho tsamaisa makala a polokelo a tsamaisanang.

▍Potoloho ea bophelo ba mosebetsi

Travis CI faele ea tlhophiso e bitsoang .travis.yml le ho bolokoa bukeng ea motso oa morero, e tšehetsa mohopolo oa liketsahalo sebikoe sa bophelo mesebetsi. Liketsahalo tsena li thathamisitsoe ho latela tatellano eo li etsahalang ka eona:

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

▍Teko

Ka faeleng ea tlhophiso ke tla lokisa seva sa Travis CI sa lehae. Ke khethile Node 12 joalo ka puo mme ka bolella sistimi hore e kenye litšepe tse hlokahalang ho sebelisa Docker.

Tsohle tse thathamisitsoeng ho .travis.yml, e tla etsoa ha likopo tsohle tsa ho hula li etsoa makaleng ohle a polokelo, ntle le ha ho boletsoe ka tsela e 'ngoe. Ena ke karolo ea bohlokoa hobane e bolela hore re ka leka khoutu eohle e tlang sebakeng sa polokelo. Sena se u tsebisa haeba khoutu e se e loketse ho ngolloa lekaleng. master, le hore na e tla senya mokhoa oa ho aha morero. Ka tlhophiso ena ea lefats'e, ke kenya ntho e 'ngoe le e' ngoe sebakeng sa heno, ke tsamaisa seva sa Webpack dev ka morao (sena ke tšobotsi ea mosebetsi oa ka oa ho sebetsa), 'me u tsamaise liteko.

Haeba u batla hore polokelo ea hau e bonts'e libeche tse bonts'ang tšireletso ea liteko, mona U ka fumana litaelo tse khutšoane mabapi le ho sebelisa Jest, Travis CI le Coveralls ho bokella le ho bonts'a tlhahisoleseling ena.

Kahoo litaba tsa faele ke tsena .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

Mona ke moo liketso tse etsoang bakeng sa makala ohle a polokelo le likopo tsa ho hula li fela.

▍ Ho tsamaisoa

Ho itšetlehile ka maikutlo a hore liteko tsohle tse ikemetseng li phethiloe ka katleho, re ka khona, e leng khetho, ho fetisetsa khoutu ho seva sa tlhahiso. Kaha re batla ho etsa sena feela bakeng sa khoutu e tsoang lekaleng master, re fa sistimi litaelo tse nepahetseng maemong a ho romelloa. Pele u leka ho sebelisa khoutu eo re tla e sheba ka mor'a morero oa hau, ke rata ho u lemosa hore u tlameha ho ba le script ea sebele e bitsoang ho romelloa.

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

The deployment script e rarolla mathata a mabeli:

  • Haha, tšoaea 'me u romelle setšoantšo ho Docker Hub u sebelisa sesebelisoa sa CI (ho rona, Travis CI).
  • Ho kenya setšoantšo ho seva, ho emisa setshelo sa khale le ho qala e ncha (ho rona, seva se sebetsa sethaleng sa DigitalOcean).

Taba ea mantlha, o hloka ho theha ts'ebetso ea othomathike ea ho aha, ho tšoaea, le ho sutumelletsa setšoantšo ho Docker Hub. Sena se tšoana haholo le seo re seng re se entse ka letsoho, ntle le hore re hloka leano la ho fana ka li-tag tse ikhethang ho litšoantšo le ho iketsetsa li-logi. Ke ne ke thatafalloa ke lintlha tse ling tsa sengoloa sa phepelo, joalo ka leano la ho tšoaea, ho kena, khouto ea senotlolo sa SSH, ho theha khokahano ea SSH. Empa ka lehlohonolo mohlankana oaka o hantle haholo ka bash, joalo ka lintho tse ling tse ngata. O nthusitse ho ngola lengolo lena.

Kahoo, karolo ea pele ea sengoloa e kenya setšoantšo ho Docker Hub. Sena se bonolo haholo ho se etsa. Leano la ho tšoaea leo ke le sebelisitseng le kenyelletsa ho kopanya git hash le git tag, haeba e le teng. Sena se tiisa hore tag e ikhethile mme e etsa hore ho be bonolo ho khetholla kopano eo e thehiloeng ho eona. DOCKER_USERNAME и DOCKER_PASSWORD ke mefuta e fapaneng ea tikoloho ea basebelisi e ka hlophisoang ho sebelisoa sebopeho sa Travis CI. Travis CI e tla sebetsana le data ea bohlokoa ka bo eona e le hore e se ke ea oela matsohong a fosahetseng.

Mona ke karolo ea pele ea 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}

Hore na karolo ea bobeli ea script e tla ba efe ho itšetlehile ka ho feletseng hore na u sebelisa moamoheli ofe le hore na khokahano ea eona e hlophisitsoe joang. Tabeng ea ka, kaha ke sebelisa Digital Ocean, ke sebelisa litaelo ho hokahanya le seva thuto. Ha o sebetsa le AWS, sesebelisoa se tla sebelisoa aws, joalo joalo.

Ho theha seva ho ne ho se thata haholo. Kahoo, ke thehile droplet ho latela setšoantšo sa motheo. Hoa lokela ho hlokomeloa hore sistimi eo ke e khethileng e hloka ho kengoa ha Docker ka nako e le 'ngoe le ho hlahisoa ha Docker ka nako e le' ngoe. Ke sebelisitse Ubuntu 18.04 ho kenya Docker, kahoo haeba u sebelisa Ubuntu ho etsa se tšoanang, u ka latela feela. sena tataiso e bonolo.

Ha ke bue mona ka litaelo tse khethehileng tsa ts'ebeletso, kaha karolo ena e ka fapana haholo maemong a fapaneng. Ke tla fana ka moralo o akaretsang oa ts'ebetso o tla etsoa kamora ho hokela ka SSH ho seva eo projeke e tla romelloa ho eona:

  • Re hloka ho fumana setshelo se ntseng se sebetsa hona joale ebe re se emisa.
  • Ebe o hloka ho qala setshelo se secha ka morao.
  • U tla hloka ho seta boema-kepe ba lehae ba seva ho 80 - sena se tla u lumella ho kenya sebaka sa marang-rang atereseng e kang example.com, ntle le ho hlakisa boema-kepe, ho fapana le ho sebelisa aterese e joalo example.com:5000.
  • Qetellong, o hloka ho hlakola lijana tsohle tsa khale le litšoantšo.

Mona ke tswelopele ya mongolo.

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

Lintho tse ling tseo u lokelang ho li ela hloko

Ho ka etsahala hore ha o hokahanya le seva ka SSH ho tloha Travis CI, u tla bona temoso e tla u thibela ho tsoela pele ka ho kenya ha tsamaiso e tla emela karabo ea mosebedisi.

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

Ke ithutile hore senotlolo sa likhoele se ka kengoa ka har'a base64 e le ho se boloka ka mokhoa oo se ka sebetsoang ka sona habonolo le ka ts'epo. Sethaleng sa ho kenya, o ka khetha senotlolo sa sechaba ebe o se ngolla faeleng known_hosts e le ho tlosa phoso e ka holimo.

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

Ha e le hantle, taelo ena e ka shebahala tjena:

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

Mona ke seo e se hlahisang - khoele e kentsoeng ea base64:

MTIzLjQ1LjY3Ljg5IHNzaC1yc2EgQUFBQUIzTnphQzF5YzJFQUFBQUJJd0FBQVFFQWtsT1Vwa0RIcmZIWTE3U2JybVRJcE5MVEdLOVRqb20vQldEU1UKR1BsK25hZnpsSERUWVc3aGRJNHlaNWV3MThKSDRKVzlqYmhVRnJ2aVF6TTd4bEVMRVZmNGg5bEZYNVFWa2JQcHBTd2cwY2RhMwpQYnY3a09kSi9NVHlCbFdYRkNSK0hBbzNGWFJpdEJxeGlYMW5LaFhwSEFac01jaUxxOFY2UmpzTkFRd2RzZE1GdlNsVksvN1hBCnQzRmFvSm9Bc25jTTFROXg1KzNWMFd3NjgvZUlGbWIxenVVRmxqUUpLcHJyWDg4WHlwTkR2allOYnk2dncvUGIwcndlcnQvRW4KbVorQVc0T1pQblRQSTg5WlBtVk1MdWF5ckQyY0U4NlovaWw4YitndzNyMysxbkthdG1Ja2puMnNvMWQwMVFyYVRsTXFWU3NieApOclJGaTl3cmYrTTdRPT0geW91QGV4YW1wbGUuY29tCg==

Taelo e boletsoeng ka holimo ke ena

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

Mokhoa o ts'oanang o ka sebelisoa ka senotlolo sa poraefete ha o theha khokahano, hobane o kanna oa hloka senotlolo sa lekunutu ho fihlella seva. Ha o sebetsa ka senotlolo, o hloka feela ho etsa bonnete ba hore e bolokiloe ka mokhoa o sireletsehileng tikolohong ea Travis CI le hore ha e bontšoe kae kapa kae.

Ntho e 'ngoe eo u lokelang ho e ela hloko ke hore ho ka' na ha hlokahala hore u tsamaise script eohle ea deployment e le mohala o le mong, mohlala - ka doctl. Sena se ka ’na sa hloka boiteko bo eketsehileng.

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

TLS/SSL le ho leka-lekanya mojaro

Ka mor'a hore ke etse ntho e 'ngoe le e' ngoe e boletsoeng ka holimo, bothata ba ho qetela boo ke ileng ka kopana le bona ke hore seva se ne se se na SSL. Kaha ke sebelisa seva sa Node.js, e le hore ke qobelle sebetsa Reverse proxy Nginx le Let's Encrypt, o hloka ho nahana haholo.

Ke ne ke hlile ke sa batle ho etsa tlhophiso ena eohle ea SSL ka letsoho, kahoo ke ile ka theha sekala sa mojaro mme ka tlaleha lintlha tsa eona ho DNS. Tabeng ea DigitalOcean, ho etsa mohlala, ho etsa setifikeiti se inchafatsang se inchafatsang ho sekala sa mojaro ke mokhoa o bonolo, o sa lefelloeng le o potlakileng. Mokhoa ona o na le molemo o ekelitsoeng oa hore o etsa hore ho be bonolo haholo ho theha SSL ho li-server tse ngata tse tsamaeang ka mor'a tekanyo ea mojaro ha ho hlokahala. Sena se lumella li-server hore li se ke tsa "nahana" ka SSL ho hang, empa ka nako e ts'oanang sebelisa boema-kepe joalo ka tloaelo. 80. Kahoo ho theha SSL ho sekala sa mojaro ho bonolo ebile ho bonolo ho feta mekhoa e meng ea ho theha SSL.

Joale o ka koala likou tsohle ho seva e amohelang likhokahano tse kenang - ntle le boema-kepe 80, e sebelisetsoang ho buisana le sehlahlo sa mojaro, le boema-kepe 22 bakeng sa SSH. Ka lebaka leo, boiteko ba ho fihlella seva ka ho toba likoung leha e le life ntle le tsena tse peli bo tla hlōleha.

Liphello

Kamora hore ke etse tsohle tseo ke buileng ka tsona bukeng ena, sethala sa Docker kapa mehopolo ea liketane tse ikemetseng tsa CI / CD ha li sa hlola li ntšosa. Ke khonne ho theha ketane e tsoelang pele ea ho kopanya, nakong eo khoutu e lekoang pele e kena tlhahiso 'me khoutu e kenngoa ka ho toba ho seva. Sena sohle se ntse se le ncha ho 'na,' me ke na le bonnete ba hore ho na le litsela tsa ho ntlafatsa ts'ebetso ea ka ea boiketsetso le ho e etsa hore e sebetse hantle. Kahoo haeba u na le maikutlo mabapi le taba ena, ke kopa u ntsebise. 'na tseba. Ke tšepa hore sehlooho sena se u thusitse boitekong ba hau. Ke batla ho lumela hore ka mor'a ho e bala, u ithutile ho hongata kamoo ke ithutileng kateng ha u ntse u nahana ka ntho e 'ngoe le e' ngoe eo ke buileng ka eona ho eona.

PES Ho rona marakeng ho na le setšoantšo Docker, e ka kenngoa ka ho tobetsa hanngoe feela. U ka hlahloba ts'ebetso ea lijana ho VPS. Bareki bohle ba bacha ba fuoa matsatsi a 3 a tlhahlobo ntle le tefo.

Babali ba ratehang! Na u sebelisa theknoloji ea CI/CD mererong ea hau?

Ho theha ketane ea CI / CD le ho iketsetsa mosebetsi ka Docker

Source: www.habr.com

Eketsa ka tlhaloso