Mamorona rojo CI/CD sy asa automatique miaraka amin'i Docker

Nanoratra ny tranokalako voalohany aho tamin'ny faramparan'ireo taona 90. Tamin'izany fotoana izany dia tena mora ny nametraka azy ireo ho amin'ny filaminana miasa. Nisy mpizara Apache tamin'ny fampiantranoana iombonana sasany, azonao atao ny miditra ao amin'ity server ity amin'ny alΓ lan'ny FTP amin'ny fanoratana zavatra toy izany ftp://ftp.example.com. Avy eo dia tsy maintsy nampiditra ny anaranao sy ny tenimiafinao ianao ary nampiditra ireo rakitra tao amin'ny server. Nisy fotoana samy hafa, tsotra kokoa noho ny ankehitriny ny zava-drehetra.

Mamorona rojo CI/CD sy asa automatique miaraka amin'i Docker

Tao anatin'ny roapolo taona taorian'izay dia niova be ny zava-drehetra. Lasa sarotra kokoa ny tranokala; tsy maintsy atambatra izy ireo alohan'ny hamoahana azy. Ny mpizara tokana iray dia lasa mpizara maro mihazakazaka ao ambadiky ny mpifandanja entana, ary nanjary mahazatra ny fampiasana ny rafitra fanaraha-maso.

Ho an'ny tetikasako manokana dia nanana fanamafisam-peo manokana aho. Ary fantatro fa mila fahaizana mametraka ny tranokala amin'ny famokarana aho amin'ny fanatanterahana hetsika iray monja: manoratra kaody amin'ny sampana master amin'ny GitHub. Ho fanampin'izay, fantatro fa mba hiantohana ny fampandehanana ny rindranasan-tranonkala keliko dia tsy te hitantana cluster Kubernetes goavana aho, na hampiasa teknolojia Docker Swarm, na hihazona andiana mpizara miaraka amin'ny pods, agents ary karazana hafa rehetra. fahasarotana. Mba hahatratrarana ny tanjona amin'ny fanaovana asa ho mora araka izay azo atao, dia nila nahafantatra ny CI/CD aho.

