Te hanga mekameka CI/CD me te mahi aunoa me Docker

I tuhia e au aku paetukutuku tuatahi i te mutunga o te 90s. I tera wa he tino ngawari ki te whakauru i a raatau ki te raupapa mahi. He tūmau Apache i runga i etahi manaaki tiritahi, ka taea e koe te takiuru ki tenei tūmau ma te FTP ma te tuhi i tetahi mea penei ftp://ftp.example.com. Na me whakauru koe i to ingoa me to kupuhipa me te tuku i nga konae ki te tūmau. He rereke nga wa, he maamaa nga mea katoa i tera wa i enei wa.

Te hanga mekameka CI/CD me te mahi aunoa me Docker

I roto i nga tau e rua mai i tera wa, kua rereke nga mea katoa. Kua uaua ake nga paetukutuku; me whakahiato i mua i te tukunga ki te hanga. Kotahi te tūmau kotahi ka maha ngā tūmau e rere ana i muri i ngā taurite kawenga, ā, ka noho noa te whakamahi i ngā pūnaha whakahaere putanga.

Mo taku kaupapa whaiaro he whirihoranga motuhake taku. A i mohio ahau me whai kaha ahau ki te tuku i te waahi ki te hanga ma te mahi kotahi noa: te tuhi waehere ki tetahi peka master i runga i GitHub. I tua atu, i mohio ahau ki te whakarite i te mahi o taku tono paetukutuku iti, kaore au i pai ki te whakahaere i tetahi roopu Kubernetes nui, ki te whakamahi i te hangarau Docker Swarm, ki te pupuri ranei i tetahi waka o nga kaitoro me nga pene, nga kaihoko me era atu momo. matatini. Kia tutuki ai te whainga kia ngawari te mahi, me mohio ahau ki te CI/CD.

Mena he kaupapa iti taau (i tenei keehi, he kaupapa Node.js) ka hiahia koe ki te mohio me pehea te whakaaunoa i te tukunga o tenei kaupapa, me te whakarite kia rite tonu nga mea e rongoa ana i roto i te putunga ki nga mahi e mahia ana, katahi ahau whakaaro pea kei te pirangi koe ki tenei tuhinga.

Nga whakaritenga

Ko te kaipanui o tenei tuhinga e tika ana kia mohio ki te rarangi whakahau me te tuhi i nga tuhinga a Bash. I tua atu, ka hiahia ia ki nga kaute Travis CI и Hub tauranga.

Ngā Whāinga

E kore ahau e kii ko tenei tuhinga ka taea te kiia he "tutorial". He tuhinga ake tenei e korero ana ahau mo nga mea i akohia e au me te whakaahua i te tukanga e pai ana ki a au mo te whakamatautau me te tuku waehere ki te whakaputa, ka mahia i roto i te tuku aunoa.

Koinei te mutunga o taku rerenga mahi.

Mo te waehere i tukuna ki tetahi peka putunga engari master, ka mahia nga mahi e whai ake nei:

  • Ka timata te kaupapa hanga i runga i a Travis CI.
  • Ko nga waahanga katoa, te whakauru me nga whakamatautau mutunga-ki-mutunga ka mahia.

Mo te waehere anake ka taka ki roto master, ka mahia enei e whai ake nei:

  • Ko nga mea katoa i whakahuahia i runga ake nei, me ...
  • Te hanga i tetahi ahua Docker i runga i te waehere o naianei, nga tautuhinga me te taiao.
  • Te tuku whakaahua ki Docker Hub.
  • Hononga ki te tūmau whakaputa.
  • Te tuku whakaahua mai i Docker Hub ki te tūmau.
  • Ka whakamutua te ipu o naianei ka timata i tetahi mea hou i runga i te ahua hou.

Mena kaore koe e mohio mo Docker, whakaahua me nga ipu, kaua e manukanuka. Ka korerotia e ahau ki a koe nga mea katoa.

He aha te CI/CD?

Ko te whakapotonga CI/CD e tu ana mo te "whakauru haere tonu / tuku haere tonu."

▍Ko te whakauru tonu

