Fausiaina o se filifili CI/CD ma fa'autometi galuega ma Docker

Na ou tusia aʻu upega tafaʻilagi muamua i le tuai o 90s. I lena taimi sa matua faigofie lava ona tuʻuina i latou i le faasologa o galuega. Sa i ai se server Apache i luga o nisi talimalo faʻasoa, e mafai ona e ulufale i totonu o lenei server e ala i le FTP e ala i le tusiaina o se mea faapena ftp://ftp.example.com. Ona tatau lea ona e ulufale i lou igoa ma le upu faataga ma tuu faila i le server. Sa i ai taimi eseese, sa faigofie mea uma i lena taimi nai lo le taimi nei.

Fausiaina o se filifili CI/CD ma fa'autometi galuega ma Docker

I le luasefulu tausaga talu mai lena taimi, ua matua suia mea uma. O upegatafa'ilagi ua sili atu ona lavelave; e tatau ona faʻapipiʻi aʻo leʻi faʻatagaina i le gaosiga. E tasi le server na avea ma tele sapalai o lo'o tamo'e i tua o uta paleni, ma o le fa'aogaina o faiga fa'atonutonu fa'asologa na avea ma mea masani.

Mo la'u lava galuega faatino sa i ai sa'u faatulagaga faapitoa. Ma na ou iloa ou te manaʻomia le tomai e faʻapipiʻi ai le saite i le gaosiga e ala i le faia o le tasi gaioiga: tusitusi code i se lala master luga ole GitHub. E le gata i lea, na ou iloa ina ia mautinoa le faʻaogaina o laʻu upega tafaʻilagi, ou te leʻi manaʻo e faʻatautaia se fuifui tele Kubernetes, pe faʻaaoga tekinolosi Docker Swarm, pe tausia se vaʻa o 'auʻaunaga ma pods, sui ma isi ituaiga uma. lavelave. Ina ia ausia le sini o le faafaigofieina o galuega, sa tatau ona ou faamasani i le CI/CD.

Afai ei ai sau galuega laiti (i lenei tulaga, o se Node.js poloketi) ma e te fia iloa pe faʻafefea ona faʻaogaina le faʻaogaina o lenei poloketi, aʻo faʻamautinoa o mea o loʻo teuina i totonu o le faleoloa e fetaui lelei ma mea e galue i le gaosiga, ona ou manatu atonu e te fiafia i lenei tusiga.

Mea e manaʻomia

O le tagata faitau o lenei tusiga e tatau ona i ai se malamalamaaga masani o le laina faʻatonu ma le tusiaina o tusitusiga Bash. E le gata i lea, o le a ia manaʻomia ni tala Travis C.I. и Docker hub.

Sini

O le a ou le fai atu o lenei tusiga e mafai ona taʻua ma le le faatuaoia o se "aʻoaʻoga". O le tele lea o se pepa o loʻo ou talanoa ai e uiga i mea ua ou aʻoaʻoina ma faʻamatalaina le faagasologa e fetaui ma aʻu mo le suʻega ma le faʻapipiʻiina o code i le gaosiga, faia i le tasi pasi faʻaautomatika.

O le mea lea na iu ai i laʻu galuega.

Mo le fa'ailoga ua lafoina i so'o se lala o fale teu oloa vagana ai master, o gaioiga nei e faia:

  • O le poloketi e fausia i luga o Travis CI amata.
  • O su'ega uma, tu'ufa'atasia ma fa'ai'uga fa'ai'uga e fa'atino.

Na'o le code e pau i totonu master, o mea nei e faia:

  • O mea uma na taʻua i luga, faʻaopoopo ...
  • Fausia se ata Docker e faʻavae i luga o le tulafono o loʻo iai nei, faʻatulagaga ma le siosiomaga.
  • Fa'asoa le ata ile Docker Hub.
  • So'oga i le 'au'aunaga gaosiga.
  • Tuuina atu o se ata mai le Docker Hub i le server.
  • Taofi le koneteina o iai nei ma amata se mea fou e faʻatatau i le ata fou.