Raha manana tetikasa kely ianao (amin'ity tranga ity, tetikasa Node.js) ary te-hahafantatra ny fomba automatique ny fametrahana ity tetikasa ity ianao, ary miantoka fa ny zavatra voatahiry ao amin'ny tahiry dia mifanaraka tsara amin'ny zavatra miasa amin'ny famokarana, dia izaho. hevero fa mety ho liana amin'ity lahatsoratra ity ianao.

zavatra takiana alohan'ny

Ny mpamaky an'ity lahatsoratra ity dia antenaina hanana fahatakarana fototra momba ny baikon'ny baiko sy ny fanoratana script Bash. Ankoatra izany, mila kaonty izy Travis C.I. ΠΈ Hub docker.

tanjona

Tsy hilaza aho fa ity lahatsoratra ity dia azo antsoina tsy misy fepetra hoe "tutorial". Ity dia antontan-taratasy misimisy kokoa izay iresahako momba ny zavatra nianarako sy mamaritra ny dingana mety amiko amin'ny fitsapana sy ny fametrahana kaody amin'ny famokarana, atao amin'ny alΓ lan'ny mandeha ho azy.

Izany no niafaran'ny asako.

Ho an'ny kaody alefa any amin'ny sampana repository afa-tsy master, atao ireto hetsika manaraka ireto:

  • Manomboka ny tetikasa fananganana amin'ny Travis CI.
  • Ny andrana rehetra, ny fampidirana ary ny faran'ny farany dia atao.

Ho an'ny code izay latsaka ao master, dia atao izao:

  • Ireo rehetra voalaza etsy ambony, miampy...
  • Manangana sary Docker mifototra amin'ny kaody, ny fanovana ary ny tontolo iainana ankehitriny.
  • Mametraka ny sary amin'ny Docker Hub.
  • Fifandraisana amin'ny mpizara famokarana.
  • Mampakatra sary avy amin'ny Docker Hub mankany amin'ny mpizara.
  • Atsaharo ny kaontenera ankehitriny ary manomboka vaovao mifototra amin'ny sary vaovao.

Raha tsy mahalala na inona na inona momba ny Docker, sary ary container ianao dia aza manahy. Holazaiko aminareo ny momba izany.

Inona no atao hoe CI/CD?

Ny fanafohezana CI/CD dia midika hoe β€œfampidirana tsy tapaka/fampidirana mitohy”.

▍Fampidirana mitohy

Ny fampidirana mitohy dia dingana iray izay ataon'ny mpamorona ny fanoloran-tena amin'ny tahiry loharano loharanon'ny tetikasa (matetika sampana master). Mandritra izany fotoana izany, ny kalitaon'ny kaody dia azo antoka amin'ny alΓ lan'ny fitiliana mandeha ho azy.

▍Fametrahana tsy tapaka

Ny fandefasana tsy tapaka dia ny fandefasana kaody mandeha ho azy matetika amin'ny famokarana. Ny tapany faharoa amin'ny fanafohezan-teny CI/CD dia voasokajy ho β€œfanaterana mitohy”. Izany dia mitovy amin'ny "fametrahana mitohy", fa ny "fanaterana tsy tapaka" dia midika fa ilaina ny manamafy ny fanovana amin'ny tanana alohan'ny hanombohana ny fizotry ny fametrahana tetikasa.

fanombohana

Ny app izay nianaranao an'izany rehetra izany dia antsoina hoe TakeNote. Tetikasa an-tranonkala iasako ity, natao handraisana an-tsoratra. Tamin'ny voalohany dia nanandrana nanao aho JAMStack- tetikasa, na fampiharana eo anoloana fotsiny tsy misy mpizara, mba hanararaotra ny fampiantranoana mahazatra sy ny fahaiza-manao fametrahana tetikasa izay atolony Netlify. Rehefa nitombo ny fahasarotan'ny fampiharana, dia nila namorona ny ampahany amin'ny mpizara aho, izay midika fa mila mamolavola ny paikadiko manokana aho amin'ny fampidirana mandeha ho azy sy ny fametrahana mandeha ho azy ny tetikasa.

Raha ny ahy, ny fampiharana dia mpizara Express mandeha ao amin'ny tontolo Node.js, manolotra rindranasa React pejy tokana ary manohana API amin'ny lafiny mpizara azo antoka. Ity maritrano ity dia manaraka ny paikady azo jerena ao izany TorolΓ lana fanamarinana feno stack.

Niresaka tamin'ny NAMANA, izay manam-pahaizana momba ny automatique, ary nanontany azy ny zavatra tokony hataoko mba hampahomby azy rehetra amin'ny fomba tiako. Nomeny ahy ny hevitr'izay tokony ho endriky ny workflow mandeha ho azy, voasoritra ao amin'ny fizarana Tanjona amin'ity lahatsoratra ity. Ny fananana ireo tanjona ireo dia midika fa mila mahafantatra ny fomba fampiasana Docker aho.

Docker

Docker dia fitaovana iray izay, noho ny teknolojian'ny containerization, dia mamela ny fampiharana hozaraina mora foana, apetraka ary mihazakazaka amin'ny tontolo iray ihany, na dia mandeha amin'ny tontolo samihafa aza ny sehatra Docker. Voalohany, mila maka ny tanako amin'ny Docker command line tools (CLI) aho. torolalana Ny torolΓ lana fametrahana Docker dia tsy azo antsoina hoe mazava sy azo takarina, fa avy amin'izany dia azonao atao ny mianatra fa raha te hanao ny dingana fametrahana voalohany ianao dia mila misintona Docker Desktop (ho an'ny Mac na Windows).

Docker Hub dia mitovy amin'ny GitHub ho an'ny git repository, na rejisitra npm ho an'ny fonosana JavaScript. Ity dia tahiry an-tserasera ho an'ny sary Docker. Izany no ifandraisan'i Docker Desktop.

Noho izany, raha te hanomboka amin'ny Docker dia mila manao zavatra roa ianao:

Aorian'izany dia azonao atao ny manamarina raha miasa ny Docker CLI amin'ny alΓ lan'ny fampandehanana ity baiko manaraka ity mba hanamarinana ny version Docker:

docker -v

Avy eo, midira ao amin'ny Docker Hub amin'ny alΓ lan'ny fampidirana ny anaranao sy ny tenimiafinao rehefa anontaniana:

docker login

Raha hampiasa ny Docker ianao dia tsy maintsy mahatakatra ny foto-kevitry ny sary sy ny fitoeran-javatra.

▍Sary

Ny sary dia zavatra toy ny drafi-drafitra misy toromarika momba ny fanangonana ny fitoeran-javatra. Ity dia sary tsy azo ovaina amin'ny rafi-drakitra sy ny firafitry ny fampiharana. Afaka mizara sary mora foana ny mpamorona.

# Π’Ρ‹Π²ΠΎΠ΄ свСдСний ΠΎΠ±ΠΎ всСх ΠΎΠ±Ρ€Π°Π·Π°Ρ…
docker images

Ity baiko ity dia hamoaka latabatra miaraka amin'ity lohateny manaraka ity:

REPOSITORY     TAG     IMAGE ID     CREATED     SIZE
---

Avy eo isika dia hijery ohatra vitsivitsy amin'ny baiko mitovy endrika - voalohany misy baiko misy fanehoan-kevitra, ary avy eo ny ohatra iray amin'ny zavatra azony.

▍Kaontenera

Ny container dia fonosana azo tanterahana izay ahitana ny zavatra rehetra ilaina amin'ny fampandehanana fampiharana. Ny fampiharana miaraka amin'io fomba fiasa io dia hiasa mitovy foana, na inona na inona fotodrafitrasa: amin'ny tontolo mitoka-monina sy amin'ny tontolo iray ihany. Ny zava-misy dia ny fisehoan'ny sary mitovy dia natomboka tamin'ny tontolo samihafa.

# ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΠ΅ всСх ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²
docker ps -a
CONTAINER ID     IMAGE     COMMAND     CREATED     STATUS     PORTS     NAMES
---

▍Tags

Ny mari-pamantarana dia famantarana ny dikan-tsary iray manokana.

▍Filazana haingana momba ny baiko Docker

Ity misy topimaso momba ny baiko Docker fampiasa matetika.

ekipa

teny manodidina

vokatry

fananganana docker

sary

Manangana sary avy amin'ny Dockerfile

docker tag

sary

Famaritana sary

docker images

sary

Mitanisa sary

docker run

fitoeran-javatra

Fampandehanana kaontenera mifototra amin'ny sary

fanosehana docker

sary

Mampiakatra sary ao amin'ny rejisitra

fisintonana docker

sary

Mametraka sary avy amin'ny rejisitra

docker ps

fitoeran-javatra

Fitaterana lisitra

rafitra docker prune

Sary/Kaontenera

Esory ny kaontenera sy sary tsy ampiasaina

▍Dockerfile

Haiko ny mampandeha rindranasa famokarana eto an-toerana. Manana rafitra Webpack natao hananganana rindranasa React efa vonona aho. Manaraka, manana baiko aho izay manomboka mpizara mifototra amin'ny Node.js amin'ny seranana 5000. Toa izao izy io:

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

Marihina fa tsy manana ohatra fampiharana amin'ity fitaovana ity aho. Saingy eto, ho an'ny andrana, ny fampiharana Node tsotra rehetra dia hanao.

Raha te hampiasa ilay fitoeran-javatra ianao dia mila manome torolΓ lana an'i Docker. Izany dia atao amin'ny alalan'ny rakitra iray antsoina hoe Dockerfile, hita ao amin'ny lahatahiry fototry ny tetikasa. Ity rakitra ity, amin'ny voalohany, dia toa tsy takatry ny saina.

Fa ny zavatra voarakitra ao anatiny dia mamaritra fotsiny, miaraka amin'ny baiko manokana, zavatra mitovy amin'ny fametrahana tontolo iainana miasa. Ireto ny sasany amin'ireto baiko ireto:

  • FROM β€” Ity baiko ity dia manomboka rakitra. Izy io dia mamaritra ny sary fototra iorenan'ny kaontenera.
  • Copy - Mandika rakitra avy amin'ny loharano eo an-toerana mankany amin'ny container.
  • WORKDIR - Fametrahana ny lahatahiry miasa ho an'ireto baiko manaraka ireto.
  • Run - Mandehana baiko.
  • hampiharihary - Fametrahana seranan-tsambo.
  • ENTRYPOINT - Famantarana ny baiko hotanterahina.