Ko te tuitui haere tonu he tukanga e mahi ai nga kaiwhakawhanake ki te whakauru ki te putunga waehere puna matua o te kaupapa (te nuinga he peka master). I te wa ano, ka whakapumautia te kounga o te waehere ma te whakamatautau aunoa.

▍Te tuku haere tonu

Ko te tukunga haere tonu ko te whakaurunga aunoa o te waehere ki roto i te hanga. Ko te waahanga tuarua o te acronym CI/CD i etahi wa ka kiia he "tuku tonu." He rite tonu tenei ki te "tuku haere tonu", engari ko te "tuku haere tonu" e tohu ana me whakaū a ringa i nga huringa i mua i te tiimata i te mahi tuku kaupapa.

Getting Started

Ko te taupānga i whakamahia e au ki te ako i enei mea katoa e kiia ana TakeNote. He kaupapa tukutuku tenei e mahi ana ahau, i hangaia hei tuhi tuhipoka. I te tuatahi ka ngana ahau ki te mahi JAMStack-kaupapa, he tono-mutunga noa ranei kaore he kaimau, kia pai ai te manaaki i nga mana whakahaere me te tuku kaupapa e tukuna ana. Whakamaungia. I te pikinga ake o te uaua o te tono, me hanga e au tana waahanga tūmau, ko te tikanga me hanga e au taku ake rautaki mo te whakauru aunoa me te tuku aunoa o te kaupapa.

I roto i taku take, ko te tono he tūmau Express e rere ana i roto i te taiao Node.js, e mahi ana i te tono React kotahi-wharangi me te tautoko i te API taha-tūmau haumaru. Ko tenei hoahoanga e whai ana i te rautaki ka kitea i roto hoatu He aratohu motuhēhēnga tāpae katoa.

I korero ahau ki a hoa, he tohunga aunoa, ka patai ki a ia he aha taku mahi kia pai ai taku hiahia. I homai e ia ki ahau te ahua o te rerengamahi aunoa, kua tuhia ki te waahanga Whainga o tenei tuhinga. Ko te whai i enei whainga ko te tikanga me mohio au me pehea te whakamahi i a Docker.

Docker

He taputapu a Docker, he mihi ki te hangarau whakaurunga, ka taea e nga tono te tohatoha ngawari, te tohatoha me te whakahaere i roto i te taiao kotahi, ahakoa ko te papaa Docker ake e rere ana i roto i nga taiao rereke. Tuatahi, me toro atu oku ringa ki nga taputapu raina whakahau a Docker (CLI). Tohutohu Ko te aratohu whakaurunga a Docker kaore e taea te kii he tino marama me te maarama, engari mai i tera ka taea e koe te ako mo te tango i te taahiraa whakauru tuatahi, me tango e koe te Papamahi Docker (mo Mac, Windows ranei).

He rite tonu te Docker Hub ki te GitHub mo nga putunga git, rehita ranei npm mo nga kete JavaScript. He putunga ipurangi tenei mo nga whakaahua Docker. Koinei te mea e hono ana a Docker Desktop.

Na, ki te tiimata me Docker, me mahi e koe nga mea e rua:

I muri i tenei, ka taea e koe te tirotiro mena kei te mahi te Docker CLI ma te whakahaere i te whakahau e whai ake nei hei tirotiro i te putanga Docker:

docker -v

Whai muri, takiuru ki Docker Hub ma te whakauru i to ingoa kaiwhakamahi me to kupuhipa ina patai ana:

docker login

Hei whakamahi i a Docker, me mohio koe ki nga ariā o nga whakaahua me nga ipu.

▍Whakaahua

He ahua te ahua o te ahua o te mahere e mau ana nga tohutohu mo te whakahiato i te ipu. He whakaahua tonu tenei o te punaha konae me nga tautuhinga o te tono. Ka taea e nga kaihanga ngawari te tiri whakaahua.

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

Ma tenei tono e whakaputa he ripanga me te pane e whai ake nei:

REPOSITORY     TAG     IMAGE ID     CREATED     SIZE
---

I muri mai ka titiro tatou ki etahi tauira o nga whakahau i roto i te ahua rite - i te tuatahi ko te whakahau me te korero, katahi ano he tauira o nga mea ka taea e ia te whakaputa.

▍Ipu

