
Alguses natuke teooriat. Mis on ?
Lihtsate sÔnadega, see dokument on mÔeldud SaaS rakenduste arendamise lihtsustamiseks, aidates arendajaid ja DevOps insenere probleemide ja praktikatega, mis on sageli esinenud kaasaegsete rakenduste arendamisel.
Dokument on koostatud Heroku platvormi arendajate poolt.
Kaksteistfaktoriline metodoloogia (The Twelve-Factor App) on rakendatav mis tahes programmeerimiskeeles kirjutatud rakendustele ja erinevatele kolmandate osapoolte teenuste kombinatsioonidele (backing services) (andmebaasid, sÔnumijÀrjekorrad, vahemÀlu jne).
LĂŒhidalt metodoloogia aluseks olevatest teguritest:
- Koodibaas â Ăks koodibaas, mida hallatakse versioonihaldussĂŒsteemis â mitu rakendust
- SĂ”ltuvused â Tehke sĂ”ltuvused selgelt teatavaks ja isoleerige need
- Konfiguratsioon â Hoidke konfigureerimine kĂ€itamisreĆŸiimis
- Kolmandate osapoolte teenused (Backing Services) â Kaaluge kolmandate osapoolte teenuseid (backing services) ĂŒhendatavate ressurssidena
- Kogumine, vĂ€ljalase, tĂ€itmine â Rangelt eristage kogumise ja tĂ€itmise etappe
- Protsessid â KĂ€ivitage rakendus kui ĂŒks vĂ”i mitu seisundit mittehoidvat protsessi (stateless)
- Portide sidumine (Port binding) â Ekspordige teenuseid portide sidumise kaudu
- Paralleelsus â Skaalake rakendust protsesside abil
- Utiliseeritavus (Disposability) â Maksimeerige usaldusvÀÀrsust kiire kĂ€ivitamise ja korrektse lĂ”petamise abil
- Rakenduse arendamise/operatiivsete tingimuste pariteet â Hoidke arenduse, vahepealse juurutamise (staging) ja tootmise (production) keskkonnad maksimaalselt sarnased
- Logimine (Logs) â Vaadake logi kui sĂŒndmuste voogu
- HaldusĂŒlesanded â Tehke haldus-/juhtimisĂŒlesandeid ĂŒhekordsete protsesside kaudu
Rohkem teavet 12 teguri kohta leiate jÀrgmistest allikatest:
- â kohustuslik lugemine
- â ametlik tĂ”lge
- â vĂ€rske vaade 12 tegurile nende tĂ€iustamise eesmĂ€rgil.
Mis on Blue-Green juurutamine?
Blue-Green juurutamine on viis rakenduse tarnimiseks tootmisse nii, et lĂ”ppkasutaja ei nĂ€e oma kĂŒljelt mingeid muudatusi. TeisisĂ”nu, rakenduse juurutamine nulliga seisaku.
Klassikaline BG Deploy skeem nÀeb vÀlja nagu alloleval pildil.