Dockerfile mety ho toy izao:

# Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π·
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

Miankina amin'ny sary fototra nofidinao, mety mila mametraka fiankinan-doha fanampiny ianao. Ny zava-misy dia ny sary fototra sasany (toy ny Node Alpine Linux) dia noforonina miaraka amin'ny tanjona ny hahatonga azy ireo ho malefaka araka izay tratra. Vokatr'izany dia mety tsy manana programa andrasanao izy ireo.

▍Fanorenana, fametahana ary fampandehanana ny kaontenera

Ny fivoriambe eo an-toerana sy ny fandefasana ny kaontenera dia aorian'ny ananantsika Dockerfile, tena tsotra ny asa. Alohan'ny hanosehanao ny sary mankany amin'ny Docker Hub dia mila manandrana azy eo an-toerana ianao.

▍ Fivoriambe

Voalohany dia mila manangona ianao sary, mamaritra anarana ary, raha tsy izany, marika (raha tsy voatondro ny marika, ny rafitra dia hanome marika ho azy amin'ny sary latest).

# Π‘Π±ΠΎΡ€ΠΊΠ° ΠΎΠ±Ρ€Π°Π·Π°
docker build -t <image>:<tag> .

Aorian'ny fampandehanana ity baiko ity dia azonao atao ny mijery an'i Docker manamboatra ny sary.

Sending build context to Docker daemon   2.88MB
Step 1/9 : FROM node:12-alpine
 ---> ...Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ этапов сборки...
Successfully built 123456789123
Successfully tagged <image>:<tag>

Mety haharitra minitra vitsivitsy ny fananganana - miankina amin'ny habetsahan'ny fiankinan-doha anananao izany. Rehefa vita ny fananganana dia azonao atao ny manatanteraka ny baiko docker images ary jereo ny famaritana ny sarinao vaovao.

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

▍ Alefaso

Ny sary dia noforonina. Midika izany fa afaka mitantana kaontenera mifototra amin'izany ianao. Satria tiako ny ho afaka miditra amin'ny fampiharana mandeha ao amin'ny container amin'ny localhost:5000, izaho, eo ankavian'ny mpivady 5000:5000 ao amin'ny baiko manaraka napetraka 5000. Eo amin'ny ilany havanana no misy ny seranan-tsambo.

# Запуск с использованиСм локального ΠΏΠΎΡ€Ρ‚Π° 5000 ΠΈ ΠΏΠΎΡ€Ρ‚Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° 5000
docker run -p 5000:5000 <image>:<tag>

Amin'izao fotoana izao dia noforonina sy mandeha ny container, azonao atao ny mampiasa ny baiko docker ps raha hijery fampahalalana momba ity fitoeran-javatra ity (na azonao atao ny mampiasa ny baiko docker ps -a, izay mampiseho fampahalalana momba ny kaontenera rehetra, fa tsy izay mandeha fotsiny).

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

Raha mankany amin'ny adiresy ianao izao localhost:5000 β€” afaka mahita pejin'ny rindranasa mandeha ianao izay mitovy tanteraka amin'ny pejin'ny rindranasa iray mandeha amin'ny tontolo famokarana.

▍ Famaritana sy famoahana

Mba hampiasana ny iray amin'ireo sary noforonina amin'ny serivera famokarana dia mila misintona ity sary ity avy amin'ny Docker Hub isika. Midika izany fa mila mamorona tahiry ho an'ny tetikasa ao amin'ny Docker Hub ianao. Aorian'izany dia hanana toerana ahafahantsika mandefa ny sary isika. Mila soloina anarana ilay sary mba hanombohan'ny anarany amin'ny anaranay Docker Hub. Tokony harahin'ny anaran'ny repository izany. Ny marika rehetra dia azo apetraka eo amin'ny faran'ny anarana. Ity ambany ity ny ohatra iray amin'ny fanomezana anarana sary amin'ny fampiasana an'io tetika io.

Ankehitriny dia afaka manangana ny sary miaraka amin'ny anarana vaovao ianao ary manatanteraka ny baiko docker push hanosika azy ho any amin'ny tahiry 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

Raha mandeha tsara ny zava-drehetra dia ho hita ao amin'ny Docker Hub ny sary ary azo ampidirina mora amin'ny mpizara na afindra any amin'ny mpamorona hafa.

Dingana manaraka

Amin'izao fotoana izao dia nanamarina izahay fa ny fampiharana, amin'ny endrika container Docker, dia mandeha eo an-toerana. Nampiakatra ny kaontenera tao amin'ny Docker Hub izahay. Midika izany rehetra izany fa efa nisy fivoarana tsara ho an'ny tanjonay. Ankehitriny dia mila mamaly fanontaniana roa hafa isika:

  • Mametraka fitaovana CI amin'ny fitiliana sy fametrahana kaody.
  • Mametraka ny lohamilina famokarana mba hahafahany misintona sy mampandeha ny kaodinay.

Amin'ny tranga misy antsika dia mampiasa Travis C.I.. Amin'ny maha-server- DitigalOcean.

Marihina fa eto ianao dia afaka mampiasa fitambarana serivisy hafa. Ohatra, raha tokony Travis CI, azonao atao ny mampiasa CircleCI na Github Actions. Ary raha tokony ho DigitalOcean - AWS na Linode.

Nanapa-kevitra ny hiara-hiasa amin'ny Travis CI izahay, ary efa manana zavatra voarindra amin'ity serivisy ity aho. Noho izany, ankehitriny aho dia hiresaka fohifohy momba ny fomba hanomanana azy amin'ny asa.

Travis C.I.

Travis CI dia fitaovana fitiliana sy fametrahana kaody. Tsy te hiditra amin'ny pitsopitsony amin'ny fananganana Travis CI aho, satria ny tetikasa tsirairay dia miavaka, ary tsy hitondra tombony betsaka izany. Saingy hojereko ny fototra hanombohana anao raha manapa-kevitra ny hampiasa Travis CI ianao. Na misafidy Travis CI, CircleCI, Jenkins, na zavatra hafa ianao, dia hampiasaina eny rehetra eny ny fomba fanamboarana mitovy.

Raha te hanomboka amin'ny Travis CI, mandehana any tranokalan'ny tetikasa ary mamorona kaonty. Avy eo ampidiro ny Travis CI amin'ny kaontinao GitHub. Rehefa manangana ny rafitra ianao dia mila mamaritra ny tahiry izay tianao handrindrana ny asa ary ahafahanao miditra amin'izany. (Mampiasa GitHub aho, saingy azoko antoka fa afaka miditra amin'ny BitBucket, sy GitLab, ary serivisy mitovy amin'izany i Travis CI).

Isaky ny manomboka ny Travis CI, dia atomboka ny mpizara, manatanteraka ny baiko voalaza ao amin'ny rakitra fikirakirana, ao anatin'izany ny fametrahana ireo sampana fitahirizana mifanaraka aminy.

▍Ny tsingerin'ny fiainan'ny asa

Travis CI configuration file antsoina .travis.yml ary voatahiry ao amin'ny lahatahiry fototry ny tetikasa, manohana ny foto-kevitry ny hetsika tsingerim-piainana asa. Ireo hetsika ireo dia voatanisa araka ny filaharan'izy ireo:

  • apt addons
  • cache components
  • before_install
  • install
  • before_script
  • script
  • before_cache
  • after_success ΠΈΠ»ΠΈ after_failure
  • before_deploy
  • deploy
  • after_deploy
  • after_script

▍Fitsapana

Ao amin'ny fichier configuration dia hamboatra ny mpizara Travis CI eo an-toerana aho. Nifidy ny Node 12 ho fiteny aho ary nilaza tamin'ny rafitra hametraka ny fiankinan-doha ilaina amin'ny fampiasana Docker.

Izay rehetra voatanisa ao .travis.yml, dia hotanterahina rehefa atao amin'ny sampana rehetra ao amin'ny tahiry ny fangatahana misintona rehetra, raha tsy misy fepetra manokana. Ity dia endri-javatra mahasoa satria midika izany fa afaka manandrana ny code rehetra miditra ao amin'ny tahiry. Izany dia mampahafantatra anao raha vonona hosoratana amin'ny sampana ny kaody. master, ary raha handrava ny fizotran'ny fananganana tetikasa izany. Amin'ity fanamafisana eran-tany ity, mametraka ny zava-drehetra eo an-toerana aho, mampandeha ny mpizara Webpack dev ao ambadika (izany no singa iray amin'ny workflow), ary manao fitsapana.

Raha tianao ny toerana fitehirizanao hampiseho marika manondro fandrakofana fitsapana, eto Afaka mahita torolalana fohy momba ny fampiasana Jest, Travis CI ary Coveralls ianao mba hanangonana sy hanehoana ity fampahalalana ity.

Ka ity ny votoatin'ny rakitra .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

Eo no mifarana ny hetsika atao ho an'ny sampana rehetra amin'ny fitahirizana sy ny fangatahana fisintonana.

▍Fandefasana

Miorina amin'ny fiheverana fa vita soa aman-tsara ny fitsapana mandeha ho azy rehetra, azontsika atao, izay tsy azo atao, mametraka ny code amin'ny mpizara famokarana. Satria ny kaody avy amin'ny sampana ihany no tiana atao master, manome torolalana mifanaraka amin'izany ny rafitra ao amin'ny firafitry ny fametrahana. Alohan'ny hanandramanao hampiasa ny kaody izay hojerentsika manaraka amin'ny tetikasanao dia tiako ny mampitandrina anao fa tsy maintsy manana script tena izy ianao hiantsoana ny fametrahana.

deploy:
  # Π‘ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Docker-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° Docker Hub
  provider: script
  script: bash deploy.sh
  on:
    branch: master

Ny script deployment dia mamaha olana roa:

  • Amboary, marika ary alefaso any amin'ny Docker Hub ny sary amin'ny alΓ lan'ny fitaovana CI (amin'ny tranga misy antsika, Travis CI).
  • Mametraka ny sary eo amin'ny mpizara, manajanona ny kaontenera taloha ary manomboka vaovao (raha ny anay, ny mpizara dia mandeha amin'ny sehatra DigitalOcean).