Ko te ipu he kete whakahaere kei roto nga mea katoa e hiahiatia ana hei whakahaere i tetahi tono. Ko te tono me tenei huarahi ka mahi i nga wa katoa, ahakoa he aha nga hanganga: i roto i te taiao taratahi me te taiao kotahi. Ko te tohu ko nga tauira o te ahua kotahi ka whakarewahia ki nga taiao rereke.

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

▍Tautohu

Ko te tohu he tohu mo te putanga motuhake o te ahua.

▍He tohutoro tere ki nga whakahau Docker

Anei tetahi tirohanga o etahi whakahau Docker e whakamahia ana.

rōpū

Horopaki

pānga

hanga docker

Atahanga

Te hanga whakaahua mai i te Dockerfile

tohu docker

Atahanga

Tohunga whakaahua

whakapakoko pikitia

Atahanga

Whakararangi whakaahua

ka oma te mahi

Putea

Te whakahaere ipu i runga i te ahua

pana waka

Atahanga

Te tuku whakaahua ki te rehita

toia waka

Atahanga

Kei te utaina he whakaahua mai i te rehita

haukene ps

Putea

Whakararangi ipu

tapahi pūnaha docker

Atahanga/Ipu

Te tango i nga ipu me nga whakaahua kaore i whakamahia

▍Dockerfile

E mohio ana ahau ki te whakahaere i tetahi tono whakangao i te rohe. He whirihoranga Webpack taku i hangaia hei hanga i tetahi tono React kua rite. I muri mai, he whakahau taku e timata ana i te Node.js i runga i te tauranga 5000. He penei te ahua:

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

Me tohu kaore au he tauira tono mo tenei rauemi. Engari i konei, mo nga whakamatautau, ka mahi tetahi tono Node ngawari.

Hei whakamahi i te ipu, me tuku tohutohu ki a Docker. Ka mahia tenei ma te konae e kiia nei Dockerfile, kei roto i te whaiaronga pakiaka o te kaupapa. Ko tenei konae, i te tuatahi, he ahua kore e marama.

Engari ko nga mea kei roto e whakaahua ana, me nga whakahau motuhake, tetahi mea e rite ana ki te whakatu i tetahi taiao mahi. Anei etahi o enei whakahau:

  • MEI — Ma tenei whakahau ka tiimata he konae. Ka tohuhia te ahua o te turanga i hangaia ai te ipu.
  • Tuhinga — Te kape i nga konae mai i te puna rohe ki te ipu.
  • KAUPAPA KAUPAPA — Te whakatakoto i te raarangi mahi mo nga whakahau e whai ake nei.
  • RUN - Whakahaerehia nga whakahau.
  • WHAKAMAHI — Tautuhinga tauranga.
  • TOHUTOHU — Tohu o te whakahau kia mahia.

Dockerfile penei pea te ahua:

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

I runga i te ahua o te ahua ka tohua e koe, ka hiahia pea koe ki te whakauru i etahi atu taapiri. Ko te meka ko etahi o nga whakaahua taketake (penei i te Node Alpine Linux) i hangaia me te whainga kia rite ki a raatau. Ko te mutunga, karekau pea etahi o nga kaupapa e tumanakohia ana e koe.

▍Te hanga, te tohu me te whakahaere i te ipu

Ko te huihuinga o te rohe me te whakarewatanga o te ipu kei muri i a maatau Dockerfile, he tino ngawari nga mahi. I mua i to pana i te ahua ki Docker Hub, me whakamatau koe i te rohe.

▍ Huihuinga

Tuatahi me kohikohi koe image, whakapūtā i te ingoa me te tohu tohu (mehemea karekau he tohu i tohua, ka tohua aunoatia e te punaha he tohu ki te ahua latest).

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

Whai muri i te whakahaere i tenei whakahau, ka taea e koe te maataki i a Docker te hanga i te ahua.

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

Ka rua meneti pea te hanga - kei runga i te maha o nga whakawhirinaki kei a koe. Kia oti te hanga, ka taea e koe te whakahaere i te whakahau docker images ka titiro ki te whakaahuatanga o to ahua hou.

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

▍Whakarewa

