Nggawe rantai CI / CD lan ngotomatisasi karya karo Docker

Aku nulis situs web pisanan ing pungkasan taun 90-an. Mangkono iku gampang banget kanggo nggawe supaya bisa digunakake. Ana server Apache ing sawetara hosting sing dienggo bareng, sampeyan bisa mlebu menyang server iki liwat FTP kanthi nulis kaya ftp://ftp.example.com. Banjur sampeyan kudu ngetik jeneng lan sandhi lan upload file menyang server. Ana wektu sing beda-beda, kabeh luwih gampang tinimbang saiki.

Nggawe rantai CI / CD lan ngotomatisasi karya karo Docker

Ing rong dekade wiwit iku, kabeh wis diganti akeh. Situs web wis dadi luwih rumit; kudu dirakit sadurunge dirilis menyang produksi. Siji server dadi akeh server sing mlaku ing mburi penyeimbang beban, lan panggunaan sistem kontrol versi dadi umum.

Kanggo proyek pribadi, aku duwe konfigurasi khusus. Lan aku ngerti yen aku butuh kemampuan kanggo nyebarake situs kasebut ing produksi kanthi nindakake mung siji tumindak: nulis kode menyang cabang master ing GitHub. Kajaba iku, aku ngerti manawa kanggo mesthekake operasi aplikasi web cilik, aku ora pengin ngatur kluster Kubernetes sing gedhe, utawa nggunakake teknologi Docker Swarm, utawa njaga armada server kanthi pod, agen lan liya-liyane. kerumitan. Kanggo nggayuh tujuan nggawe karya kanthi gampang, aku kudu ngerti CI / CD.

Yen sampeyan duwe proyek cilik (ing kasus iki, proyek Node.js) lan sampeyan pengin ngerti carane ngotomatisasi penyebaran proyek iki, nalika mesthekake yen apa sing disimpen ing gudang persis cocog karo apa sing dianggo ing produksi, banjur aku mikir sampeyan bisa uga kasengsem ing artikel iki.

Prasyarat

Sing maca artikel iki samesthine duwe pangerten dhasar babagan baris perintah lan nulis skrip Bash. Kajaba iku, dheweke butuh akun Travis C.I. и Hub Docker.

Tujuane

Aku ora bakal ujar manawa artikel iki tanpa syarat bisa diarani "tutorial". Iki luwih saka document kang aku pirembagan bab apa aku wis sinau lan njlèntrèhaké proses sing cocog karo kula kanggo testing lan kode deploying kanggo produksi, dileksanakake ing siji pass otomatis.

Iki minangka alur kerjaku.

Kanggo kode sing dikirim menyang cabang gudang kajaba master, tumindak ing ngisor iki ditindakake:

  • Proyek dibangun ing Travis CI diwiwiti.
  • Kabeh unit, integrasi lan tes end-to-end ditindakake.

Mung kanggo kode sing tiba menyang master, ing ngisor iki ditindakake:

  • Kabeh sing kasebut ing ndhuwur, plus ...
  • Nggawe gambar Docker adhedhasar kode, setelan lan lingkungan saiki.
  • Masang gambar menyang Docker Hub.
  • Sambungan menyang server produksi.
  • Ngunggah gambar saka Docker Hub menyang server.
  • Mungkasi wadhah saiki lan miwiti sing anyar adhedhasar gambar anyar.

Yen sampeyan ora ngerti apa-apa babagan Docker, gambar lan wadhah, aja padha sumelang. Aku bakal ngandhani kabeh babagan iki.

Apa CI/CD?

Singkatan CI/CD yaiku "integrasi terus-terusan / penyebaran terus-terusan."

▍ Integrasi terus-terusan

Integrasi terus-terusan minangka proses ing ngendi pangembang nggawe komitmen menyang repositori kode sumber utama proyek (biasane cabang master). Ing wektu sing padha, kualitas kode dijamin liwat testing otomatis.

▍Panyebaran terus-terusan

Penyebaran terus-terusan yaiku panyebaran kode sing kerep lan otomatis menyang produksi. Bagean kapindho akronim CI/CD kadhangkala dieja minangka "pangiriman terus-terusan." Sejatine iki padha karo "penyebaran terus-terusan", nanging "pangiriman terus-terusan" tegese kudu konfirmasi owah-owahan kanthi manual sadurunge miwiti proses penyebaran proyek.

Miwiti