Voalohany, mila manangana dingana mandeha ho azy ianao amin'ny fananganana, fametahana ary fanosehana ny sary mankany amin'ny Docker Hub. Izany rehetra izany dia mitovy amin'ny efa nataontsika tamin'ny tanana, afa-tsy ny mila paikady hanendry marika tokana amin'ny sary sy ny fidirana ho azy. Sahirana aho tamin'ny antsipirihan'ny sora-baventy, toy ny paikady fametahana, fidirana, famandrihana fanalahidy SSH, fananganana fifandraisana SSH. Saingy soa ihany fa ny sipako dia tena mahay amin'ny bash, toy ny amin'ny zavatra maro hafa. Nanampy ahy hanoratra ity script ity izy.

Noho izany, ny ampahany voalohany amin'ny script dia mampakatra ny sary ao amin'ny Docker Hub. Tena mora ny manao izany. Ny tetik'asa tagging nampiasaiko dia ny fampifangaroana git hash sy git tag, raha misy. Izany dia miantoka fa tsy manam-paharoa ny marika ary manamora ny famantarana ny fivoriambe izay iorenany. DOCKER_USERNAME ΠΈ DOCKER_PASSWORD dia fari-piainan'ny mpampiasa izay azo apetraka amin'ny alΓ lan'ny interface Travis CI. Travis CI dia handrindra ho azy ny angon-drakitra saro-pady mba tsy hianjera amin'ny tanana diso.