Kua hanga te ahua. Ko te tikanga ka taea e koe te whakahaere ipu i runga ano. No te mea e hiahia ana ahau ki te uru ki te tono e rere ana i roto i te ipu i localhost:5000, ko au, kei te taha maui o te tokorua 5000:5000 i roto i te whakahau i muri i whakauruhia 5000. Kei te taha matau ko te tauranga ipu.

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

Inaianei kua hangaia te ipu me te rere, ka taea e koe te whakamahi i te whakahau docker ps ki te titiro ki nga korero mo tenei ipu (ka taea ranei e koe te whakamahi i te whakahau docker ps -a, e whakaatu ana i nga korero mo nga ipu katoa, kaua e rere noa).

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

Mena ka haere koe inaianei ki te wahitau localhost:5000 — ka kite koe i tetahi wharangi o te tono e rere ana he rite tonu te ahua ki te wharangi o te tono e rere ana i roto i te taiao whakaputa.

▍Te tohu me te whakaputa

Hei whakamahi i tetahi o nga whakaahua i hangaia i runga i te tuumau whakangao, me kaha ki te tango i tenei ahua mai i Docker Hub. Ko te tikanga me hanga e koe he putunga mo te kaupapa ki Docker Hub. I muri i tenei, ka whai waahi taatau ki te tuku i te ahua. Me whakaingoa ano te ahua kia timata ai tona ingoa ki to tatou ingoa ingoa Docker Hub. Me whai i tenei ko te ingoa o te putunga. Ka taea te whakanoho tetahi tohu ki te pito o te ingoa. Kei raro nei he tauira o te whakaingoa whakaahua ma te whakamahi i tenei kaupapa.

Inaianei ka taea e koe te hanga i te ahua me te ingoa hou ka whakahaere i te whakahau docker push ki te pana ki te whare pupuri 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

Mena ka pai nga mea katoa, ka waatea te ahua ki runga i te Docker Hub ka ngawari te tuku ki te kaimau, ka whakawhitia ranei ki etahi atu kaihanga.

Nga mahi ka whai ake

I tenei wa kua whakamanahia e matou ko te tono, i te ahua o te ipu Docker, kei te rere a rohe. Kua tukuna e matou te ipu ki Docker Hub. Ko te tikanga o tenei katoa kua tino pai te ahunga whakamua ki ta tatou whainga. Inaianei me whakaoti e matou etahi atu patai e rua:

  • Te whakatu i tetahi taputapu CI mo te whakamatautau me te tuku waehere.
  • Te whakatu i te tūmau whakaputa kia taea ai e ia te tango me te whakahaere i to maatau waehere.

I roto i to maatau, ka whakamahia e matou Travis CI. Hei tūmau - DitigalOcean.

Me tohu ko konei ka taea e koe te whakamahi i tetahi atu huinga o nga ratonga. Hei tauira, hei utu mo Travis CI, ka taea e koe te whakamahi i nga Mahi CircleCI, Github ranei. A hei utu mo DigitalOcean - AWS, Linode ranei.

I whakatau matou ki te mahi tahi me Travis CI, a kua oti kee au tetahi mea whirihora i tenei ratonga. Na reira, inaianei ka korero poto ahau mo te whakarite mo te mahi.

Travis CI

Ko Travis CI he taputapu mo te whakamatautau me te tuku waehere. Kaore au e pai ki te haere ki roto i nga riipene o te whakatu i a Travis CI, na te mea he mea motuhake ia kaupapa, a, kaore tenei e whai hua nui. Engari ka hipokina e ahau nga mea taketake kia timata koe ki te whakatau koe ki te whakamahi i a Travis CI. Ahakoa ka whiriwhiri koe i a Travis CI, CircleCI, Jenkins, tetahi atu mea ranei, ka whakamahia nga tikanga whirihoranga rite ki nga waahi katoa.

Hei tiimata me Travis CI, haere ki paetukutuku kaupapa me te hanga i tetahi kaute. Na ka whakauruhia a Travis CI me to putea GitHub. I te wa e whakarite ana koe i te punaha, me tohu e koe te putunga e hiahia ana koe ki te whakaaunoa i te mahi me te uru ki reira. (Ka whakamahi ahau i a GitHub, engari e mohio ana ahau ka taea e Travis CI te whakauru ki a BitBucket, me GitLab, me etahi atu ratonga rite).