- Alguses on 2 fĂŒĂŒsilist serverit, millel on tĂ€pselt sama kood, rakendus, projekt ja seal on ruuter (tasakaalustaja).
- Ruuter suunab algselt kĂ”ik pĂ€ringud ĂŒhe serveri peale (roheline).
- Hetkel, kui on vaja taas vÀlja anda, vÀrskendatakse kogu projekt teisele serverile (sinine), mis praegu ei töötle mingeid pÀringuid.
- PÀrast seda, kui kood on sinises serveris tÀielikult vÀrskendatud, antakse ruuterile kÀsk vahetada roheliselt jÀrgnevaga sinine serverilt.
- NĂŒĂŒd nĂ€evad kĂ”ik kliendid koodi tööd sinisest serverist.
- MÔnda aega, roheline server toimib varukoopiana, kui juurutamine ebaÔnnestub sinine serverisse ja ebaÔnnestumise korral, ruuter suunab kasutajate voolu tagasi roheline serverisse vana stabiilse versiooniga, samas kui uus kood saadetakse tÀiendavaks töötlemiseks ja testimiseks.
- Ja protsessi lÔpuks vÀrskendatakse samuti roheline server. Ja pÀrast selle uuendamist suunab ruuter pÀringute voogu tagasi roheline serverilt.
See kÔik nÀeb vÀlja vÀga hea ja esmapilgul ei tohiks sellega olla mingeid probleeme.
Kuid kuna elame tĂ€napĂ€eva maailmas, siis fĂŒĂŒsilise lĂŒlitamise variant, nagu on nĂ€idatud klassikalises scheemis, ei sobi meile. Salvestage teave hetkel, me tuleme selle juurde hiljem tagasi.
Halvad ja head nÔuanded
MÀrkus: Allpool on toodud tööriistad / metoodikad, mida kasutan mina, saate kasutada mistahes alternatiive, mis omavad sarnaseid funktsioone.
Enamik nĂ€iteid kattub sel vĂ”i teisel viisil veebiarendusega (see on ĂŒllatus), PHP ja Dockeriga.
Allpool on lihtne praktiline kirjeldus faktorite kasutamisest teatud nÀidetes; kui soovite selle teema kohta rohkem teooriat, viidake kÔrgemal linkidele esialgsele allikale.
1. Koodibaas
Kasutage FTP-d ja FileZillat, laadides faile serveritesse ĂŒksikute kaupa, Ă€rge hoidke koodi kusagil mujal kui tootmisserveris.
Projektis peab alati olema ĂŒhtne koodibaas, mis tĂ€hendab, et kogu kood tuleb ĂŒhest allikast. Git repositoorium. Serverid (tootmine, etapp, test1, test2 âŠ) kasutavad koodi ĂŒhest ĂŒhest repositooriumist. Nii saavutame koodi jĂ€rjepidevuse.
2. SÔltuvused
Laadige kÔik raamatukogud kaustades otse projekti juurese. Uuendusi tehke lihtsalt uue koodi kopeerimisega praeguse versiooni raamatukogu kausta. Paigaldage kÔik vajalikud utiliidid otse hostiserverisse, kus töötab veel 20 teenust.
Projekt peab alati olema selgelt arusaadav sÔltuvuste loetelu (sÔltuvustena mÔistan ma ka keskkonda). KÔik sÔltuvused peavad olema selgelt mÀÀratletud ja isoleeritud.
NÀitena vÔtame Composer ja Docker.
Composer â pakihaldur, mis vĂ”imaldab PHP raamatukogusid installida. Composer vĂ”imaldab tĂ€pselt vĂ”i mitte tĂ€pselt versioone mÀÀrata ja neid selgelt kindlaks teha. Serveris vĂ”ib olla 20 erinevat projekti ja igal ĂŒhel on oma isiklik paketide ja raamatukogude loetelu, mis ei sĂ”ltu teistest.
Docker â utiliit, mis vĂ”imaldab mÀÀrata ja isoleerida keskkonda, kus rakendus töötab. Nii nagu composeriga, saame nĂŒĂŒd veelgi tĂ”husamalt mÀÀrata, millega rakendus töötab. Valida kindel PHP versioon, paigaldada ainult projekti tööks vajalikud paketid, lisamata midagi ĂŒleliigset. Ja mis kĂ”ige tĂ€htsam, mitte kattuda hostimasina ja teiste projektide pakettide ning keskkonnaga. See tĂ€hendab, et kĂ”ik serveris töötavad Dockeris projektid saavad kasutada absoluutselt igasuguseid pakette ja tĂ€iesti erinevat keskkonda.
3. Konfigureerimine
Salvestage konfigureerimised konstantide kaudu otse koodis. Eraldi konstantid testserveri jaoks, eraldi tootmisserveri jaoks. Siduge rakenduse töö sÔltuvus keskkonnast otse projekti Àri loogikas, kasutades if else konstruktsioone.
Konfiguratsioonid â on ainus, mille poolest projektide kasutuselevĂ”tud (deployment) peaksid erinema. Ideaalis tuleks konfiguratsioonid edastada keskkonnamuutujate (env vars) kaudu.
Isegi kui hoiate mitut konfiguratsioonifaili .config.prod .config.local ja nimetate need juurutamise hetkel ĂŒmber .config-iks (peamine konfiguraaf, millest rakendus andmeid loeb) â see pole Ă”ige lĂ€henemine, sest sellisel juhul on konfiguratsioonide teave kĂ”igile rakenduse arendajatele kergesti kĂ€tte saadav ning tootmisserveri andmed vĂ”ivad olla ĂŒlekantavad. KĂ”ik konfiguratsioonid peaksid olema salvestatud otse juurutussĂŒsteemi (CI/CD) ja genereeritud erinevate keskkondade jaoks erinevate vÀÀrtustega, mis on konkreetses keskkonnas vajalikud juurutamise hetkel.
4. Kolmandate osapoolte teenused (Backing Services)
Siduge rangelt keskkonnaga, kasutage erinevaid ĂŒhendusi samadele teenustele teatud keskkondades.
Tegelikult kattub see punkt tugevalt konfiguratsioonide punktiga, kuna ilma selle punktita ei ole vĂ”imalik luua korralikke konfiguratsioonandmeid ja ĂŒldse konfigureerimise vĂ”imalus kaob.
KĂ”ik ĂŒhendused vĂ€listesse teenustesse, nagu jĂ€rjekorraserverid, andmebaasid, vahemĂ€luteenused, peaksid olema ĂŒhtsed nii kohaliku keskkonna kui ka vĂ€lise / tootmiskeskkonna jaoks. TeisisĂ”nu, ma vĂ”in igal hetkel muuda ĂŒhendusstringi, asendades juurdepÀÀsu andmebaasile #1 andmebaasiga #2 ilma rakenduskoodi muutmata. NĂ€iteks, kui teenust skaleeritakse, ei pea te eriliselt seadma ĂŒhendust lisavarustuse vahemĂ€luga.
5. Kogumine, vabastamine, tÀitmine
Serveris peaks olema ainult koodi lĂ”ppversioon, ilma vĂ”imaluseta tagasi minna varasemale vabastusele. Ărge kĂŒlvake ketta ruumi. Kes arvab, et vĂ”ib viga sisaldava koodi tootmisse saata, pole hea programmeerija!
KÔik juurutamisetapid peaksid olema omavahel eraldatud.
Olge vĂ”imalus tagasi minna. Tehke vabastusi, hoides kiire juurdepÀÀsuga vanu rakenduste koopiaid (juba kokku pandud ja lahinguks valmis), et vajadusel vana versioon taastada. Nii et tinglikult on olemas kaust releases ja kaust current, ja pĂ€rast edukat juurutamist ja kogumist kaust current seondub uue vĂ€ljaande sĂŒmboolse lingiga, mis asub sees releases tingimusliku nimega vĂ€ljaande numbrit.
Siin tuleme me tagasi Blue-Green deployment'i juurde, mis vÔimaldab mitte ainult vahetada koodi vahel, vaid ka vahetada kÔiki ressursse ja isegi keskkondi, vÔimaldades kÔik tagasi tagasi pöörata.
6. Protsessid
Hoidke rakenduse olekud otse rakenduses. Kasutage rakenduse enda RAM-i seansse. Kasutage nii palju jagatavaid ressursse kui vĂ”imalik. Oletage, et rakendusel vĂ”ib olla ainult ĂŒks protsess ja vĂ€ltige skaleerimise vĂ”imalust.
Seoses sessioonidega salvestage andmeid ainult kolmandate osapoolte hallatavasse vahemĂ€lu (memcached, redis). Sel viisil, isegi kui teil on kĂ€ivitatud 20 rakenduse protsessi, saab ĂŒkskĂ”ik milline neist, pöördudes vahemĂ€lu poole, jĂ€tkata kliendiga töötamist samas olekus, milles kasutaja oli, töötades rakenduses teises protsessis. Sellise lĂ€henemise korral toimivad kĂ”ik kolmandate osapoolte teenused probleemideta, olenemata nende koopiate arvust.
7. Pordide sidumine (Port binding)
Ainult veebiserver peaks teadma, kuidas kolmandate osapoolte teenustega töötada. Veel parem on tÔsta kolmandate osapoolte teenused otse veebiserveri sisse, nÀiteks nagu PHP moodul Apache's.
KÔik teie teenused peaksid olema omavahel kergesti kÀttesaadavad, pöördudes mingisuguse aadressi ja pordi poole (localgost:5432, localhost:3000, nginx:80, php-fpm:9000). See tÀhendab, et nginx-is saan ma juurde pÀÀseda nii php-fpm-ile kui postgres'ile, php-fpm-ist postgres'ile ja nginx'ile ning igast teenusest saan ma pöörduda teise teenuse poole. Nii jÀÀb teenuse elujÔud sÔltumatuks teise teenuse elujÔudest.
8. Paralleelsus
Töötage ĂŒhe protsessiga, et vĂ€ltida mitme protsessi koostöötlemise probleeme!
JÀtke vÔimalus skaleerimiseks. Docker Swarm sobib selleks suurepÀraselt.
Docker Swarm on tööriist konteineri klastrite loomiseks ja haldamiseks erinevate masinate vahel vĂ”i paljude konteinerite korraldamiseks ĂŒhel masinal.
Swarm'i kasutades saan mÀÀrata, kui palju ressursse eraldan igale protsessile ja kui palju sama teenuse protsesse kÀitama hakkan, ning sisemine koormuse tasakaalustaja, mis vÔtab andmeid mÀÀratud sadamast, suunab need automaatselt protsessidele. Nii et kui nÀen, et serveri koormus on kasvanud, saan lisada rohkem protsesse, vÀhendades seelÀbi teatud protsesside koormust.
9. HÀvitamisvÔime (Disposability)
Ărge kasutage jĂ€rjekordi protsesside ja andmete töötlemiseks. Ăhe protsessi tapmine peaks mĂ”jutama kogu rakenduse tööd. Kui ĂŒks teenus kukub, kukub kogu sĂŒsteem.
Iga protsess ja teenus vĂ”ivad igal hetkel vĂ€lja lĂŒlitada, ilma et see mĂ”jutaks teisi teenuseid (loomulikult ei ole mĂ”te selles, et teenus on millegipĂ€rast teisele teenusele kergesti kĂ€tte saadav, vaid et teine teenus ei lĂŒlitu koos sellega vĂ€lja). KĂ”ik protsessid peaksid lĂ”petama sujuvalt, nii et nende lĂ”petamine ei kahjusta andmeid ja sĂŒsteem töötab jĂ€rgmisel sisselĂŒlitamisel korralikult. Seega ei tohiks isegi kriitilise katkestamise korral andmed kahjustada minna (siin sobib tehingumehhanism, kus andmebaasi pĂ€ringud toimivad ainult gruppidena; kui ĂŒkski pĂ€ring grupist ei toimi vĂ”i toimib vea korral, siis ei toimu tegelikult ka ĂŒhtegi teist pĂ€ringut grupist).
10. Rakenduse arendamise/töö pariteet
Toodang, etapp ja rakenduse kohalik versioon peavad olema erinevad. Toode kasutab Yii Lite raamistikku, kohapeal aga Yii, et tootmine töötaks sujuvamalt!
Tegelikult peaks kĂ”ik koodide juurutamised ja töötamine toimuma peaaegu identses keskkonnas (ei rÀÀgita fĂŒĂŒsilisest riistvarast). Samuti peaks iga arendusmeeskonna liige suutma koodi vajadusel toota, mitte mingisugune spetsiaalselt koolitatud devops osakond, mis suudab rakendust tootmises tĂ”sta ainult tĂ€nu erioskusele.
Sellega aitab meid ka Docker. Kui jĂ€rgime kĂ”iki eelnevaid punkte, vĂ€hendab docker keskkonna juurutamise protsessi nii tootmises kui ka kohalikul masinal ĂŒhe-kahte kĂ€sku sisestamiseni.
11. Logimine (Logs)
Logid kirjutame failidesse ja andmebaasi! Failidest ja andmebaasist logisid ei puhasta. Ostame lihtsalt 9000 petabaiti kÔvaketta ja kÔik.
Logis tuleb kĂ€sitleda kui sĂŒndmuste voogu. Rakendus ei tohi tegeleda logide töötlemisega. Logid peaksid olema kas stdout'is vĂ”i saadetud protokolli nagu udp kaudu, et logide töötlemine ei tekitaks rakenduses probleeme. Selleks sobib hĂ€sti graylog. Graylog, mis vĂ”tab kĂ”ik logid vastu udp kaudu (selle protokolli puhul ei pea ootama kinnitust pakettide edastamise kohta), ei sega rakendust ja tegeleb ainult logide struktureerimise ja töötlemisega. Rakenduse loogika ei muutu, kui kasutatakse selliseid lĂ€henemisviise.
12. Administreerimise ĂŒlesanded
Andmete, andmebaasi jne uuendamiseks kasutage eraldi loodud lÔpp-punkti API-s, mille tÀitmine kaks korda jÀrjest toob kaasa vÔimaliku dubleerimise. Kuid te ju ei ole tobedad, et vajutada seda kaks korda, ja migratsioonid pole meile vajalikud.
KĂ”ik haldamise ĂŒlesanded peaksid toimuma samas keskkonnas kui kogu kood, vĂ€ljaande tasemel. See tĂ€hendab, et kui peame andmebaasi struktuuri muutma, ei tee me seda kĂ€sitsi, muutes veergude nimesid ja lisades uusi mĂ”ne visuaalse andmebaasi haldustööriista kaudu. Selliste asjade jaoks loome eraldi skriptid â migratsioonid, mis kĂ€ivitatakse igal pool ja kĂ”igis keskkondades ĂŒhtlaselt ja arusaadava tulemusega. KĂ”igi teiste ĂŒlesannete puhul, nagu projekti andmetega tĂ€itmine, tuleb rakendada sarnaseid metoodikaid.
PHP, Laravel, Laradock, Docker-Compose'i rakenduse nÀide
P.S. KÔik nÀited tehti MacOS-is. Enamik sobib ka Linuxile. Windowsi kasutajad, palun vabandage, aga ma pole pikka aega Windowsiga töötanud.
Kujutame ette olukorda, kus meie PC-l ei ole installitud ĂŒhtegi PHP versiooni ja tegelikult ei ole seal midagi.
Paigaldame docker ja docker-compose uusimad versioonid. (seda saab internetist leida)
docker -v &&
docker-compose -v