Afai e leai se mea e te iloa e uiga i Docker, ata ma pusa, aua e te popole. O le a ou taʻu atu ia te oe mea uma.

O le a le CI/CD?

O le fa'apuupuuga CI/CD o lo'o fa'atusaina mo le "fa'aauauina tu'ufa'atasia/fa'aauau le fa'atinoina."

▍Fa'aauau fa'atasi

Fa'aauau le tu'ufa'atasiga o se fa'agasologa lea e faia ai e le au atina'e le fa'atumauina o le fa'aputuga autu autu a le poloketi (e masani lava o se lala master). I le taimi lava e tasi, o le tulaga lelei o le code e faʻamautinoa e ala i suʻega faʻapitoa.

▍Fa'aauau le fa'aogaina

O le fa'aauauina o le fa'aogaina o le fa'apipi'iina fa'aautomatika o le code i le gaosiga. O le vaega lona lua o le CI/CD acronym o nisi taimi e sipelaina o le "faʻaauau pea." Ole mea lea e tutusa lelei ma le "fa'aauauina o le fa'atinoina", ae o le "fa'aauau le tu'uina atu" o lona uiga o le mana'oga e fa'amautu ma le lima suiga a'o le'i amataina le fa'agaioiga o galuega.

Amataina

O le app na ou masani ona aʻoaʻoina ai nei mea uma e taʻua Manatua. Ose poloketi i luga ole laiga lea o lo'o ou galue ai, ua mamanuina mo le tusiaina o fa'amatalaga. I le taimi muamua sa ou taumafai e fai JAMStack-poloketi, pe naʻo se talosaga pito i luma e aunoa ma se 'auʻaunaga, ina ia faʻaogaina le tulaga masani talimalo ma le faʻatinoina o galuega faatino e ofoina atu Faʻailoa. A'o fa'atupula'ia le lavelave o le talosaga, na ou mana'omia le faia o lana vaega o le 'au'aunaga, o lona uiga e mana'omia le fa'atulagaina o la'u lava ta'iala mo le tu'ufa'atasia fa'a otometi ma le fa'aogaina otometi o le poloketi.

I loʻu tulaga, o le talosaga o se Express server o loʻo tamoe i le Node.js siʻosiʻomaga, o loʻo tuʻuina atu se tasi itulau React talosaga ma lagolagoina se API faʻaumau-itulau. O lenei fausaga e mulimuli i le fuafuaga e mafai ona maua i totonu lenei Ta'iala fa'amaoni fa'aputu atoa.

Sa ou feutagai ma uo, o ia o se tagata poto faapitoa i masini, ma fesili ia te ia po o le a le mea e tatau ona ou faia e faʻaoga uma ai i le auala ou te manaʻo ai. Na ia tuʻuina mai ia te aʻu le manatu o le a foliga mai o se faʻaogaina otometi, o loʻo faʻamatalaina i le vaega o Sini o lenei tusiga. O le i ai o nei sini o lona uiga e tatau ona ou iloa pe faʻapefea ona faʻaoga Docker.

Docker

Docker o se meafaigaluega e, faʻafetai i tekonolosi faʻapipiʻi, faʻatagaina talosaga e faigofie ona tufatufaina atu, faʻapipiʻi ma tamoʻe i le siosiomaga lava e tasi, e tusa lava pe o loʻo tamomoe le Docker platform i siosiomaga eseese. Muamua, na ou manaʻomia e tuʻu oʻu lima i luga o meafaigaluega laina laina Docker (CLI). Faatonuga O le taʻiala faʻapipiʻi Docker e le mafai ona taʻua manino ma malamalama, ae mai ai e mafai ona e aʻoaʻoina ina ia faia le laasaga muamua faʻapipiʻi, e tatau ona e siiina le Docker Desktop (mo Mac poʻo Windows).

Docker Hub e tutusa lelei lava ma GitHub mo git repository, poʻo le resitala npm mo paketi JavaScript. O se fale teu oloa i luga ole laiga mo ata Docker. O le mea lea e fesoʻotaʻi i ai Docker Desktop.