Ia wa ka timata a Travis CI, ka whakarewahia he tūmau e whakahaere ana i nga whakahau kua tohua i roto i te konae whirihoranga, tae atu ki te tuku i nga manga putunga e pa ana.

▍Ko te huringa ora o te mahi

I karangahia te konae whirihoranga Travis CI .travis.yml me te rongoa i roto i te raarangi pakiaka kaupapa, e tautoko ana i te kaupapa o nga huihuinga huringa ora mahi. Kua whakarārangihia enei kaupapa i roto i te raupapa i puta ai:

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

▍Whakamātautau

I roto i te konae whirihoranga ka whirihora e ahau te tūmau Travis CI o te rohe. I tohua e ahau te Node 12 hei reo me te kii ki te punaha ki te whakauru i nga whakawhirinaki e hiahiatia ana hei whakamahi i a Docker.

Ko nga mea katoa kua tohua ki roto .travis.yml, ka mahia ina tukuna nga tono kume katoa ki nga peka katoa o te putunga, mena kaore i tohua. He waahanga whai hua tenei na te mea ka taea e taatau te whakamatautau i nga waehere katoa ka uru mai ki roto i te putunga. Ma tenei ka mohio koe mena kua reri te waehere kia tuhia ki te peka. master, a mehemea ka pakaru te mahi hanga kaupapa. I roto i tenei whirihoranga o te ao, ka whakauruhia e ahau nga mea katoa i te rohe, ka whakahaere i te Webpack dev server i te papamuri (he ahuatanga tenei o taku rerenga mahi), ka whakahaere i nga whakamatautau.

Mena kei te pirangi koe kia whakaatuhia e to putunga nga tohu e tohu ana i te kapinga whakamatautau, konei Ka kitea e koe nga tohutohu poto mo te whakamahi i a Jest, Travis CI me Coveralls ki te kohikohi me te whakaatu i enei korero.

Na konei ko te ihirangi o te kōnae .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

I konei ka mutu nga mahi e mahia ana mo nga peka katoa o te putunga me nga tono toia.

▍Whakamahinga

I runga i te whakaaro kua oti pai nga whakamatautau aunoa, ka taea e taatau, he mea kowhiri, te tuku i te waehere ki te kaituku mahi. I te mea e hiahia ana matou ki te mahi i tenei mo te waehere mai i te peka anake master, ka hoatu e matou ki te punaha nga tohutohu e tika ana i roto i nga tautuhinga tuku. I mua i to ngana ki te whakamahi i te waehere ka tirohia e matou i muri mai i roto i to kaupapa, e hiahia ana ahau ki te whakatupato i a koe me whai koe i tetahi tuhinga tuhi e kiia ana mo te tuku.

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

E rua nga raruraru e whakaotihia ana e te tuhinga whakatakotoranga:

  • Hangaia, tohuhia me te tuku i te ahua ki Docker Hub ma te whakamahi i tetahi taputapu CI (i roto i ta maatau take, ko Travis CI).
  • Ka utaina te ahua ki runga i te tūmau, ka aukati i te ipu tawhito me te tiimata i tetahi mea hou (i to maatau, ka rere te tūmau i runga i te papaaho DigitalOcean).

Tuatahi, me whakarite e koe he tukanga aunoa mo te hanga, te tohu, me te pana i te ahua ki Docker Hub. He rite katoa tenei ki nga mahi kua mahia e matou i a maatau, engari me whai rautaki mo te tuku tohu ahurei ki nga whakaahua me te whakauru aunoa. I uaua ahau ki etahi taipitopito o te tuhinga whakatakotoranga, penei i te rautaki tohu, te takiuru, te whakawaehere matua SSH, te whakatu hononga SSH. Engari he waimarie he tino pai taku hoa ki te bash, pera me era atu mea. I awhina ia i ahau ki te tuhi i tenei tuhinga.