Aplikasi sing digunakake kanggo sinau kabeh iki diarani TakeNote. Iki minangka proyek web sing dakgarap, dirancang kanggo njupuk cathetan. Ing kawitan aku nyoba kanggo nindakake JAMStack-proyek, utawa mung aplikasi ngarep tanpa server, supaya bisa njupuk kauntungan saka hosting standar lan kemampuan panyebaran proyek sing ditawakake netlify. Nalika kerumitan aplikasi saya tambah, aku kudu nggawe bagean server, sing tegese aku kudu ngramu strategi dhewe kanggo integrasi otomatis lan penyebaran otomatis proyek kasebut.

Ing kasusku, aplikasi kasebut minangka server Express sing mlaku ing lingkungan Node.js, nglayani aplikasi React siji-kaca lan ndhukung API sisih server sing aman. Arsitektur iki nderek strategi sing bisa ditemokake ing iki Pandhuan otentikasi tumpukan lengkap.

Aku konsultasi karo kanca, sing ahli otomatisasi, lan takon apa sing kudu daklakoni supaya kabeh bisa mlaku kaya sing dakkarepake. Dheweke menehi ide babagan alur kerja otomatis, sing digarisake ing bagean Goals ing artikel iki. Duwe tujuan kasebut tegese aku kudu ngerti carane nggunakake Docker.

docker

Docker minangka alat sing, thanks kanggo teknologi containerization, ngidini aplikasi gampang disebarake, disebarake lan mbukak ing lingkungan sing padha, sanajan platform Docker dhewe mlaku ing lingkungan sing beda. Pisanan, aku kudu njupuk alat baris perintah Docker (CLI). instruksi Pandhuan instalasi Docker ora bisa diarani cetha lan bisa dingerteni, nanging saka iku sampeyan bisa sinau manawa kanggo njupuk langkah instalasi pisanan, sampeyan kudu ndownload Docker Desktop (kanggo Mac utawa Windows).

Docker Hub kira-kira padha karo GitHub kanggo repositori git, utawa pendaptaran npm kanggo paket JavaScript. Iki minangka repositori online kanggo gambar Docker. Iki sing disambungake Docker Desktop.

Dadi, kanggo miwiti Docker, sampeyan kudu nindakake rong perkara:

Sawise iki, sampeyan bisa mriksa yen Docker CLI bisa digunakake kanthi nglakokake perintah ing ngisor iki kanggo mriksa versi Docker:

docker -v

Sabanjure, mlebu menyang Docker Hub kanthi ngetik jeneng pangguna lan sandhi nalika ditakoni:

docker login

Kanggo nggunakake Docker, sampeyan kudu ngerti konsep gambar lan wadhah.

▍ Gambar

Gambar iku kaya cithak biru sing ngemot instruksi kanggo ngrakit wadhah kasebut. Iki minangka gambar asli saka sistem file lan setelan aplikasi. Pangembang bisa kanthi gampang nuduhake gambar.

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

Printah iki bakal ngasilake tabel kanthi header ing ngisor iki:

REPOSITORY     TAG     IMAGE ID     CREATED     SIZE
---

Sabanjure kita bakal katon ing sawetara conto printah ing format padha - pisanan ana printah karo komentar, lan banjur conto apa bisa output.

▍Wadhah

Wadah minangka paket eksekusi sing ngemot kabeh sing dibutuhake kanggo mbukak aplikasi. Aplikasi kanthi pendekatan iki bakal tansah bisa digunakake, preduli saka infrastruktur: ing lingkungan sing terisolasi lan ing lingkungan sing padha. Intine yaiku conto gambar sing padha diluncurake ing lingkungan sing beda.

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

▍Tag

Tag minangka indikasi versi tartamtu saka gambar.

▍Referensi cepet kanggo perintah Docker

Mangkene ringkesan sawetara perintah Docker sing umum digunakake.

tim

Konteks

efek

mbangun docker

Gambar

Nggawe gambar saka Dockerfile

tag docker

Gambar

Tag gambar

docker images

Gambar

Listing gambar

docker run

Container

Mlaku wadhah adhedhasar gambar

docker push

Gambar

Ngunggah gambar menyang pendaptaran

docker narik

Gambar

Loading gambar saka pendaptaran

docker ps

Container

Listing wadhah

sistem docker prune

Gambar/Wadhah

Mbusak wadhah lan gambar sing ora digunakake

▍Dockerfile