Ity ny ampahany voalohany amin'ny script deploy.sh.

#!/bin/sh
set -e # ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ скрипт ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ ошибок

IMAGE="<username>/<repository>"                             # ΠžΠ±Ρ€Π°Π· Docker
GIT_VERSION=$(git describe --always --abbrev --tags --long) # Git-Ρ…ΡΡˆ ΠΈ Ρ‚Π΅Π³ΠΈ

# Π‘Π±ΠΎΡ€ΠΊΠ° ΠΈ Ρ‚Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Π°
docker build -t ${IMAGE}:${GIT_VERSION} .
docker tag ${IMAGE}:${GIT_VERSION} ${IMAGE}:latest

# Π’Ρ…ΠΎΠ΄ Π² Docker Hub ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠ±Ρ€Π°Π·Π°
echo "${DOCKER_PASSWORD}" | docker login -u "${DOCKER_USERNAME}" --password-stdin
docker push ${IMAGE}:${GIT_VERSION}

Ny ampahany faharoa amin'ny script dia miankina tanteraka amin'ny mpampiantrano ampiasainao sy ny fomba fandaminana ny fifandraisana aminy. Raha ny amiko, satria mampiasa Ocean Digital aho, dia mampiasa ny baiko aho hifandraisana amin'ny mpizara doctl. Rehefa miasa miaraka amin'ny AWS dia hampiasaina ny fitaovana aws, sy ny sisa.