Na, ko te waahanga tuatahi o te tuhinga ko te tuku i te ahua ki Docker Hub. He tino ngawari tenei ki te mahi. Ko te kaupapa tohu i whakamahia e au ko te whakakotahi i te git hash me te git tag, mena kei te noho. Ma tenei ka whakarite he ahurei te tohu me te ngawari ki te tautuhi i te huihuinga i tu ai. DOCKER_USERNAME и DOCKER_PASSWORD he taurangi taiao kaiwhakamahi ka taea te whakarite ma te whakamahi i te atanga Travis CI. Ka tukatuka aunoa a Travis CI i nga raraunga tairongo kia kore ai e taka ki nga ringa he.

Anei te wahanga tuatahi o te tuhinga 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 te waahanga tuarua o te tuhinga ka whakawhirinaki katoa ki te kaihautu e whakamahia ana e koe me te pehea o te hononga ki a ia. I taku take, i te mea ka whakamahi ahau i te Moana Mamati, ka whakamahi au i nga whakahau hei hono atu ki te tūmau doctl. Ka mahi tahi me AWS, ka whakamahia te taputapu aws, me etahi atu.

Ko te whakarite i te tūmau ehara i te mea tino uaua. Na, ka whakaturia e ahau he maturuturu i runga i te ahua o te turanga. Me tohu ko te punaha i whiriwhiria e au me whakauru a Docker kotahi-wa me te whakarewanga a-ringa kotahi o Docker. I whakamahia e ahau te Ubuntu 18.04 ki te whakauru i a Docker, na mena kei te whakamahi ano koe i te Ubuntu ki te mahi pera, ka taea e koe te whai. tenei aratohu ngawari.

Kaore au e korero i konei mo nga whakahau motuhake mo te ratonga, na te mea ka rereke tenei ahuatanga ki nga keehi rereke. Ka hoatu noa e ahau he mahere whanui mo te mahi i muri i te hono ma te SSH ki te tūmau ka tukuna te kaupapa:

  • Me kimihia te ipu e rere ana i tenei wa ka mutu.
  • Na ka hiahia koe ki te whakarewa i tetahi ipu hou ki te papamuri.
  • Me whakarite e koe te tauranga paetata o te tūmau ki 80 - ma tenei ka taea e koe te uru ki te waahi ki tetahi wahitau penei example.com, me te kore e tohu i te tauranga, kaua ki te whakamahi i tetahi wahitau penei example.com:5000.
  • Ka mutu, me whakakore nga ipu tawhito me nga whakaahua.

Anei te haere tonu o te tuhinga.

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

Ko etahi mea hei aro

Ka taea pea ka hono atu koe ki te tūmau ma te SSH mai i a Travis CI, ka kite koe i te whakatupato ka aukati i a koe ki te haere tonu ki te whakauru i te mea ka tatari te punaha mo te whakautu a te kaiwhakamahi.

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

I ako ahau ka taea te whakawaehere i te taviri aho ki te base64 kia ora ai i roto i te ahua e pai ai te mahi me te pono. I te wa whakaurunga, ka taea e koe te wetewete i te taviri whanui me te tuhi ki tetahi konae known_hosts hei whakakore i te hapa o runga ake nei.

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

Hei mahi, penei pea te ahua o tenei whakahau:

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

A koinei te mea ka puta - he aho kua whakawaeheretia base64:

MTIzLjQ1LjY3Ljg5IHNzaC1yc2EgQUFBQUIzTnphQzF5YzJFQUFBQUJJd0FBQVFFQWtsT1Vwa0RIcmZIWTE3U2JybVRJcE5MVEdLOVRqb20vQldEU1UKR1BsK25hZnpsSERUWVc3aGRJNHlaNWV3MThKSDRKVzlqYmhVRnJ2aVF6TTd4bEVMRVZmNGg5bEZYNVFWa2JQcHBTd2cwY2RhMwpQYnY3a09kSi9NVHlCbFdYRkNSK0hBbzNGWFJpdEJxeGlYMW5LaFhwSEFac01jaUxxOFY2UmpzTkFRd2RzZE1GdlNsVksvN1hBCnQzRmFvSm9Bc25jTTFROXg1KzNWMFd3NjgvZUlGbWIxenVVRmxqUUpLcHJyWDg4WHlwTkR2allOYnk2dncvUGIwcndlcnQvRW4KbVorQVc0T1pQblRQSTg5WlBtVk1MdWF5ckQyY0U4NlovaWw4YitndzNyMysxbkthdG1Ja2puMnNvMWQwMVFyYVRsTXFWU3NieApOclJGaTl3cmYrTTdRPT0geW91QGV4YW1wbGUuY29tCg==