O lea la, ina ia amata ma Docker, e tatau ona e faia ni mea se lua:

A maeʻa lenei mea, e mafai ona e siaki pe o galue le Docker CLI e ala i le faʻatinoina o le poloaiga lenei e siaki ai le Docker version:

docker -v

Le isi, faʻaoga i totonu Docker Hub e ala i le faʻaogaina o lou igoa ole igoa ma le upega tafaʻilagi pe a fesiligia:

docker login

Mo le faʻaaogaina o Docker, e tatau ona e malamalama i manatu o ata ma pusa.

▍ Ata

O se ata o se mea e pei o se mamanu o loʻo i ai faʻatonuga mo le faʻapipiʻiina o le koneteina. O se ata e le masuia o le faiga faila ma faatulagaga a le talosaga. E faigofie ona fa'asoa ata e tagata atia'e.

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

O lenei faʻatonuga o le a faʻaalia ai se laulau ma le ulutala lea:

REPOSITORY     TAG     IMAGE ID     CREATED     SIZE
---

Le isi o le a tatou vaʻavaʻai i nisi o faʻataʻitaʻiga o faʻatonuga i le faatulagaga tutusa - muamua o loʻo i ai se faʻatonuga ma se faʻamatalaga, ona sosoo ai lea ma se faʻataʻitaʻiga o mea e mafai ona gaosia.

▍Contains

O se atigipusa o se afifi fa'atino e iai mea uma e mana'omia e fa'atino ai se talosaga. O se talosaga faʻatasi ma lenei faiga o le a galue tutusa, e tusa lava po o le a le atinaʻe: i totonu o se siosiomaga tuʻufua ma i le siosiomaga tutusa. O le manatu o faʻataʻitaʻiga o le ata lava e tasi e faʻalauiloa i siosiomaga eseese.

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

▍ Fa'ailoga

O le pine o se faʻaaliga o se faʻamatalaga patino o se ata.

▍Ose faʻamatalaga vave ile Docker commands

O se faʻamatalaga lautele lea o nisi o faʻatonuga masani a Docker.

au

Anotusi

aafiaga

fale faufale

Ata

Fausia se ata mai se Dockerfile

fa'ailoga faufale

Ata

Fa'ailoga ata

faʻailoga ata

Ata

Lisi ata

toso tamoe

Pusa

Fa'amomoe o se atigipusa e fa'atatau i se ata

tu'i fa'atau

Ata

Tu'u i luga o se ata i le resitala

toso a leoleo

Ata

Tu'uina se ata mai le resitala

vevela ps

Pusa

Lisi pusa

teuteu faiga faufau

Ata/Containe

Ave'ese pusa ma ata e le'i fa'aaogaina

▍Dockerfile

Ou te iloa le faʻatinoina o se gaosiga o talosaga i le lotoifale. E i ai la'u fa'atulagaga Webpack ua fuafuaina e fausia ai se talosaga React ua saunia. O le isi, o loʻo i ai laʻu faʻatonuga e amata ai se Node.js faʻavae server i luga o le taulaga 5000. E pei o lenei:

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

E tatau ona maitauina e leai sau faʻataʻitaʻiga talosaga mo lenei mea. Ae o iinei, mo faʻataʻitaʻiga, soʻo se faʻaoga faigofie Node o le a faia.

Ina ia mafai ona faʻaogaina le koneteina, e te manaʻomia le tuʻuina atu o faʻatonuga ia Docker. E faia lenei mea e ala i se faila e taʻua Dockerfile, o loʻo i totonu o le lisi autu o le poloketi. O lenei faila, i le taimi muamua, e foliga mai e matua le malamalama.

Ae o mea o loʻo i ai naʻo faʻamatalaina, faʻatasi ai ma faʻatonuga faʻapitoa, se mea e tutusa ma le faʻatulagaina o se siosiomaga galue. O nisi nei o poloaiga:

  • FROM — O lenei poloaiga e amata ai se faila. O lo'o fa'amaoti mai ai le ata fa'avae o lo'o fausia ai le koneteina.
  • KOPI — Kopi faila mai se punavai i le lotoifale i se koneteina.
  • GALUEGA - Faʻatulagaina le tusi galue mo poloaiga nei.
  • RUN - Fa'atonu poloaiga.
  • FAʻAALIGA - Fa'atonuga tau.
  • ENTRYPOINT — Faailoga o le poloaiga e faatino.