1. Paigaldame
git clone https://github.com/Laradock/laradock.git &&
ls

Laradock on tĂ”esti suurepĂ€rane platvorm, kus on kogutud palju konteinerite ja abivahendeid. Kuid ma ei soovitaks kasutada Laradock'i tootmisreĆŸiimis ilma muudatusteta, kuna see on liialt mahukas. Paremini on luua oma konteinerid tuginedes Laradock'i nĂ€idetele, mis vĂ”imaldab rohkem optimeerimist, sest kĂ”ike sealset korraga keegi ei vaja.
2. Konfigureerime Laradock'i meie rakenduse tööks.
cd laradock &&
cp env-example .env

2.1. Ava habr kataloog (ĂŒlemine kaust, kuhu laradock klooniti) mĂ”ne redigeerija abil. (Minu puhul on see PHPStorm)
Sel hetkel mÀÀrame ainult projekti nime.

2.2. KÀivitame workspace'i konteineri. (Teie juhtumi puhul hakkavad pildid mÔnda aega ehitama)
Workspace on spetsiaalselt ettevalmistatud pilt arendaja poolt raamistiku kasutamiseks.
Siseneme konteinerisse jÀrgmise kÀsuga
docker-compose up -d workspace &&
docker-compose exec workspace bash

2.3. Paigaldame Laravel'i
composer create-project --prefer-dist laravel/laravel application 
2.4. PĂ€rast paigaldamist kontrollime, kas projektikaust on loodud, ja peatame compose'i.
ls
exit
docker-compose down

