Ke hana nei i kahi kaulahao CI/CD a me ka hana automating me Docker
Ua kākau wau i kaʻu mau pūnaewele mua i ka hopena o 90s. I kēlā manawa he mea maʻalahi loa ka hoʻokomo ʻana iā lākou i ka papa hana. Aia kekahi kikowaena Apache ma kahi hoʻokipa like, hiki iā ʻoe ke komo i kēia kikowaena ma o FTP ma ke kākau ʻana i kahi mea like ftp://ftp.example.com. A laila pono ʻoe e hoʻokomo i kou inoa a me ka ʻōlelo huna a hoʻouka i nā faila i ke kikowaena. He mau manawa like ʻole, maʻalahi nā mea a pau i kēlā manawa ma mua o kēia manawa.
I loko o nā makahiki ʻelua mai ia manawa, ua loli nui nā mea a pau. Ua ʻoi aku ka paʻakikī o nā pūnaewele; pono e hōʻuluʻulu ʻia lākou ma mua o ka hoʻokuʻu ʻia ʻana i ka hana. Hoʻokahi kikowaena hoʻokahi i lilo i mau kikowaena e holo ana ma hope o nā mea kaulike ukana, a ua lilo ka hoʻohana ʻana i nā ʻōnaehana mana mana i mea maʻamau.
No kaʻu papahana pilikino ua loaʻa iaʻu kahi hoʻonohonoho kūikawā. A ua ʻike au he pono iaʻu ka hiki ke hoʻokau i ka pūnaewele i ka hana ʻana ma ka hana ʻana i hoʻokahi hana: ke kākau ʻana i ke code i kahi lālā master ma GitHub. Eia hou, ua ʻike au i mea e hōʻoia ai i ka hana ʻana o kaʻu noi pūnaewele liʻiliʻi, ʻaʻole wau makemake e hoʻokele i kahi pūʻulu Kubernetes nui, a hoʻohana paha i ka ʻenehana Docker Swarm, a mālama paha i nā ʻauwaʻa o nā kikowaena me nā pods, nā mea hana a me nā ʻano mea ʻē aʻe. paʻakikī. I mea e hoʻokō ai i ka pahuhopu o ka hana maʻalahi e like me ka hiki, pono wau e kamaʻāina me CI/CD.
Inā he papahana liʻiliʻi kāu (ma kēia hihia, he papahana Node.js) a makemake ʻoe e ʻike pehea e hoʻomaʻamaʻa ai i ka hoʻolaha ʻana o kēia papahana, ʻoiai e hōʻoiaʻiʻo ana i ka mea i mālama ʻia i loko o ka waihona e like me ka mea e hana ana i ka hana, a laila au. manaʻo paha makemake ʻoe i kēia ʻatikala.
Nā Pono
Manaʻo ka mea heluhelu o kēia ʻatikala e loaʻa i kahi ʻike kumu o ka laina kauoha a kākau i nā palapala Bash. Eia kekahi, pono ʻo ia i nā moʻokāki ʻO Travis CI и Hub hoʻokau.
Nń Pahuhopu
ʻAʻole wau e ʻōlelo e hiki ke kapa ʻia kēia ʻatikala he "aʻo". ʻO kēia kahi palapala aʻu e kamaʻilio ai e pili ana i nā mea aʻu i aʻo ai a wehewehe i ke kaʻina hana e kūpono iaʻu no ka hoʻāʻo ʻana a me ka hoʻoili ʻana i nā code i ka hana ʻana, i hana ʻia i hoʻokahi pass automated.
ʻO kēia kaʻu kaʻina hana i pau ai.
No ke code i kau ʻia i kekahi lālā waihona koe master, hana ʻia kēia mau hana:
Hoʻomaka ka papahana ma Travis CI.
Hana ʻia nā hoʻokolohua ʻāpana āpau, hoʻohui a me ka hopena.
No ke code wale nō i hāʻule i loko master, hana ʻia kēia:
ʻO nā mea a pau i ʻōlelo ʻia ma luna, me ...
Ke kūkulu nei i kahi kiʻi Docker e pili ana i ke code o kēia manawa, nā hoʻonohonoho a me ke kaiapuni.
Ke kau nei i ke kiʻi iā Docker Hub.
Pili i ke kikowaena hana.
Hoʻouka i kahi kiʻi mai Docker Hub i ke kikowaena.
Ke hooki nei i ka ipu o keia manawa a me ka hoomaka ana i kahi hou ma muli o ke kii hou.
Inā ʻike ʻole ʻoe i kahi mea e pili ana iā Docker, nā kiʻi a me nā ipu, mai hopohopo. E haʻi aku wau iā ʻoe no ia mea.
He aha ka CI/CD?
ʻO ka pōkole CI / CD ke kū nei no ka "hoʻohui mau / hoʻomau mau ʻana."
▍Hoʻohui mau
ʻO ka hoʻohui mau ʻana he hana ia e hana ai nā mea hoʻomohala i ka hoʻopaʻa ʻana i ka waihona kumu kumu kumu nui o ka papahana (maʻa mau he lālā. master). I ka manawa like, hōʻoia ʻia ka maikaʻi o ke code ma o ka hoʻāʻo ʻana.
▍Ka hoʻolaha mau
ʻO ka hoʻomau mau ʻana ʻo ia ka hoʻolaha pinepine ʻana o ke code i ka hana. ʻO ka ʻāpana ʻelua o ka acronym CI/CD i kekahi manawa i wehewehe ʻia ma ke ʻano he "hoʻouna mau." ʻO kēia ka mea like me ka "hoʻomau mau", akā ʻo ka "hoʻouna mau" e hōʻike ana i ka pono e hoʻopaʻa lima i nā loli ma mua o ka hoʻomaka ʻana i ke kaʻina hana hoʻolālā.
noho hoʻomaka 'ana
Ua kapa ʻia ka app aʻu i aʻo ai i kēia mau mea a pau Hoʻomaopopo. He papahana pūnaewele kēia aʻu e hana nei, i hoʻolālā ʻia no ka lawe ʻana i nā memo. I ka wā mua ua hoʻāʻo wau e hana ʻO JAMStack-project, a i ʻole kahi noi mua me ka ʻole o kahi kikowaena, i mea e hoʻohana pono ai i ka hoʻokipa maʻamau a me ka hiki ke hoʻolālā papahana i hāʻawi ʻia. netlify. I ka ulu ʻana o ka paʻakikī o ka noi, pono wau e hana i kāna ʻāpana kikowaena, ʻo ia ka mea e pono iaʻu e hoʻolālā i kaʻu hoʻolālā ponoʻī no ka hoʻohui ʻokoʻa a me ka hoʻolaha ʻana o ka papahana.
I koʻu hihia, ʻo ka palapala noi he kikowaena Express e holo ana ma ka Node.js kaiapuni, e lawelawe ana i kahi palapala noi React ʻaoʻao hoʻokahi a kākoʻo i kahi API ʻaoʻao server palekana. Ke hahai nei kēia hoʻolālā i ka hoʻolālā i hiki ke loaʻa ma keia Ke alakaʻi hōʻoia hōʻoia piha.
Ua kūkākūkā au me hoa, ʻo ia ka mea akamai i ka automation, a nīnau iā ia i kaʻu mea e pono ai e hana i mea e hana ai i ke ala aʻu i makemake ai. Ua hāʻawi mai ʻo ia iaʻu i ka manaʻo o ke ʻano o ke kahe hana automated, i wehewehe ʻia ma ka ʻāpana Goals o kēia ʻatikala. ʻO ka loaʻa ʻana o kēia mau pahuhopu he pono iaʻu e noʻonoʻo pehea e hoʻohana ai iā Docker.
Docker
ʻO Docker kahi mea hana, mahalo i ka ʻenehana containerization, e ʻae i nā noi e hoʻohele maʻalahi ʻia, hoʻoili ʻia a holo i loko o ke kaiapuni like, ʻoiai inā holo ka Docker platform i nā wahi like ʻole. ʻO ka mea mua, pono wau e kau i koʻu mau lima ma luna o nā mea hana laina kauoha Docker (CLI). aʻo ʻAʻole hiki ke kapa ʻia ke alakaʻi hoʻonohonoho Docker i maopopo loa a hoʻomaopopo ʻia, akā mai ia mea hiki iā ʻoe ke aʻo i ka hana ʻana i ka pae hoʻonohonoho mua, pono ʻoe e hoʻoiho i ka Docker Desktop (no Mac a i ʻole Windows).
ʻO Docker Hub ka mea like me GitHub no nā waihona git, a i ʻole ka hoʻopaʻa inoa npm no nā pūʻolo JavaScript. He waihona pūnaewele kēia no nā kiʻi Docker. ʻO kēia ka mea e hoʻopili ai ʻo Docker Desktop.
No laila, i mea e hoʻomaka ai me Docker, pono ʻoe e hana i ʻelua mau mea:
Ma hope o kēia, hiki iā ʻoe ke nānā inā e hana ana ka Docker CLI ma ka holo ʻana i kēia kauoha e nānā i ka mana Docker:
docker -v
A laila, e komo i loko o Docker Hub ma ke komo ʻana i kāu inoa inoa a me kāu ʻōlelo huna ke nīnau ʻia:
docker login
No ka hoʻohana ʻana iā Docker, pono ʻoe e hoʻomaopopo i nā manaʻo o nā kiʻi a me nā ipu.
▍ Nā kiʻi
ʻO ke kiʻi kekahi mea e like me ka polū i loaʻa nā ʻōlelo kuhikuhi no ka hoʻohui ʻana i ka ipu. He kiʻi paʻi hiki ʻole kēia o ka ʻōnaehana faila a me nā hoʻonohonoho. Hiki i nā mea hoʻomohala ke kaʻana like i nā kiʻi.
# Вывод сведений обо всех образах
docker images
Na kēia kauoha e hoʻopuka i kahi papaʻaina me kēia poʻomanaʻo:
REPOSITORY TAG IMAGE ID CREATED SIZE
---
A laila e nānā mākou i kekahi mau hiʻohiʻona o nā kauoha ma ke ʻano like - ʻo ka mua aia kahi kauoha me kahi ʻōlelo, a laila he laʻana o ka mea hiki ke hoʻopuka.
▍Nā pahu
ʻO kahi pahu kahi pūʻolo hoʻokō e loaʻa nā mea āpau e pono ai e holo i kahi noi. ʻO kahi noi me kēia ala e hana like ia, me ka nānā ʻole i ka ʻōnaehana: i kahi kaʻawale a i kahi kaiapuni like. ʻO ka manaʻo, ua hoʻokuʻu ʻia nā hiʻohiʻona o ke kiʻi like i nā kaiapuni like ʻole.
# Перечисление всех контейнеров
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
---
▍ Nā Leʻi
ʻO kahi hōʻailona he hōʻailona o kahi mana kikoʻī o kahi kiʻi.
▍ He kuhikuhi wikiwiki i nā kauoha Docker
Eia kahi hiʻohiʻona o kekahi mau kauoha Docker maʻamau.
Ke wehe nei i nā pahu i hoʻohana ʻole ʻia a me nā kiʻi
▍Dockerfile
ʻIke wau pehea e holo ai i kahi noi hana ma ka ʻāina. Loaʻa iaʻu kahi hoʻonohonoho Webpack i hoʻolālā ʻia e kūkulu i kahi noi React mākaukau. A laila, loaʻa iaʻu kahi kauoha e hoʻomaka i kahi kikowaena Node.js ma ke awa 5000. Penei kona ano:
npm i # установка зависимостей
npm run build # сборка React-приложения
npm run start # запуск Node-сервера
Pono e hoʻomaopopo ʻia ʻaʻohe oʻu palapala hoʻohālike no kēia mea. Eia naʻe, no nā hoʻokolohua, e hana kekahi noi Node maʻalahi.
I mea e hoʻohana ai i ka ipu, pono ʻoe e hāʻawi i nā ʻōlelo aʻoaʻo iā Docker. Hana ʻia kēia ma o kahi faila i kapa ʻia Dockerfile, aia ma ka papa kuhikuhi kumu o ka papahana. ʻO kēia faila, i ka wā mua, he mea hiki ʻole ke hoʻomaopopo.
Akā ʻo ka mea i loko e wehewehe wale, me nā kauoha kūikawā, kahi mea e like me ka hoʻonohonoho ʻana i kahi ʻano hana. Eia kekahi o kēia mau kauoha:
FROM — Hoʻomaka kēia kauoha i kahi faila. Hōʻike ia i ke kiʻi kumu i kūkulu ʻia ai ka ipu.
kope - Ke kope ʻana i nā faila mai kahi kumu kūloko i kahi pahu.
HANA — Ka hoonoho ana i ka papa kuhikuhi hana no keia mau kauoha.
# Загрузить базовый образ
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
Ma muli o ke kiʻi kumu āu e koho ai, pono paha ʻoe e hoʻokomo i nā mea hilinaʻi hou. ʻO ka mea ʻoiaʻiʻo, ua hana ʻia kekahi mau kiʻi kumu (e like me Node Alpine Linux) me ka pahuhopu o ka hana ʻana iā lākou e like me ka hiki. ʻO ka hopena, ʻaʻohe o lākou mau papahana āu e manaʻo ai.
▍Kūkulu, kāʻili ʻana a me ka holo ʻana i ka ipu
ʻO ka hui kūloko a me ka hoʻomaka ʻana o ka ipu ma hope o mākou Dockerfile, maʻalahi nā hana. Ma mua o kou pana ʻana i ke kiʻi i Docker Hub, pono ʻoe e hoʻāʻo iā ia ma ka ʻāina.
▍ ʻAhui
Pono mua ʻoe e ʻohi kiʻi, e wehewehe ana i ka inoa a me ke koho ʻana, he hōʻailona (inā ʻaʻole i kuhikuhi ʻia kahi hōʻailona, e hoʻonohonoho ʻokoʻa ka ʻōnaehana i kahi hōʻailona i ke kiʻi. latest).
# Сборка образа
docker build -t <image>:<tag> .
Ma hope o ka holo ʻana i kēia kauoha, hiki iā ʻoe ke nānā iā Docker e kūkulu i ke kiʻi.
Sending build context to Docker daemon 2.88MB
Step 1/9 : FROM node:12-alpine
---> ...выполнение этапов сборки...
Successfully built 123456789123
Successfully tagged <image>:<tag>
He mau minuke paha ke kūkulu ʻana - pili ia i ka nui o kāu mau hilinaʻi. Ke hoʻopau ʻia ke kūkulu ʻana, hiki iā ʻoe ke holo i ke kauoha docker images a nānā i ka wehewehe ʻana o kāu kiʻi hou.
REPOSITORY TAG IMAGE ID CREATED SIZE
<image> latest 123456789123 About a minute ago x.xxGB
▍ Hoʻomaka
Ua hana ʻia ke kiʻi. ʻO ia ke ʻano hiki iā ʻoe ke holo i kahi pahu ma muli o ia. No ka mea makemake wau e hiki ke komo i ka noi e holo ana i ka ipu ma localhost:5000, iaʻu, ma ka ʻaoʻao hema o lāua 5000:5000 i ke kauoha aʻe i kau ʻia 5000. Aia ma ka ʻaoʻao ʻākau ke awa ipu.
# Запуск с использованием локального порта 5000 и порта контейнера 5000
docker run -p 5000:5000 <image>:<tag>
I kēia manawa ua hana ʻia ka pahu a holo, hiki iā ʻoe ke hoʻohana i ke kauoha docker ps e nānā i ka ʻike e pili ana i kēia pahu (a i ʻole hiki iā ʻoe ke hoʻohana i ke kauoha docker ps -a, e hōʻike ana i ka ʻike e pili ana i nā pahu a pau, ʻaʻole nā mea holo wale).
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
Inā ʻoe e hele i ka helu wahi localhost:5000 — hiki iā ʻoe ke ʻike i kahi ʻaoʻao o kahi noi holo e like me ka ʻaoʻao o kahi noi e holo ana i kahi ʻano hana.
▍Ke kau inoa ʻana a me ka paʻi ʻana
I mea e hoʻohana ai i kekahi o nā kiʻi i hana ʻia ma ka kikowaena hana, pono mākou e hoʻoiho i kēia kiʻi mai Docker Hub. ʻO kēia ka mea e pono ai ʻoe e hana i kahi waihona no ka papahana ma Docker Hub. Ma hope o kēia, e loaʻa iā mākou kahi e hoʻouna ai i ke kiʻi. Pono e kapa hou ʻia ke kiʻi i hoʻomaka kona inoa me kā mākou inoa inoa Docker Hub. Pono e hahai ʻia kēia me ka inoa o ka waihona. Hiki ke kau ʻia kekahi lepili ma ka hope o ka inoa. Aia ma lalo kahi laʻana o ka inoa ʻana i nā kiʻi me ka hoʻohana ʻana i kēia hoʻolālā.
I kēia manawa hiki iā ʻoe ke kūkulu i ke kiʻi me kahi inoa hou a holo i ke kauoha docker push e kiola iā ia i ka waihona 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
Inā maikaʻi nā mea a pau, e loaʻa ke kiʻi ma Docker Hub a hiki ke hoʻouka maʻalahi i ka server a i ʻole e hoʻoili ʻia i nā mea hoʻomohala ʻē aʻe.
Nā ʻanuʻu aʻe
I kēia manawa ua hōʻoia mākou i ka noi, ma ke ʻano o kahi pahu Docker, ke holo nei ma ka ʻāina. Ua hoʻouka mākou i ka pahu i Docker Hub. ʻO ke ʻano o kēia mau mea, ua holomua maikaʻi mākou i kā mākou pahuhopu. I kēia manawa pono mākou e hoʻoponopono i ʻelua mau nīnau:
Hoʻonohonoho i kahi mea hana CI no ka hoʻāʻo ʻana a me ka lawe ʻana i ke code.
Hoʻonohonoho i ka kikowaena hana i hiki iā ia ke hoʻoiho a holo i kā mākou code.
Pono e hoʻomaopopo ʻia ma aneʻi hiki iā ʻoe ke hoʻohana i kahi hui ʻē aʻe o nā lawelawe. No ka laʻana, ma kahi o Travis CI, hiki iā ʻoe ke hoʻohana i ka CircleCI a i ʻole Github Actions. A ma kahi o DigitalOcean - AWS a i ʻole Linode.
Ua hoʻoholo mākou e hana pū me Travis CI, a ua loaʻa iaʻu kahi mea i hoʻonohonoho ʻia i kēia lawelawe. No laila, i kēia manawa e kamaʻilio pōkole wau e pili ana i ka hoʻomākaukau ʻana no ka hana.
ʻO Travis CI
He mea hana ʻo Travis CI no ka hoʻāʻo ʻana a me ka lawe ʻana i nā code. ʻAʻole makemake wau e komo i loko o nā mea paʻakikī o ka hoʻonohonoho ʻana iā Travis CI, no ka mea he ʻokoʻa kēlā me kēia papahana, ʻaʻole ia e lawe mai i ka pōmaikaʻi nui. Akā, e uhi au i nā kumu e hoʻomaka ai inā hoʻoholo ʻoe e hoʻohana iā Travis CI. Inā ʻoe e koho iā Travis CI, CircleCI, Jenkins, a i ʻole kekahi mea ʻē aʻe, e hoʻohana ʻia nā ʻano hoʻonohonoho like ma nā wahi āpau.
E hoʻomaka me Travis CI, hele i pūnaewele papahana a hana i mooolelo. A laila hoʻohui iā Travis CI me kāu moʻokāki GitHub. I ka hoʻonohonoho ʻana i ka ʻōnaehana, pono ʻoe e kuhikuhi i ka waihona āu e makemake ai e hoʻomaʻamaʻa i ka hana a hiki ke komo i laila. (Hoʻohana wau iā GitHub, akā maopopo iaʻu hiki iā Travis CI ke hoʻohui pū me BitBucket, a me GitLab, a me nā lawelawe like ʻole).
I kēlā me kēia manawa e hoʻomaka ai ʻo Travis CI, hoʻomaka ʻia ke kikowaena, e hoʻokō ana i nā kauoha i kuhikuhi ʻia i ka faila hoʻonohonoho, me ka waiho ʻana i nā lālā waihona e pili ana.
▍ ʻO ka pōʻaiapili ola
Ua kāhea ʻia ka faila hoʻonohonoho Travis CI .travis.yml a mālama ʻia i loko o ka papa kuhikuhi kumu papahana, kākoʻo i ka manaʻo o nā hanana pōʻai ola nā hana. Ua helu ʻia kēia mau hanana ma ke ʻano o ka hana ʻana:
apt addons
cache components
before_install
install
before_script
script
before_cache
after_success или after_failure
before_deploy
deploy
after_deploy
after_script
▍ Hoʻāʻo
Ma ka waihona hoʻonohonoho e hoʻonohonoho wau i ka kikowaena Travis CI kūloko. Ua koho au iā Node 12 e like me ka ʻōlelo a haʻi i ka ʻōnaehana e hoʻokomo i nā hilinaʻi e pono ai e hoʻohana iā Docker.
ʻO nā mea a pau i heluʻia i loko .travis.yml, e hoʻokō ʻia ke hana ʻia nā noi huki a pau i nā lālā āpau o ka waihona, ke ʻole ke kuhikuhi ʻia. He hiʻohiʻona pono kēia no ka mea hiki iā mākou ke hoʻāʻo i nā code āpau e hele mai i loko o ka waihona. Hōʻike kēia iā ʻoe inā mākaukau ke code e kākau ʻia i ka lālā. master, a inā paha e uhaki ia i ke kaʻina hana kūkulu. Ma kēia hoʻonohonoho honua, hoʻokomo au i nā mea āpau ma ka ʻāina, e holo i ka Webpack dev server ma ke kua (he hiʻohiʻona kēia o kaʻu workflow), a holo i nā hoʻokolohua.
Inā makemake ʻoe i kāu waihona e hōʻike i nā ikona uhi hoʻāʻo, maanei Hiki iā ʻoe ke loaʻa nā ʻōlelo aʻoaʻo pōkole no ka hoʻohana ʻana iā Jest, Travis CI a me Coveralls e hōʻiliʻili a hōʻike i kēia ʻike.
No laila eia ka ʻike o ka 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 kēia kahi e pau ai nā hana i hana ʻia no nā lālā āpau o ka waihona a no nā noi huki.
▍Hoʻohana
Ma muli o ka manaʻo ua hoʻopau kūleʻa nā hoʻokolohua automated āpau, hiki iā mākou, ʻo ia ke koho, e kau i ke code i ka kikowaena hana. No ka mea makemake mākou e hana i kēia no ke code mai ka lālā master, hāʻawi mākou i ka ʻōnaehana i nā ʻōlelo kuhikuhi kūpono i nā hoʻonohonoho hoʻonohonoho. Ma mua o kou hoʻāʻo ʻana e hoʻohana i ke code a mākou e nānā ai ma hope o kāu papahana, makemake wau e aʻo iā ʻoe e loaʻa iā ʻoe kahi palapala maoli i kapa ʻia no ka hoʻolaha ʻana.
deploy:
# Собрать Docker-контейнер и отправить его на Docker Hub
provider: script
script: bash deploy.sh
on:
branch: master
Hoʻoponopono ka palapala hoʻolālā i nā pilikia ʻelua:
E kūkulu, e kau a hoʻouna i ke kiʻi iā Docker Hub me ka hoʻohana ʻana i kahi mea hana CI (i kā mākou hihia, Travis CI).
Ke hoʻouka nei i ke kiʻi ma ke kikowaena, hoʻokuʻu i ka pahu kahiko a hoʻomaka i kahi mea hou (i kā mākou hihia, holo ke kikowaena ma ka DigitalOcean platform).
ʻO ka mea mua, pono ʻoe e hoʻonohonoho i kahi kaʻina hana maʻalahi no ke kūkulu ʻana, kau inoa ʻana, a me ka pana ʻana i ke kiʻi i Docker Hub. Ua like loa kēia me nā mea a mākou i hana ai me ka lima, koe wale nō ka pono o ka hoʻolālā no ka hāʻawi ʻana i nā hōʻailona kūʻokoʻa i nā kiʻi a me ka hoʻokomo ʻana i nā loina. Ua pilikia au i kekahi mau kiko'ī o ka palapala hoʻolālā, e like me ka hoʻolālā ʻana, ka hoʻopaʻa inoa, ka hoʻopili kī SSH, ka hoʻokumu ʻana i ka pilina SSH. Akā ʻoi aku ka maikaʻi o kaʻu keikikāne me ka bash, e like me nā mea ʻē aʻe he nui. Ua kōkua ʻo ia iaʻu e kākau i kēia palapala.
No laila, ʻo ka hapa mua o ka palapala e hoʻouka ana i ke kiʻi i Docker Hub. He mea maʻalahi kēia e hana. ʻO ka papa kuhikuhi aʻu i hoʻohana ai e hoʻohui i kahi git hash a me kahi git tag, inā loaʻa kekahi. ʻO kēia ka mea e hōʻoiaʻiʻo ai he ʻokoʻa ka tag a maʻalahi ka ʻike ʻana i ka hui i hoʻokumu ʻia ai. DOCKER_USERNAME и DOCKER_PASSWORD he mau mea hoʻohana kaiapuni i hiki ke hoʻonohonoho ʻia me ka hoʻohana ʻana i ka interface Travis CI. E hoʻoponopono maʻalahi ʻo Travis CI i ka ʻikepili koʻikoʻi i ʻole e hāʻule i nā lima hewa.
Eia ka hapa mua o ka palapala 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}
He aha ka ʻāpana ʻelua o ka palapala e pili ana i ka mea hoʻokipa āu e hoʻohana nei a pehea e hoʻonohonoho ʻia ai ka pilina me ia. I koʻu hihia, ʻoiai ke hoʻohana nei au i Digital Ocean, hoʻohana wau i nā kauoha e hoʻopili i ke kikowaena doctl. Ke hana pū me AWS, e hoʻohana ʻia ka pono aws, a laila.
ʻAʻole paʻakikī loa ka hoʻonohonoho ʻana i ke kikowaena. No laila, hoʻonohonoho wau i kahi droplet ma muli o ke kiʻi kumu. Pono e hoʻomaopopo ʻia ʻo ka ʻōnaehana aʻu i koho ai e koi i kahi hoʻonohonoho manual hoʻokahi o Docker a me kahi hoʻokuʻu lima lima o Docker. Ua hoʻohana au i ka Ubuntu 18.04 e hoʻokomo iā Docker, no laila inā ʻoe e hoʻohana ana iā Ubuntu e hana like, hiki iā ʻoe ke hahai. keia alakaʻi maʻalahi.
ʻAʻole wau e kamaʻilio ma aneʻi e pili ana i nā kauoha kikoʻī no ka lawelawe, no ka mea hiki ke ʻokoʻa kēia ʻano i nā hihia like ʻole. E hāʻawi wale wau i kahi hoʻolālā nui o ka hana e hana ʻia ma hope o ka hoʻopili ʻana ma o SSH i ke kikowaena kahi e kau ʻia ai ka papahana:
Pono mākou e ʻimi i ka ipu e holo nei a hoʻōki.
A laila pono ʻoe e hoʻomaka i kahi pahu hou ma ke kua.
Pono ʻoe e hoʻonoho i ke awa kūloko o ke kikowaena 80 - e ʻae kēia iā ʻoe e komo i ka pūnaewele ma kahi helu like example.com, me ka wehewehe ʻole ʻana i ke awa, ma mua o ka hoʻohana ʻana i kahi helu e like me example.com:5000.
ʻO ka hope, pono ʻoe e holoi i nā pahu kahiko a me nā kiʻi.
Eia ka hoʻomau o ka palapala.
# Найти 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 kekahi mau mea e hoʻolohe ai
Hiki iā ʻoe ke hoʻohui i ke kikowaena ma o SSH mai Travis CI, e ʻike ʻoe i kahi ʻōlelo aʻo e pale aku iā ʻoe mai ka hoʻomau ʻana i ka hoʻonohonoho ʻana e kali ka ʻōnaehana no ka pane a ka mea hoʻohana.
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)?
Ua aʻo au e hiki ke hoʻopili ʻia ke kī kaula i base64 i mea e mālama ai i kahi ʻano i hiki ke maʻalahi a hilinaʻi hoʻi. Ma ka pae hoʻonohonoho, hiki iā ʻoe ke hoʻokaʻawale i ke kī lehulehu a kākau iā ia i kahi faila known_hosts i mea e pau ai ka hewa maluna.
Hiki ke hoʻohana ʻia ke ala like me kahi kī pilikino i ka wā e hoʻokumu ai i kahi pilina, no ka mea pono paha ʻoe i kahi kī pilikino e komo ai i ke kikowaena. I ka hana ʻana me ke kī, pono ʻoe e hōʻoia i ka mālama paʻa ʻia i loko o kahi ʻano hoʻololi kaiapuni Travis CI a ʻaʻole i hōʻike ʻia ma nā wahi āpau.
ʻO kahi mea ʻē aʻe e hoʻomaopopo ai, pono paha ʻoe e holo i ka palapala hoʻonohonoho holoʻokoʻa ma ke ʻano hoʻokahi laina, no ka laʻana - me doctl. Pono paha kēia i kahi hoʻoikaika hou.
doctl compute ssh <droplet> --ssh-command "все команды будут здесь && здесь"
TLS/SSL a me ka hoʻouka ʻana
Ma hope o kaʻu hana ʻana i nā mea a pau i ʻōlelo ʻia ma luna nei, ʻo ka pilikia hope loa aʻu i hālāwai ai, ʻaʻole i loaʻa iā SSL ka server. No ka mea ke hoʻohana nei au i kahi kikowaena Node.js, i mea e hoʻoikaika ai e hana reverse proxy Nginx a Let's Encrypt, pono ʻoe e tinker nui.
ʻAʻole wau i makemake e hana lima i kēia hoʻonohonoho SSL, no laila ua hana wau i kahi mea kaulike ukana a hoʻopaʻa i kāna mau kikoʻī ma DNS. I ka hihia o DigitalOcean, no ka laʻana, ʻo ka hana ʻana i kahi palapala hōʻoia i hoʻopaʻa inoa ponoʻī ʻia ma luna o ka mea kaulike ukana he hana maʻalahi, manuahi a wikiwiki hoʻi. Loaʻa i kēia ala ka pōmaikaʻi hou e maʻalahi ai ka hoʻonohonoho ʻana i ka SSL ma nā kikowaena lehulehu e holo ana ma hope o kahi mea kaulike ukana inā pono. Hāʻawi kēia i nā kikowaena iā lākou iho ʻaʻole e "noʻonoʻo" e pili ana i ka SSL, akā i ka manawa like e hoʻohana i ke awa e like me ka mea maʻamau 80. No laila ʻoi aku ka maʻalahi a ʻoi aku ka maʻalahi o ka hoʻonohonoho ʻana i ka SSL ma luna o kahi mea kaulike ma mua o nā ala ʻē aʻe o ka hoʻonohonoho SSL.
I kēia manawa hiki iā ʻoe ke pani i nā awa a pau ma ke kikowaena e ʻae i nā pilina e komo mai - koe wale ke awa 80, hoʻohana ʻia e kamaʻilio me ka mea hoʻohālikelike ukana, a me ke awa 22 no SSH. ʻO ka hopena, ʻaʻole e hāʻule ka hoʻāʻo e komo pololei i ke kikowaena ma nā awa ʻē aʻe.
Nā hopena
Ma hope o kaʻu hana ʻana i nā mea a pau aʻu i kamaʻilio ai ma kēia mea, ʻaʻole i makaʻu hou ka Docker platform a me nā manaʻo o nā kaulahao CI / CD automated iaʻu. Ua hiki iaʻu ke hoʻonohonoho i kahi kaulahao hoʻohui mau, kahi e hoʻāʻo ʻia ai ke code ma mua o ka hoʻokomo ʻana i ka hana a ua kau ʻia ke code ma ke kikowaena. He mea hou kēia iaʻu, a maopopo iaʻu aia nā ala e hoʻomaikaʻi ai i kaʻu kaʻina hana automated a hoʻomaikaʻi maikaʻi. No laila, inā he manaʻo kou no kēia mea, e ʻoluʻolu e haʻi mai iaʻu. mai iaʻu ike. Manaʻo wau ua kōkua kēia ʻatikala iā ʻoe i kāu mau hana. Makemake wau e manaʻoʻiʻo ma hope o ka heluhelu ʻana, ua aʻo ʻoe e like me kaʻu i aʻo ai i ka ʻike ʻana i nā mea a pau aʻu i kamaʻilio ai.
PS I kā mākou wahi kuai he kii Docker, hiki ke hoʻokomo i hoʻokahi kaomi. Hiki iā ʻoe ke nānā i ka hana o nā ipu ma VPS. Hāʻawi ʻia nā mea kūʻai hou a pau i 3 mau lā o ka hoʻāʻo ʻana me ka uku ʻole.
E nā mea heluhelu aloha! Ke hoʻohana nei ʻoe i nā ʻenehana CI/CD i kāu mau papahana?