Dockerfile atonu e foliga pei o lenei:

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

Fa'alagolago i le ata fa'avae e te filifilia, atonu e te mana'omia le fa'apipi'iina o isi fa'alagolago. O le mea moni o nisi o ata faʻavae (pei o Node Alpine Linux) ua faia ma le faʻamoemoe e faʻapipiʻi tutusa pe a mafai. O se taunuuga, atonu latou te le maua nisi o polokalama e te faʻamoemoeina.

▍Fausia, fa'ailoga ma fa'agaoioia le koneteina

O le fa'apotopotoga fa'apitonu'u ma le fa'alauiloaina o le atigipusa e mae'a Dockerfile, o galuega e fai si faigofie. Ae e te leʻi tuleia le ata i Docker Hub, e tatau ona e suʻeina i le lotoifale.

▍ Fonotaga

Muamua e tatau ona e aoina ata, faʻamaonia se igoa ma, pe a filifili, se pine (afai e le o faʻamaonia se pine, o le a otometi lava ona tuʻuina atu e le faiga se pine i le ata latest).

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

A maeʻa le faʻatonuina o lenei poloaiga, e mafai ona e matamata Docker fausia le ata.

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

O le fausiaina e ono alu ni nai minute - e fa'alagolago uma i le tele o lau fa'alagolago. A maeʻa le fausiaina, e mafai ona e faʻatautaia le poloaiga docker images ma va'ai i le fa'amatalaga o lau ata fou.

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

▍Tatala

Ua faia le ata. O lona uiga e mafai ona e fa'atautaia se koneteina e fa'atatau i ai. Ona ou te manaʻo e mafai ona maua le talosaga o loʻo taʻavale i totonu o le pusa i localhost:5000, a'u, i le itu agavale o le paga 5000:5000 i le isi poloaiga ua faapipiiina 5000. I le itu taumatau o loʻo i ai le pusa pusa.

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

I le taimi nei ua faia le koneteina ma tamoʻe, e mafai ona e faʻaogaina le poloaiga docker ps e vaʻai i faʻamatalaga e uiga i lenei pusa (pe mafai ona e faʻaogaina le poloaiga docker ps -a, lea e fa'aalia ai fa'amatalaga e uiga i koneteina uma, ae le na'o mea ta'avale).

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

Afai e te alu nei i le tuatusi localhost:5000 - e mafai ona e vaʻai i se itulau o se talosaga taʻavale e foliga tutusa ma le itulau o se talosaga o loʻo taʻavale i se siosiomaga gaosiga.

▍ Fa'ailoga ma fa'asalalau

Ina ia faʻaaogaina se tasi o ata na faia i luga o le gaosiga o le gaosiga, matou te manaʻomia le mafai ona sii maia lenei ata mai Docker Hub. O lona uiga e te manaʻomia muamua le fatuina o se fale teu oloa mo le poloketi ile Docker Hub. A maeʻa lenei, o le a tatou maua se nofoaga e mafai ona tatou lafoina ai le ata. O le ata e tatau ona toe faʻaigoaina ina ia amata lona igoa i le matou Docker Hub username. E tatau ona soso'o ma le igoa o le fale teu oloa. Soo se pine e mafai ona tuu i le pito o le igoa. Lalo o se faʻataʻitaʻiga o le faʻaigoaina o ata e faʻaaoga ai lenei polokalame.

Ole taimi nei e mafai ona e fausia le ata i se igoa fou ma faʻatautaia le poloaiga docker push e tulei i le fale teu oloa 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

Afai e sologa lelei mea uma, o le a maua le ata ile Docker Hub ma faigofie ona faʻapipiʻi i luga o le 'auʻaunaga pe faʻafeiloaʻi i isi atinaʻe.