2.5. Oleme tagasi PHPStormis ja seadistame meie laravel rakenduse Ôiged teed .env failis.

3. Lisame kogu koodi Git'i.
Selleks loome Githubis (vÔi mÔnes muus kohas) hoidla. Liigume terminalis habr katalooge ja tÀidame jÀrgmise koodi.
echo "# habr-12factor" >> README.md
git init
git add README.md
git commit -m "esimene commit"
git remote add origin git@github.com:nzulfigarov/habr-12factor.git # siin on link teie hoidlasse
git push -u origin master
git status
Kontrollime, kas kÔik on korras.

Mugavuse huvides soovitan kasutada mingit visuaalset liidest Gitâi jaoks, minu puhul on see . (siin on suunamislink)
4. KĂ€ivitame!
Enne kĂ€ivitamist veenduge, et 80 ja 443 pordil ei oleks midagi ĂŒles riputatud.
docker-compose up -d nginx php-fpm 
Seega meie projekt koosneb 3 eraldi teenusest:
- nginx â veebiserver
- php-fpm â php, et vastu vĂ”tta pĂ€ringuid veebiserverilt
- workspace â php arendajale
Praeguseks hetkeks oleme saavutanud, et oleme loonud rakenduse, mis vastab juba 4 punktile 12-st, nimelt:
1. Koodibaas â kĂ”ik kood on ĂŒhes hoidlas (vĂ€ike mĂ€rkuse koht: vĂ”ib-olla oleks Ă”igem tuua docker laraveli projekti sisse, kuid see ei ole pĂ”himĂ”tteliselt oluline).
2. SĂ”ltuvused â KĂ”ik meie sĂ”ltuvused on selgelt mÀÀratletud failis application/composer.json ja iga konteineri Dockerfile'is.
3. Kolmandate osapoolte teenused (Backing Services) â Iga teenus (php-fpm, nginx, workspace) elab oma elu ja on vĂ€liselt ĂŒhendatud; töötades ĂŒhe teenusega, ei mĂ”juta see teisi.
4. Protsessid â Iga teenus on ĂŒks protsess. Iga teenus ei sĂ€ilita sisesetstate.
5. Portide sidumine (Port binding)
docker ps