Aku ngerti carane mbukak aplikasi produksi lokal. Aku duwe konfigurasi Webpack sing dirancang kanggo mbangun aplikasi React sing wis siap. Sabanjure, aku duwe printah sing miwiti server adhedhasar Node.js ing port 5000. Katon kaya iki:

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

Perlu dicathet yen aku ora duwe conto aplikasi kanggo materi iki. Nanging ing kene, kanggo eksperimen, aplikasi Node sing prasaja bakal ditindakake.

Kanggo nggunakake wadhah kasebut, sampeyan kudu menehi instruksi menyang Docker. Iki ditindakake liwat file sing diarani Dockerfile, dumunung ing direktori ROOT proyek. Berkas iki, ing wiwitan, katon ora bisa dingerteni.

Nanging isine mung nggambarake, kanthi prentah khusus, sing padha karo nyetel lingkungan kerja. Ing ngisor iki sawetara prentah kasebut:

  • saka - Printah iki miwiti file. Iki nemtokake gambar dhasar ing ngendi wadhah kasebut dibangun.
  • KOPI - Nyalin file saka sumber lokal menyang wadhah.
  • WORKDIR - Nyetel direktori kerja kanggo printah ing ngisor iki.
  • RUN - Mlaku printah.
  • Mbabarake - Setelan port.
  • ENTRYPOINT - Indikasi prentah sing bakal ditindakake.

Dockerfile bisa uga katon kaya iki:

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

Gumantung ing gambar dhasar sing sampeyan pilih, sampeyan bisa uga kudu nginstal dependensi tambahan. Kasunyatane yaiku sawetara gambar dhasar (kayata Node Alpine Linux) digawe kanthi tujuan supaya bisa kompak. Akibaté, bisa uga ora duwe sawetara program sing dikarepake.

▍Mbangun, menehi tag lan mbukak wadhah

Déwan lokal lan Bukak saka wadhah iku sawise kita duwe Dockerfile, tugas cukup prasaja. Sadurunge push gambar menyang Docker Hub, sampeyan kudu nyoba sacara lokal.

▍Majelis

Pisanan sampeyan kudu ngumpulake gambar, nemtokake jeneng lan, opsional, tag (yen tag ora ditemtokake, sistem bakal kanthi otomatis menehi tag menyang gambar latest).

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

Sawise nindakake printah iki, sampeyan bisa nonton Docker mbangun gambar kasebut.

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

Mbangun bisa njupuk sawetara menit - iku kabeh gumantung carane akeh dependensi sampeyan duwe. Sawise mbangun rampung, sampeyan bisa mbukak printah docker images lan deleng katrangan gambar anyar sampeyan.

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

▍Bukak

Gambar wis digawe. Iki tegese sampeyan bisa mbukak wadhah adhedhasar. Amarga aku pengin bisa ngakses aplikasi sing mlaku ing wadhah ing localhost:5000, kula, ing sisih kiwa saka pasangan 5000:5000 ing printah sabanjuré diinstal 5000. Ing sisih tengen ana port wadhah.

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

Saiki yen wadhah digawe lan mlaku, sampeyan bisa nggunakake printah kasebut docker ps kanggo ndeleng informasi babagan wadhah iki (utawa sampeyan bisa nggunakake printah docker ps -a, sing nampilake informasi babagan kabeh kontaner, ora mung sing mlaku).

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

Yen saiki menyang alamat localhost:5000 — sampeyan bisa ndeleng kaca aplikasi sing mlaku sing katon persis padha karo kaca aplikasi sing mlaku ing lingkungan produksi.

▍Tagging lan nerbitake

Kanggo nggunakake salah sawijining gambar sing digawe ing server produksi, kita kudu bisa ndownload gambar iki saka Docker Hub. Iki tegese sampeyan kudu nggawe repositori kanggo proyek kasebut ing Docker Hub. Sawise iki, kita bakal duwe papan sing bisa ngirim gambar kasebut. Gambar kasebut kudu diganti jeneng supaya jenenge diwiwiti nganggo jeneng pangguna Docker Hub. Iki kudu diterusake kanthi jeneng repositori. Sembarang tag bisa diselehake ing mburi jeneng. Ing ngisor iki conto jeneng gambar nggunakake skema iki.

Saiki sampeyan bisa mbangun gambar kanthi jeneng anyar lan mbukak printah kasebut docker push kanggo push menyang gudang 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

Yen kabeh dadi apik, gambar kasebut bakal kasedhiya ing Docker Hub lan bisa gampang diunggah menyang server utawa ditransfer menyang pangembang liyane.