Laasaga muamua

I le taimi nei ua matou faʻamaonia o le talosaga, i le tulaga o se pusa Docker, o loʻo tamoʻe i le lotoifale. Ua matou lafoina le pusa i Docker Hub. O lona uiga o nei mea uma ua maeʻa ona tatou alualu i luma lelei i la tatou sini. O lea la e mana'omia ona tatou fo'ia nisi fesili se lua:

  • Faʻatulagaina se meafaigaluega CI mo le suʻega ma le faʻaogaina o code.
  • Faʻatulagaina le 'auʻaunaga gaosiga ina ia mafai ona sii mai ma faʻatautaia la matou code.

I la matou tulaga, matou te faʻaaogaina Travis C.I.. I le avea ai ma se server- DitigalOcean.

E tatau ona maitauina o iinei e mafai ona e faʻaogaina se isi tuʻufaʻatasiga o auaunaga. Mo se faʻataʻitaʻiga, nai lo Travis CI, e mafai ona e faʻaogaina CircleCI poʻo Github Actions. Ma nai lo le DigitalOcean - AWS poʻo Linode.

Na matou filifili e galulue ma Travis CI, ma ua uma ona ou faʻatulagaina i lenei auaunaga. O le mea lea, o lenei o le a ou talanoa puupuu e uiga i le auala e saunia ai mo le galuega.

Travis C.I.

Travis CI o se meafaigaluega mo le suʻega ma le faʻaogaina o code. Ou te le manaʻo e alu i le faʻalavelave o le faʻatulagaina o Travis CI, talu ai o galuega taʻitasi e tulaga ese, ma o le a le maua ai se aoga tele. Ae o le a ou faʻamatalaina faʻavae e amata ai oe pe a e filifili e faʻaaoga Travis CI. Pe e te filifilia Travis CI, CircleCI, Jenkins, poʻo se isi mea, o metotia faʻatulagaina tutusa o le a faʻaaogaina i soo se mea.

Ina ia amata ma Travis CI, alu i upegatafa'ilagi o galuega ma fai se tala. Ona tuʻufaʻatasia lea o Travis CI ma lau tala GitHub. A faʻatūina le faiga, e tatau ona e faʻamaonia le fale teu oloa e te manaʻo e faʻaogaina ai galuega ma mafai ai ona e maua. (Ou te faʻaaogaina GitHub, ae ou te mautinoa e mafai e Travis CI ona tuʻufaʻatasia ma BitBucket, ma GitLab, ma isi auaunaga tutusa).

O taimi uma lava e amata ai Travis CI, e faʻalauiloaina le 'auʻaunaga, faʻataunuʻuina poloaiga o loʻo faʻamaonia i le faila faʻatulagaina, e aofia ai le faʻapipiʻiina o lala faʻapipiʻi talafeagai.

▍Taamilosaga olaga o galuega

Travis CI seti faila valaau .travis.yml ma teuina i totonu o le lisi autu o le poloketi, lagolagoina le manatu o mea na tutupu taamilosaga o le olaga galuega. O mea nei o loʻo lisiina i le faasologa e tutupu ai:

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

▍Su'ega

I le faila faʻapipiʻi o le a ou faʻapipiʻiina le Travis CI server i le lotoifale. Na ou filifilia Node 12 o le gagana ma taʻu atu i le faiga e faʻapipiʻi ai faʻalagolago e manaʻomia e faʻaaoga ai Docker.

O mea uma o loʻo lisiina i totonu .travis.yml, o le a faʻataunuʻuina pe a faia uma talosaga toso i lala uma o le fale teu oloa, sei vagana ua faʻamaonia. Ole mea aoga lea aua o lona uiga e mafai ona tatou faʻataʻitaʻiina uma code e sau i totonu o le fale teu oloa. Ole mea lea e te iloa ai pe ua sauni le code e tusi ile lala. master, ma pe o le a motusia le faagasologa o le fausiaina o galuega. I lenei faʻalapotopotoga faʻavaomalo, ou te faʻapipiʻi mea uma i le lotoifale, faʻatautaia le Webpack dev server i tua (o se vaega lea o laʻu galuega), ma faʻataʻitaʻi suʻega.