Kuidas nĂ€eme, on iga teenus ĂŒles seatud oma porti ja on ligipÀÀsetav kĂ”igile teistele teenustele.
6. Paralleelsus
Docker vÔimaldab meil tÔsta mitu protsessi samadest teenustest automaatse koormuse tasakaalustamisega nende vahel.
LĂ”petame konteinerid ja kĂ€ivitame need lipu kaudu âscale
docker-compose down &&
docker-compose up -d --scale php-fpm=3 nginx php-fpm

Kuidas nĂ€eme, on php-fpm konteineril loodud koopiad. Me ei pea selle konteineri töö kĂ€igus midagi muutma. JĂ€tkame temaga ĂŒhendust porti 9000 kaudu, samas kui Docker reguleerib meie eest koormust konteinerite vahel.
7. Utiliseeritavus (Disposability) â iga konteineri saab lĂ”petada teisele kahju tegemata. KĂȘtesed vĂ”i taaskĂ€ivitamine konteiner ei mĂ”juta rakenduse tööd jĂ€rgmiste kĂ€ivituste ajal. Iga konteinerit saab samuti igal ajal tĂ”sta.
8. Rakenduse arendamise/operatiivsete tingimuste pariteet â kĂ”ik meie keskkonnad on ĂŒhesugused. Kui kĂ€itate sĂŒsteemi serveris tootmises, ei pea te oma kĂ€skudes midagi muutma. KĂ”ik pĂ”hineb tĂ€pselt Dockeril.
9. Logimine (Logs) â kĂ”ik logid nendes konteinerites suunduvad voogu ja on nĂ€htavad Dockeri konsoolis. (antud juhul, tegelikult, teiste isetehtud konteinerite puhul vĂ”ib see olla erinev, kui te ei hoolitse selle eest)
docker-compose logs -f 
Aga siin on probleem, et PHP ja Nginxi vaikeseaded kirjutavad samuti logisid faili. 12-faktori pĂ”himĂ”ttete jĂ€rgimiseks on vajalik vĂ€lja lĂŒlitada logide kirjutamine faili iga konteineri konfiguratsioonis eraldi.
Samuti pakub docker vÔimalust suunata logid mitte ainult stdouti, vaid ka sellistesse asjadesse nagu graylog, millest ma eelpool rÀÀkisin. Graylogis saame logidega operatiivida kuidas iganes soovime ja meie rakendus ei mÀrka seda.
10. HaldusĂŒlesanded â kĂ”ik haldusĂŒlesanded lahendab Laravel tĂ€nu artisan tööriistale just nii, nagu 12-faktori rakenduse loojaid soovisid.
NÀitena nÀitan, kuidas teostatakse mÔned kÀsklused.
Siseneme konteinerisse.
docker-compose exec workspace bash
php artisan list