Tsy dia sarotra loatra ny fametrahana ny mpizara. Noho izany, nanangana droplet mifototra amin'ny sary fototra aho. Marihina fa ny rafitra nofidiko dia mitaky fametrahana Docker indray mandeha ary fandefasana Docker indray mandeha. Nampiasa Ubuntu 18.04 aho hametrahana Docker, ka raha mampiasa Ubuntu hanao toy izany koa ianao dia afaka manaraka fotsiny. ny torolalana tsotra.

Tsy miresaka momba ny baiko manokana ho an'ny serivisy aho, satria io lafiny io dia mety miovaova be amin'ny tranga samihafa. Hanome drafitra ankapobeny hotanterahina fotsiny aho aorian'ny fampifandraisana amin'ny SSH amin'ny lohamilina izay hametrahana ny tetikasa:

  • Mila mitady ny kaontenera mandeha amin'izao fotoana izao isika ary manakana azy.
  • Avy eo dia mila mametraka fitoeran-javatra vaovao ao ambadika ianao.
  • Mila mametraka ny seranan-tsambo eo an-toerana an'ny mpizara ianao 80 - izany dia ahafahanao miditra amin'ny tranokala amin'ny adiresy toy ny example.com, tsy milaza ny seranan-tsambo, fa tsy mampiasa adiresy toy ny example.com:5000.
  • Farany, mila mamafa ny kaontenera sy sary taloha rehetra ianao.

Ity ny tohin'ny script.

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

Zavatra sasany tokony hotandremana

Mety ho rehefa mifandray amin'ny mpizara amin'ny alΓ lan'ny SSH avy amin'ny Travis CI ianao dia hahita fampitandremana izay hanakana anao tsy hanohy ny fametrahana satria miandry ny valintenin'ny mpampiasa ny rafitra.

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

Nianarako fa azo asiana kaody ao amin'ny base64 ny lakilen'ny tady iray mba hitahirizana azy amin'ny endrika iray ahafahana miasa tsara sy azo antoka. Amin'ny dingana fametrahana dia azonao atao ny mamadika ny fanalahidin'ny daholobe ary manoratra izany amin'ny rakitra known_hosts mba hialana amin'ny fahadisoana etsy ambony.

echo <public key> | base64 # Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ <ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡, Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π² base64>

Amin'ny fampiharana, ity baiko ity dia mety ho toy izao:

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

Ary izao no avoakany - tady misy code base64:

MTIzLjQ1LjY3Ljg5IHNzaC1yc2EgQUFBQUIzTnphQzF5YzJFQUFBQUJJd0FBQVFFQWtsT1Vwa0RIcmZIWTE3U2JybVRJcE5MVEdLOVRqb20vQldEU1UKR1BsK25hZnpsSERUWVc3aGRJNHlaNWV3MThKSDRKVzlqYmhVRnJ2aVF6TTd4bEVMRVZmNGg5bEZYNVFWa2JQcHBTd2cwY2RhMwpQYnY3a09kSi9NVHlCbFdYRkNSK0hBbzNGWFJpdEJxeGlYMW5LaFhwSEFac01jaUxxOFY2UmpzTkFRd2RzZE1GdlNsVksvN1hBCnQzRmFvSm9Bc25jTTFROXg1KzNWMFd3NjgvZUlGbWIxenVVRmxqUUpLcHJyWDg4WHlwTkR2allOYnk2dncvUGIwcndlcnQvRW4KbVorQVc0T1pQblRQSTg5WlBtVk1MdWF5ckQyY0U4NlovaWw4YitndzNyMysxbkthdG1Ja2puMnNvMWQwMVFyYVRsTXFWU3NieApOclJGaTl3cmYrTTdRPT0geW91QGV4YW1wbGUuY29tCg==

Ity ny baiko voalaza etsy ambony