Afai e te mana'o i lau fale teu oloa e fa'aalia pine o lo'o fa'ailoa mai ai le fa'asoaina o su'ega, iinei E mafai ona e mauaina ni fa'atonuga pupuu ile fa'aogaina o Jest, Travis CI ma Coveralls e aoina ma fa'aali nei fa'amatalaga.

O lea la o le anotusi lea o le faila .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

O le mea lea e muta ai gaioiga o loʻo faia mo lala uma o le fale teu oloa ma mo talosaga toso.

▍ Fa'atonu

Faʻavae i luga o le manatu o faʻataʻitaʻiga faʻaautomatika uma ua maeʻa ma le manuia, matou te mafai, lea e filifili, faʻapipiʻi le code i le gaosiga o le server. Talu ai matou te mananaʻo e faia lenei mea mo naʻo code mai le lala master, matou te tuʻuina atu i le faiga faʻatonuga talafeagai i le faʻatulagaina o faʻatulagaga. Ae e te leʻi taumafai e faʻaoga le code o le a matou vaʻavaʻai i le isi i lau poloketi, ou te fia lapatai atu ia te oe e tatau ona i ai sau faʻamatalaga moni e valaʻau mo le faʻapipiʻiina.

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

E lua faʻafitauli e foia e le faʻapipiʻiina tusitusiga:

  • Fausia, faʻailoga ma lafo le ata i Docker Hub e faʻaaoga ai se meafaigaluega CI (i la matou tulaga, Travis CI).
  • Faʻapipiʻiina o le ata i luga o le 'auʻaunaga, taofi le pusa tuai ma amata se mea fou (i la matou tulaga, o le 'auʻaunaga e tamoʻe i luga o le DigitalOcean platform).

Muamua, e tatau ona e setiina se faiga otometi mo le fausiaina, faʻailoga, ma tulei le ata ile Docker Hub. E tutusa uma lava ma mea ua uma ona matou faia ma le lima, sei vagana ai matou te manaʻomia se taʻiala mo le tuʻuina atu o pine faʻapitoa i ata ma faʻautometi logins. Sa faigata ia te aʻu nisi o auiliiliga o le faʻapipiʻiina o tusitusiga, e pei o le faʻailogaina o fuafuaga, saini, SSH key encoding, SSH connection establishment. Ae laki la'u uo tama e lelei tele i le bash, pei o le tele o isi mea. Sa ia fesoasoani mai ia te au e tusia lenei tusitusiga.

O lea la, o le vaega muamua o le tusitusiga o loʻo tuʻuina atu le ata i Docker Hub. E fai lava si faigofie lenei mea. O le faʻailoga faʻailoga na ou faʻaaogaina e aofia ai le tuʻufaʻatasia o se git hash ma se git tag, pe a iai se tasi. O lenei mea e faʻamautinoa ai e tulaga ese le tag ma faʻafaigofie ona iloa le faʻapotopotoga o loʻo faʻavae ai. DOCKER_USERNAME и DOCKER_PASSWORD o fesuiaiga o le siosiomaga o tagata e mafai ona seti i le faʻaogaina o le Travis CI interface. Travis CI o le a otometi lava ona faʻagasolo faʻamatalaga maʻaleʻale ina ia le paʻu i lima sese.

O le vaega muamua lea o le tusitusiga 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}

O le a le vaega lona lua o le tusitusiga o le a faʻalagolago atoa i le tagata talimalo o loʻo e faʻaogaina ma pe faʻafefea ona faʻatulagaina le fesoʻotaʻiga i ai. I loʻu tulaga, talu ai ou te faʻaogaina le Digital Ocean, ou te faʻaogaina poloaiga e faʻafesoʻotaʻi i le server doctl. A galue ma le AWS, o le a faʻaaogaina le aoga aws, ma faapena atu ai lava.