Sabanjure langkah

Saiki kita wis verifikasi manawa aplikasi kasebut, ing bentuk wadah Docker, mlaku sacara lokal. Kita wis ngunggah wadhah kasebut menyang Docker Hub. Kabeh iki tegese kita wis nggawe kemajuan sing apik banget kanggo tujuan kita. Saiki kita kudu ngrampungake rong pitakonan liyane:

  • Nyetel alat CI kanggo nguji lan nyebarake kode.
  • Nyetel server produksi supaya bisa ngundhuh lan mbukak kode kita.

Ing kasus kita, kita nggunakake Travis C.I.. Minangka server - DitigalOcean.

Perlu dicathet yen ing kene sampeyan bisa nggunakake kombinasi layanan liyane. Contone, tinimbang Travis CI, sampeyan bisa nggunakake CircleCI utawa Tindakan Github. Lan tinimbang DigitalOcean - AWS utawa Linode.

Kita mutusaké kanggo bisa karo Travis CI, lan aku wis duwe soko diatur ing layanan iki. Mulane, saiki aku bakal ngomong babagan carane nyiyapake kanggo karya.

Travis C.I.

Travis CI minangka alat kanggo nguji lan nyebarake kode. Aku ora kaya kanggo pindhah menyang intricacies nyetel Travis CI, wiwit saben project punika unik, lan iki ora bakal nggawa akeh keuntungan. Nanging aku bakal nutupi dhasar kanggo miwiti yen sampeyan arep nggunakake Travis CI. Apa sampeyan milih Travis CI, CircleCI, Jenkins, utawa liya-liyane, cara konfigurasi sing padha bakal digunakake ing endi wae.

Kanggo miwiti karo Travis CI, bukak situs web proyek lan nggawe akun. Banjur gabungke Travis CI karo akun GitHub sampeyan. Nalika nyiyapake sistem, sampeyan kudu nemtokake repositori sing pengin ngotomatisasi karya lan ngaktifake akses menyang. (Aku nggunakake GitHub, nanging aku yakin yen Travis CI bisa nggabungake BitBucket, lan GitLab, lan layanan sing padha).

Saben Travis CI diwiwiti, server diluncurake, nglakokake perintah sing ditemtokake ing file konfigurasi, kalebu nyebarake cabang repositori sing cocog.

▍ Siklus urip proyek

File konfigurasi Travis CI disebut .travis.yml lan disimpen ing direktori ROOT project, ndhukung konsep acara siklus urip tugas. Kedadeyan kasebut kadhaptar miturut urutan kedadeyan:

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

▍ Tes

Ing file konfigurasi aku arep ngatur server Travis CI lokal. Aku milih Node 12 minangka basa lan ngandhani sistem kanggo nginstal dependensi sing dibutuhake kanggo nggunakake Docker.

Kabeh sing kadhaptar ing .travis.yml, bakal dileksanakake nalika kabeh panjalukan narik digawe kanggo kabeh cabang saka gudang, kajaba kasebut. Iki minangka fitur sing migunani amarga tegese kita bisa nyoba kabeh kode sing mlebu ing repositori. Iki ngidini sampeyan ngerti yen kode siap ditulis ing cabang. master, lan apa bakal ngrusak proses mbangun proyek. Ing konfigurasi global iki, aku nginstal kabeh sacara lokal, mbukak server Webpack dev ing latar mburi (iki minangka fitur alur kerjaku), lan mbukak tes.

Yen sampeyan pengin gudang sampeyan nampilake lencana sing nuduhake jangkoan tes, kene Sampeyan bisa nemokake instruksi singkat babagan nggunakake Jest, Travis CI lan Coveralls kanggo ngumpulake lan nampilake informasi iki.

Dadi iki isi file kasebut .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

Iki ngendi tumindak sing dileksanakake kanggo kabeh cabang saka repositori lan kanggo narik panjalukan mungkasi.

▍Panyebaran

Adhedhasar asumsi yen kabeh tes otomatis rampung kanthi sukses, kita bisa, sing opsional, masang kode menyang server produksi. Awit kita arep nindakake iki mung kanggo kode saka cabang master, kita menehi instruksi sing cocog karo sistem ing setelan panyebaran. Sadurunge nyoba nggunakake kode sing bakal kita deleng ing proyek sampeyan, aku pengin ngelingake sampeyan yen sampeyan kudu duwe skrip nyata sing diarani penyebaran.

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