install:
  - echo < ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡, Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π² base64> | base64 -d >> $HOME/.ssh/known_hosts

Ny fomba mitovy dia azo ampiasaina amin'ny fanalahidy manokana rehefa mametraka fifandraisana, satria mety mila fanalahidy manokana ianao raha te hidirana amin'ny mpizara. Rehefa miasa miaraka amin'ny fanalahidy ianao dia mila miantoka fotsiny fa voatahiry tsara ao anaty fari-piainan'ny Travis CI izy ary tsy aseho na aiza na aiza.

Ny zavatra iray hafa tokony homarihina dia mety ilainao ny mampandeha ny script deployment manontolo ho andalana iray, ohatra - miaraka amin'ny doctl. Mety mitaky ezaka fanampiny izany.

doctl compute ssh <droplet> --ssh-command "всС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ здСсь && здСсь"

TLS/SSL sy Load Balancing

Taorian'ny nanaovako ny zava-drehetra voalaza etsy ambony, ny olana farany hitako dia ny tsy manana SSL ny mpizara. Satria mampiasa mpizara Node.js aho, mba hanerena miasa reverse proxy Nginx sy Let's Encrypt, mila mitsambikina be ianao.

Tena tsy te-hanao an-tΓ nana an'izany rehetra izany ny SSL aho, ka namorona mpanelanelana entana fotsiny aho ary noraketiko tao amin'ny DNS ny antsipiriany. Raha ny momba ny DigitalOcean, ohatra, dia fomba tsotra, maimaim-poana ary haingana ny famoronana taratasy fanamarinana nosoniavin'ny tena ho azy amin'ny mpandanja entana. Ity fomba fiasa ity dia manana tombony fanampiny izay mahatonga azy io ho mora ny mametraka SSL amin'ny lohamilina maromaro mihazakazaka ao ambadiky ny mpandanja entana raha ilaina. Izany dia mamela ny mpizara ny tenany tsy "hieritreritra" momba ny SSL mihitsy, fa amin'ny fotoana iray ihany dia mampiasa ny seranana toy ny mahazatra 80. Noho izany ny fametrahana SSL amin'ny mpandrindra entana dia mora kokoa sy mora kokoa noho ny fomba hafa amin'ny fametrahana SSL.

Ankehitriny dia azonao atao ny manidy ny seranana rehetra amin'ny mpizara izay manaiky ny fifandraisana miditra - afa-tsy ny seranan-tsambo 80, ampiasaina hifandraisana amin'ny mpandrindra entana, sy ny seranan-tsambo 22 ho an'ny SSH. Vokatr'izany dia tsy hahomby ny fiezahana hiditra mivantana amin'ny mpizara amin'ny seranana hafa ankoatra ireo roa ireo.

vokatra

Taorian'ny nanaovako izay rehetra noresahiko tamin'ity fitaovana ity, na ny sehatra Docker na ny foto-kevitry ny rojo CI/CD mandeha ho azy dia tsy natahotra ahy intsony. Afaka nanangana rojo fampidirana tsy tapaka aho, izay andrana ny kaody alohan'ny hidirany amin'ny famokarana ary ny kaody dia alefa ho azy amin'ny mpizara. Mbola vaovao amiko ihany izany rehetra izany, ary azoko antoka fa misy fomba hanatsarana ny fizotran'ny asa mandeha ho azy sy hampahomby azy io. Koa raha manana hevitra momba ity raharaha ity ianao dia ampahafantaro ahy. ahy mahalala. Manantena aho fa nanampy anao tamin'ny ezaka ataonao ity lahatsoratra ity. Te-hino aho fa rehefa avy namaky azy ianao, dia nianatra betsaka tahaka ny nianarako teo am-pandinihana ny zavatra rehetra noresahiko tao.

Sal Ao amintsika -tsena misy sary Docker, izay azo apetraka amin'ny tsindry iray. Azonao atao ny manamarina ny fiasan'ny container amin'ny VPS. Omena 3 andro hanaovana fitiliana maimaim-poana ny mpanjifa vaovao rehetra.

Ry mpamaky malala! Mampiasa teknolojia CI/CD ve ianao amin'ny tetikasanao?

Mamorona rojo CI/CD sy asa automatique miaraka amin'i Docker

Source: www.habr.com

Add a comment