O le setiina o le server e le'i faigata tele. O lea, ou te setiina se matāua e faʻavae i luga o le ata faʻavae. E tatau ona maitauina o le faiga na ou filifilia e manaʻomia ai le faʻapipiʻiina o le Docker e tasi le taimi ma le faʻalauiloaina o le Docker. Na ou faʻaogaina le Ubuntu 18.04 e faʻapipiʻi ai Docker, o lea afai o loʻo e faʻaogaina foi le Ubuntu e fai tutusa, e mafai ona e mulimuli lenei taiala faigofie.

Ou te le o talanoa iinei e uiga i poloaiga patino mo le tautua, talu ai o lenei itu e mafai ona matua ese lava i tulaga eseese. O le a ou tuʻuina atu se fuafuaga lautele o gaioiga e faʻatino pe a uma ona faʻafesoʻotaʻi e ala i le SSH i le 'auʻaunaga lea o le a faʻapipiʻiina ai le poloketi:

  • E tatau ona tatou su'e le koneteina o lo'o tamo'e nei ma taofi.
  • Ona e manaʻomia lea e faʻalauiloa se pusa fou i tua.
  • E te mana'omia le setiina o le uafu fa'apitonu'u a le server i 80 - o le a fa'atagaina oe e ulufale i le saite i se tuatusi pei example.com, e aunoa ma le faʻamalamalamaina o le taulaga, nai lo le faʻaaogaina o se tuatusi pei example.com:5000.
  • Mulimuli ane, e tatau ona e tape uma pusa tuai ma ata.

O le fa'aauauina lea o le mau.

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

O nisi mea e tatau ona gauai i ai

E mafai pe a e faʻafesoʻotaʻi i le 'auʻaunaga e ala i le SSH mai Travis CI, o le a e vaʻai i se lapataiga o le a taofia ai oe mai le faʻaauauina o le faʻapipiʻiina aʻo faʻatali le faiga mo le tali a le tagata faʻaoga.

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

Na ou aʻoaʻoina o se ki manoa e mafai ona faʻapipiʻiina i le base64 ina ia faʻasaoina i se faiga e mafai ai ona faʻaoga lelei ma faʻatuatuaina. I le tulaga faʻapipiʻi, e mafai ona e faʻavasega le ki lautele ma tusi i se faila known_hosts ina ia mafai ona aveese le sese o loo i luga.

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

I le faʻataʻitaʻiga, atonu e foliga mai lenei poloaiga:

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

Ma o le mea lea e maua mai ai - o se manoa faʻapipiʻi base64:

MTIzLjQ1LjY3Ljg5IHNzaC1yc2EgQUFBQUIzTnphQzF5YzJFQUFBQUJJd0FBQVFFQWtsT1Vwa0RIcmZIWTE3U2JybVRJcE5MVEdLOVRqb20vQldEU1UKR1BsK25hZnpsSERUWVc3aGRJNHlaNWV3MThKSDRKVzlqYmhVRnJ2aVF6TTd4bEVMRVZmNGg5bEZYNVFWa2JQcHBTd2cwY2RhMwpQYnY3a09kSi9NVHlCbFdYRkNSK0hBbzNGWFJpdEJxeGlYMW5LaFhwSEFac01jaUxxOFY2UmpzTkFRd2RzZE1GdlNsVksvN1hBCnQzRmFvSm9Bc25jTTFROXg1KzNWMFd3NjgvZUlGbWIxenVVRmxqUUpLcHJyWDg4WHlwTkR2allOYnk2dncvUGIwcndlcnQvRW4KbVorQVc0T1pQblRQSTg5WlBtVk1MdWF5ckQyY0U4NlovaWw4YitndzNyMysxbkthdG1Ja2puMnNvMWQwMVFyYVRsTXFWU3NieApOclJGaTl3cmYrTTdRPT0geW91QGV4YW1wbGUuY29tCg==

O le poloaiga lea ua ta'ua i luga

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