NĂŒĂŒd saame kasutada igat kĂ€sku. (pange tĂ€hele, et me ei ole andmebaasi ja vahemĂ€lu seadistanud, mistĂ”ttu poolest kĂ€skudest ei tööta Ă”igesti, kuna need on mĂ”eldud tööks vahemĂ€lu ja andmebaasiga).

11. Konfiguratsioonid ja 12. Kogumine, vÀljalase, tÀitmine
Selle osa tahan pĂŒhendada Blue-Green Deployment'ile, kuid see osutus selle artikli jaoks liiga ulatuslikuks. Kirjutan sellest eraldi artiklis.
LĂŒhidalt öeldes pĂ”hineb kontseptsioon CI/CD sĂŒsteemidel nagu Jenkins ja Gitlab CI. Nii selles kui ka teises saab seada keskkonnaga seotud keskkonnamuutujad. Vastavalt sellele toimub punktide tĂ€itmine Konfiguratsioonidega.
Ja punkt, mis puudutab Kogumine, vÀljalase, tÀitmine lahendatakse mÔlemas utiliidis sisseehitatud funktsioonidega, mida nimetatakse Pipeline.
Pipeline mis vĂ”imaldab jagada deploymendi protsessi mitmeks etapiks, tuues esile ehituse, vĂ€lja andmise ja tĂ€itmise etapid. Samuti saate Pipeline'is luua varukoopiaid ja teha ĂŒldiselt kĂ”ike. See tööriist omab piiramatu potentsiaali.
Rakenduse kood asub .
Ărge unustage submodule kloonimisel initsialiseerida.
P.S.: Tooted, mis puudutavad neid lÀhenemisi, on rakendatavad ka teiste utiliidide ja programmeerimiskeeltega. Peaasi, et sisu ei erineks.
Allikas: habr.com