Skrip panyebaran ngrampungake rong masalah:

  • Mbangun, menehi tag lan ngirim gambar menyang Docker Hub nggunakake alat CI (ing kasus kita, Travis CI).
  • Muat gambar ing server, mungkasi wadhah lawas lan miwiti sing anyar (ing kasus kita, server mbukak ing platform DigitalOcean).

Pisanan, sampeyan kudu nyiyapake proses otomatis kanggo mbangun, menehi tag, lan push gambar menyang Docker Hub. Iki kabeh meh padha karo sing wis ditindakake kanthi manual, kajaba kita butuh strategi kanggo menehi tag unik menyang gambar lan ngotomatisasi login. Aku kesulitan karo sawetara rincian script penyebaran, kayata strategi menehi tag, login, enkoding kunci SSH, panyiapan sambungan SSH. Nanging kebeneran pacarku apik banget karo bash, kaya akeh perkara liyane. Dheweke nulungi aku nulis naskah iki.

Dadi, bagean pertama skrip yaiku ngunggah gambar menyang Docker Hub. Iki cukup gampang ditindakake. Skema tagging sing digunakake kalebu nggabungake hash git lan tag git, yen ana. Iki mesthekake yen tag unik lan nggampangake kanggo ngenali perakitan sing adhedhasar. DOCKER_USERNAME и DOCKER_PASSWORD yaiku variabel lingkungan pangguna sing bisa disetel nggunakake antarmuka Travis CI. Travis CI bakal kanthi otomatis ngolah data sensitif supaya ora tiba ing tangan sing salah.

Punika bagean pisanan saka naskah 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}

Apa bagean kapindho skrip bakal gumantung saka host apa sing sampeyan gunakake lan cara sambungan kasebut diatur. Ing kasusku, wiwit nggunakake Digital Ocean, aku nggunakake printah kanggo nyambung menyang server doctl. Nalika nggarap AWS, sarana kasebut bakal digunakake aws, lan sapanunggalane.

Nyiyapake server ora angel banget. Dadi, aku nyiyapake droplet adhedhasar gambar dhasar. Perlu dicathet yen sistem sing aku pilih mbutuhake instalasi manual Docker siji-wektu lan peluncuran Docker manual siji-wektu. Aku nggunakake Ubuntu 18.04 kanggo nginstal Docker, dadi yen sampeyan uga nggunakake Ubuntu kanggo nindakake perkara sing padha, sampeyan mung bisa ngetutake. iki guide prasaja.

Aku ora ngomong babagan prentah khusus kanggo layanan kasebut, amarga aspek iki bisa beda-beda ing macem-macem kasus. Aku mung bakal menehi rencana umum tumindak sing bakal ditindakake sawise nyambungake liwat SSH menyang server sing bakal ditindakake proyek kasebut:

  • Kita kudu nemokake wadhah sing saiki mlaku lan mandheg.
  • Banjur sampeyan kudu mbukak wadhah anyar ing latar mburi.
  • Sampeyan kudu nyetel port lokal server menyang 80 - iki bakal ngidini sampeyan ngetik situs ing alamat kaya example.com, tanpa nemtokake port, tinimbang nggunakake alamat kaya example.com:5000.
  • Pungkasan, sampeyan kudu mbusak kabeh wadhah lan gambar lawas.

Punika lanjutanipun naskah.

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

Sawetara perkara sing kudu digatekake

Sampeyan bisa uga yen sampeyan nyambungake menyang server liwat SSH saka Travis CI, sampeyan bakal weruh bebaya sing bakal nyegah sampeyan saka terus instalasi minangka sistem bakal ngenteni respon pangguna.

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

Aku sinau manawa kunci senar bisa dienkode ing base64 supaya bisa disimpen ing wangun sing bisa digunakake kanthi gampang lan andal. Ing tataran instalasi, sampeyan bisa decode kunci umum lan nulis menyang file known_hosts kanggo nyingkirake kesalahan ing ndhuwur.

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

Ing laku, printah iki bisa katon kaya iki:

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

Lan iki sing diasilake - string sing dikodekan base64:

MTIzLjQ1LjY3Ljg5IHNzaC1yc2EgQUFBQUIzTnphQzF5YzJFQUFBQUJJd0FBQVFFQWtsT1Vwa0RIcmZIWTE3U2JybVRJcE5MVEdLOVRqb20vQldEU1UKR1BsK25hZnpsSERUWVc3aGRJNHlaNWV3MThKSDRKVzlqYmhVRnJ2aVF6TTd4bEVMRVZmNGg5bEZYNVFWa2JQcHBTd2cwY2RhMwpQYnY3a09kSi9NVHlCbFdYRkNSK0hBbzNGWFJpdEJxeGlYMW5LaFhwSEFac01jaUxxOFY2UmpzTkFRd2RzZE1GdlNsVksvN1hBCnQzRmFvSm9Bc25jTTFROXg1KzNWMFd3NjgvZUlGbWIxenVVRmxqUUpLcHJyWDg4WHlwTkR2allOYnk2dncvUGIwcndlcnQvRW4KbVorQVc0T1pQblRQSTg5WlBtVk1MdWF5ckQyY0U4NlovaWw4YitndzNyMysxbkthdG1Ja2puMnNvMWQwMVFyYVRsTXFWU3NieApOclJGaTl3cmYrTTdRPT0geW91QGV4YW1wbGUuY29tCg==

Punika printah kasebut ing ndhuwur

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

Pendekatan sing padha bisa digunakake karo kunci pribadi nalika nggawe sambungan, amarga sampeyan butuh kunci pribadi kanggo ngakses server. Nalika nggarap tombol, sampeyan mung kudu mesthekake yen disimpen kanthi aman ing variabel lingkungan Travis CI lan ora ditampilake ing endi wae.

Bab liyane sing kudu dicathet yaiku sampeyan kudu mbukak kabeh skrip penyebaran minangka siji baris, contone - karo doctl. Iki mbutuhake sawetara gaweyan ekstra.

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

TLS/SSL lan Load Balancing

Sawise aku nindakake kabeh sing kasebut ing ndhuwur, masalah pungkasan sing aku nemoni yaiku server ora duwe SSL. Awit aku nggunakake server Node.js, supaya meksa nyambut gawe proxy mbalikke Nginx lan Ayo Encrypt, sampeyan kudu tinker kathah.

Aku pancene ora pengin nindakake kabeh konfigurasi SSL iki kanthi manual, mula aku mung nggawe load balancer lan ngrekam rincian ing DNS. Ing kasus DigitalOcean, umpamane, nggawe sertifikat sing ditandatangani kanthi otomatis ing load balancer minangka prosedur sing gampang, gratis lan cepet. Pendekatan iki nduweni manfaat tambahan sing ndadekake gampang banget kanggo nyiyapake SSL ing sawetara server sing mlaku ing mburi load balancer yen perlu. Iki ngidini server dhewe ora "mikir" babagan SSL, nanging ing wektu sing padha nggunakake port kaya biasane 80. Dadi nyetel SSL ing load balancer luwih gampang lan luwih trep tinimbang cara alternatif kanggo nyetel SSL.

Saiki sampeyan bisa nutup kabeh port ing server sing nampa sambungan mlebu - kajaba port 80, digunakake kanggo komunikasi karo load balancer, lan port 22 kanggo SSH. Akibaté, nyoba kanggo ngakses langsung server ing sembarang port liyane saka loro iki bakal gagal.

Hasil

Sawise aku nindakake kabeh sing dakkandhakake ing materi iki, platform Docker utawa konsep rantai CI / CD otomatis ora wedi maneh. Aku bisa nyiyapake chain integrasi sing terus-terusan, sajrone kode kasebut dites sadurunge dadi produksi lan kode kasebut kanthi otomatis disebarake ing server. Iki kabeh isih relatif anyar kanggo kula, lan aku yakin ana cara kanggo nambah alur kerja otomatis lan nggawe luwih efisien. Dadi yen sampeyan duwe gagasan babagan perkara iki, tulung aku ngerti. kanggo kula ngerti. Muga-muga artikel iki mbantu sampeyan ing upaya sampeyan. Aku pengin percaya yen sawise maca, sampeyan sinau kaya sing dakkarepake nalika ngerteni kabeh sing dakkandhakake.

PS Ing kita pasar ana gambar docker, sing bisa diinstal ing siji klik. Sampeyan bisa mriksa operasi kontaner ing VPS. Kabeh klien anyar diwenehi 3 dina tes gratis.

Para pamaca ingkang kinurmatan! Apa sampeyan nggunakake teknologi CI/CD ing proyek sampeyan?

Nggawe rantai CI / CD lan ngotomatisasi karya karo Docker

Source: www.habr.com

Add a comment