O le auala lava lea e tasi e mafai ona faʻaogaina i se ki faʻapitoa pe a faʻatuina se fesoʻotaʻiga, talu ai e te manaʻomia se ki faʻapitoa e maua ai le server. A e galue ma le ki, e tatau lava ona e faʻamautinoa o loʻo teuina ma le saogalemu i totonu ole suiga ole siosiomaga Travis CI ma e le faʻaalia i soo se mea.

O le isi mea e tatau ona matauina atonu e te manaʻomia le faʻataʻitaʻiina o le faʻataʻitaʻiga atoa o le laina e tasi, mo se faʻataʻitaʻiga - ma doctl. Atonu e mana'omia ai nisi taumafaiga faaopoopo.

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

TLS/SSL ma le Paleni o uta

Ina ua uma ona ou faia mea uma o loʻo taʻua i luga, o le faʻafitauli mulimuli na ou feagai o le leai o se SSL i le server. Talu ai ou te faʻaaogaina se Node.js server, ina ia faʻamalosia ia galue sui sui Nginx ma Let's Encrypt, e tatau ona e faʻaogaina tele.

Ou te leʻi manaʻo e fai ma le lima nei faʻatulagaga SSL, o lea na ou faia ai se paleni o uta ma faʻamaumau faʻamatalaga i DNS. I le tulaga o le DigitalOcean, mo se faʻataʻitaʻiga, o le fatuina o se faʻafouga-auto-faʻailogaina tusi faamaonia i luga o le paleni o uta o se faiga faigofie, saoloto ma vave. O lenei faiga o loʻo i ai le faʻamanuiaga faʻaopoopo e faigofie ai ona faʻatutuina le SSL i luga o le tele o sapalai o loʻo taʻavale i tua o le paleni o uta pe'ā manaʻomia. O lenei mea e mafai ai e le 'auʻaunaga latou lava ona le "mafaufau" e uiga i le SSL, ae i le taimi lava e tasi e faʻaaoga ai le taulaga e pei ona masani ai 80. O lea la o le setiina o le SSL i luga o le paleni o uta e sili atu ona faigofie ma sili atu ona faigofie nai lo isi auala o le setiina o le SSL.

O lea e mafai ona e tapunia uma ports i luga o le server e talia fesoʻotaʻiga ulufale mai - sei vagana ai le taulaga 80, fa'aaoga e feso'ota'i ai ma le uta paleni, ma le uafu 22 mo SSH. O se taunuuga, o se taumafaiga e faʻaoga saʻo le server i luga o soʻo se taulaga e ese mai i nei mea e lua o le a le manuia.

O taunuʻuga

Ina ua uma ona ou faia mea uma na ou talanoa ai i lenei mea, e le o le Docker platform po o manatu o filifili CI / CD otometi na ou toe fefe ai. Na mafai ona ou faʻatutuina se filifili tuʻufaʻatasiga faʻaauau, lea e faʻataʻitaʻiina ai le code aʻo leʻi alu i le gaosiga ma otometi lava ona faʻapipiʻi le code i luga o le server. O nei mea uma e fou lava ia te aʻu, ma ou te mautinoa o loʻo i ai auala e faʻaleleia ai laʻu faʻaogaina otometi ma faʻaleleia atili. Afai la e iai ni ou manatu i lenei mataupu, faamolemole taʻu mai ia te aʻu. ia te au iloa. Ou te faʻamoemoe na fesoasoani lenei tusiga ia te oe i au taumafaiga. Ou te manaʻo e talitonu ina ua uma ona e faitauina, na e aʻoaʻoina le tele o mea na ou aʻoaʻoina aʻo ou mafaufau i mea uma na ou talanoa ai i totonu.

SALA I la matou maketi e iai se ata Docker, lea e mafai ona faʻapipiʻi i le kiliki e tasi. E mafai ona e siaki le faagaoioiga o containers i VPS. O tagata fou uma e tu'uina atu 3 aso o su'ega e leai se totogi.

Lau faitau le au faitau! E te fa'aogaina tekinolosi CI/CD i au poloketi?

Fausiaina o se filifili CI/CD ma fa'autometi galuega ma Docker

puna: www.habr.com

Faaopoopo i ai se faamatalaga