Anei te whakahau kua whakahuatia ake nei

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

Ka taea te whakamahi i taua huarahi me tetahi kii motuhake i te wa e whakatuu ana i tetahi hononga, na te mea ka hiahia pea koe ki tetahi taviri motuhake hei uru atu ki te tūmau. I te wa e mahi ana koe me te ki, me whakarite kia noho humarie ki roto i te taurangi taiao Travis CI me te kore e whakaatuhia ki hea.

Ko tetahi atu mea hei tohu ko te mea ka hiahia koe ki te whakahaere i te tuhinga tukunga katoa hei raina kotahi, hei tauira - me doctl. Me kaha ake pea tenei.

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

TLS/SSL me te Taurite Uta

I muri i taku mahi i nga mea katoa i whakahuahia i runga ake nei, ko te raru whakamutunga i pa ki a au ko te mea kaore he SSL i te tūmau. I te mea ka whakamahi ahau i te tūmau Node.js, kia kaha ai mahi takawaenga whakamuri Nginx me Kia Whakamuna, me kaha koe ki te tarai.

Kaore au i tino hiahia ki te mahi i enei whirihoranga SSL katoa ma te ringa, na reira i hanga noa e ahau he taurite kawenga me te tuhi i ona korero ki te DNS. I roto i te take o DigitalOcean, hei tauira, ko te hanga i tetahi tiwhikete haina-whaiaro whakahou-aunoa i runga i te taurite kawenga he tikanga ngawari, kore utu me te tere. Ko tenei huarahi he painga taapiri he mea ngawari ki te whakarite SSL ki runga i nga kaitoro maha e rere ana i muri i te taurite kawenga mena ka hiahiatia. Ma tenei ka taea e nga kaitoro tonu te "whakaaro" mo te SSL, engari i te wa ano ka whakamahi i te tauranga penei i mua 80. Na ko te whakarite SSL i runga i te taurite kawenga he maamaa ake, he pai ake i nga tikanga rereke mo te whakatu SSL.

Inaianei ka taea e koe te kati nga tauranga katoa i runga i te tūmau e whakaae ana ki nga hononga taumai - haunga te tauranga 80, whakamahia ki te whakawhitiwhiti korero ki te taurite kawenga, me te tauranga 22 mo SSH. Ko te mutunga, ko te ngana ki te uru tika ki te tūmau i runga i nga tauranga i tua atu i enei e rua ka kore.

Ngā putanga

I muri i taku mahi i nga mea katoa i korerohia e au mo tenei korero, kaore te papaa Docker me nga ariā o nga mekameka CI/CD aunoa i mataku i ahau. I taea e au te whakatu i tetahi mekameka whakauru tonu, i te waa ka whakamatauhia te waehere i mua i te urunga ki roto i te whakaputanga ka tukuna aunoatia te waehere ki runga i te tūmau. He mea hou tonu tenei ki ahau, a ka mohio ahau he huarahi hei whakapai ake i taku rerengamahi aunoa kia pai ake ai. Na, mena kei a koe etahi whakaaro mo tenei take, tena koa whakamarama mai. ahau mohio. Kei te tumanako ahau kua awhina tenei tuhinga ki a koe i roto i o mahi. E hiahia ana ahau ki te whakapono i muri i te panui, i ako koe i nga mea katoa i akohia e au i a au e whakaaro ana ki nga mea katoa i korero ai ahau i roto.

PS Ki ta maatau kainga hokohoko he ahua Docker, ka taea te whakauru ki te paato kotahi. Ka taea e koe te tirotiro i te mahi o nga ipu i VPS. Ka whakawhiwhia ki nga kaihoko hou nga ra 3 mo te whakamatautau kore utu.

E nga kaipānui aroha! Kei te whakamahi koe i nga hangarau CI/CD i roto i o kaupapa?

Te hanga mekameka CI/CD me te mahi aunoa me Docker

Source: will.com

Tāpiri i te kōrero