Technológia kontajnerizácie zaznamenala obrovský pokrok v technologickom priestore vývoja softvéru ako najuznávanejšia metóda balenia a nasadzovania aplikácií v cloudových prostrediach. To si vyžiadala potreba kontinuálnej integrácie (CI) a kontinuálneho nasadzovania (CD), ktoré sú definujúcimi aspektmi DevOps. Softvéroví vývojári a inžinieri využívajú kontajnery na dosiahnutie aspektu CI/CD v softvérovej architektúre. Kontajner je v podstate plne zabalená prenosná a samostatná výpočtová platforma. Hoci na webe existuje niekoľko kontajnerových platforiem, Docker je tou najbežnejšou.
Docker je open-source kontajnerová platforma, ktorá robí vývoj efektívnym a predvídateľným. Docker ponúka verejný repozitár Docker obrazov dostupný na Docker Hub. Obsahuje mnoho open-source Docker obrazov pre najbežnejšie implementácie, ktoré si môžete stiahnuť a použiť. Keďže ide o verejný repozitár, môžete doň bezplatne pridávať aj vlastné Docker obrazy a zdieľať ich s verejnosťou. Ak však máte súkromný/vlastnícky kód, možno budete musieť platiť za súkromný repozitár obrazov alebo si vybudovať vlastnú službu repozitára obrazov. Tu prichádza na rad GitLab.
GitLab je webový Git repozitár, ktorý je viac než len nástrojom na správu verzií. Poskytuje DevOps nástroje pre kontinuálnu integráciu a nasadzovanie, sledovanie chýb, registre Docker obrazov a ďalšie. Ponúka tri možnosti: GitLab Community Edition (CE), GitLab Enterprise Edition (EE) a GitLab SaaS. GitLab CE a GitLab EE sú samo-spravované riešenia, ktoré vám umožňujú stiahnuť, nainštalovať a spravovať inštanciu GitLabu sami. GitLab SaaS je hostovaný spoločnosťou GitLab inc a nemusíte sa starať o inštaláciu ničoho, aby ste ho mohli používať.
V predchádzajúcom návode sme vám ukázali, ako nastaviť inštanciu GitLabu na serveri CloudSigma a hostovať vlastný Git repozitár. Tiež sme vám ukázali, ako implementovať pipeline-y kontinuálnej integrácie s GitLab runnerom, aby sa automaticky zostavili a spustili vaše testy vždy, keď dôjde k novému commitu. Ak ste neprešli spomínanými návodmi, urobte tak, pretože sú stavebnými kameňmi tohto návodu.
V tomto návode si ukážeme, ako zostaviť jednoduchý Docker obraz a hostovať ho pomocou vlastnej inštancie GitLabu (či už používate Community Edition alebo Enterprise Edition – postup krokov je rovnaký).
Požiadavky
Ak chcete postupovať podľa každého kroku tohto návodu, uistite sa, že máte GitLab CI runner a vlastný GitLab server, ako je vysvetlené nižšie.
1. Zabezpečený GitLab server
Tento server budeme používať na ukladanie zdrojového kódu, spúšťanie úloh CI/CD a hostovanie registra Docker obrazov. Mali by ste mať server s aspoň 2 CPU jadrami a 4GB pamäte RAM, ako odporúča GitLab na inštaláciu samo-spravovanej inštancie GitLabu. Budete tiež potrebovať registrovaný názov domény, ktorý nasmerujete na server, pretože ho budeme používať na získanie SSL certifikátu od Let’s Encrypt na zabezpečenie servera. Nižšie uvádzame niekoľko odkazov, podľa ktorých môžete nastaviť vlastnú inštanciu GitLabu.
- Zaregistrujte si názov domény u ľubovoľného registrátora domén podľa vášho výberu a nasmerujte ho na CloudSigma.
- Postupujte podľa tohto návodu na počiatočné nastavenie servera Ubuntu, pridanie používateľa bez oprávnení root, a povolenie firewallu UFW v Ubuntu.
- Na záver postupujte podľa tohto návodu na inštaláciu a konfiguráciu vlastnej inštancie GitLabu.
2. GitLab CI runner
GitLab CI runner je potrebný na spúšťanie automatizovaných úloh pre vaše testovacie prípady. Návod na ako nastaviť pipeline-y kontinuálnej integrácie GitLabu na Ubuntu 20.04 vám poskytne prehľad o GitLab CI serveri a ukáže vám, ako spúšťať úlohy. Ak ste tak ešte neurobili, postupujte podľa krokov v návode na nastavenie služby GitLab CI runner. Návod obsahuje demo aplikáciu v Node.js s testovacími prípadmi – budeme ju používať v tomto návode.
Teraz poďme začať!
Krok 1: Konfigurácia privilegovaného GitLab CI runnera
V návode na nastavenie GitLab CI runnera sme nakonfigurovali GitLab runner pomocou sudo gitlab-runner register príkaz, ktorý nám umožnil interaktívne pridať požadované parametre. Hoci to fungovalo pre náš predchádzajúci prípad použitia, ktorým bolo spúšťanie zostavení a testov v izolovaných kontajneroch Docker, nemusí to zvládnuť zostavovanie obrazov Docker. Zostavovanie obrazov Docker vyžaduje, aby mal runner plný prístup k službe Docker. Túto konfiguráciu môžete dosiahnuť použitím oficiálneho docker-in-docker obrazu na spúšťanie úloh. Takáto konfigurácia zahŕňa udelenie runneru privilegovaného režimu vykonávania.
Hoci udelenie privilegovaného režimu vykonávania je nevyhnutné na zostavovanie obrazov Docker, prináša so sebou bezpečnostné riziká. Je to preto, že to zahŕňa zrušenie bezpečnostných výhod kontajnerov. Možno si myslíte, že ostatné runnery Docker sú bezpečné, ale majú rovnaké problémy, ako je vysvetlené v oficiálnej dokumentácii Docker.
Vytvoríme ďalší runner s privilegovaným režimom vykonávania. Pôjde o runner špecifický pre projekt z dôvodu vyššie uvedených bezpečnostných dôsledkov. Bude prijímať úlohy z projektu Node Pipeline, ktorý sme vytvorili v návode na tému ako nastaviť kontinuálne CI pipeline s GitLabom.
Prvá vec, ktorú by ste mali urobiť, je skontrolovať, či sú Shared Runners na projekte zakázané. Na stránke projektu Node Pipeline kliknite na Settings v ľavom dolnom menu a vyberte CI/CD v podmenu:
Nájdite tlačidlo Expand v sekcii Runners a kliknutím naň zobrazte podrobnosti o dostupných runneroch:
Kliknutím na prepínač Disable Shared Runners pre tento projekt ich zakážte. Ak ste v predchádzajúcej časti pridali runner špecifický pre projekt, zakážte aj ten. Budeme pridávať privilegovaný runner špecifický pre projekt na spúšťanie úloh pre tento projekt. To zaručuje, že neskončíme s chybami zostavenia v prípade, že GitLab náhodne priradí úlohy runnerom, ktoré neboli zaregistrované s privilegovaným režimom vykonávania. Na snímke obrazovky vyššie, pod záložkou Specific runnersregistračnýregistračný token vášho projektu. Poznačte si ho, pretože ho použijete nižšie.
| Note: Runner špecifický pre projekt môže byť priradený aj k iným projektom zo sekcie Admin panel > Runners. Keď vyberiete runner zo zoznamu runnerov, dostanete sa na stránku konfigurácie runnera. Prejdite nadol a zobrazte sekciu Restrict projects for this runner: |
Je čas spustiť terminál. Ak ste nevykonali kroky v návode na tému ako nastaviť GitLab Continuous Integration Pipelines na Ubuntu 20.04, dajte si pauzu od tohto návodu a postupujte podľa krokov, aby ste mali server so službou GitLab CI runner. V opačnom prípade sa prihláste cez SSH na server runnera GitLab CI pomocou vášho sudo používateľa pre ďalšie kroky.
Ak chcete nastaviť privilegovaný runner špecifický pre projekt, zadajte do terminálu nasledujúci príkaz, pričom nahraďte názov vašej domény a registračný token skopírovaný vyššie:
|
1 2 3 4 5 6 7 |
sudo gitlab-runner register -n \ --url https://your-gitlab-instance-domain.com/ \ --registration-token your-project-specifc-registration-token \ --executor docker \ --description "docker-privileged-builder" \ --docker-image "docker:latest" \ --docker-privilegedh |
Tento výstup ukazuje úspešnú registráciu:
Ak chcete overiť, že vaša inštancia GitLab zachytila runner, vráťte sa do prehliadača a obnovte stránku Settings > CI/CD. Rozbaľte sekciu Runners a mali by ste vidieť svoj runner pod Specific Runners:
Voliteľne, ak prejdete do Admin Panel (kliknutím na tlačidlo Menu v hornom paneli a výberom Admin), potom vyberte Runners v možnostiach ponuky:
Mali by ste sa dostať na túto stránku zobrazujúcu všetky dostupné runnery pripojené k vašej inštancii GitLab, zdieľané aj špecifické pre projekt:
Do tohto bodu ste úspešne nastavili runner, ktorý dokáže zostavovať obrazy Docker.
Krok 2: Konfigurácia Docker Registry v GitLabe
Niektoré kľúčové pracovné postupy vyžadujú nezávislosť od externých služieb. Práve vtedy prichádza na rad samostatne spravovaný Docker Registry od GitLabu. Je nielen bezpečný, ale tiež zaisťuje flexibilitu pri prispôsobovaní vašich úloh a pipeline podľa vašich potrieb. Ak chcete nastaviť Docker Registry, budete upravovať konfiguračný súbor GitLabu. Najprv sa prihláste cez SSH do inštancie GitLabu a potom otvorte súbor pomocou nasledujúceho príkazu:
|
1 |
sudo nano /etc/gitlab/gitlab.rb |
Prejdite nadol, kým neuvidíte Container Registry Settings:
Odkomentujte riadok s registry_external_url a nastavte ho na názov domény vašej inštancie GitLabu, pričom na konci uveďte port 8888 na konci:
|
1 |
registry_external_url 'https://your-gitlab-domain.com:8888' |
Ďalej musíme pridaním nasledujúcich riadkov špecifikovať, kde register nájde certifikáty Let’s Encrypt. Nezabudnite ich upraviť podľa skutočného názvu domény vašej inštancie GitLabu:
|
1 2 |
registry_nginx['ssl_certificate'] = "/etc/letsencrypt/live/your-gitlab-domain.com/fullchain.pem" registry_nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/your-gitlab-domain.com/privkey.pem" |
Po dokončení súbor uložte a zatvorte. Zadajte nasledujúci príkaz do terminálu na rekonfiguráciu GitLabu:
|
1 |
sudo gitlab-ctl reconfigure |
Potom počkajte niekoľko sekúnd, kým sa príkaz dokončí. V prípade úspechu by ste mali vidieť nasledujúci výstup:
Ďalej musíme zabezpečiť, aby firewall (ufw) povoľoval prevádzku na port registra, ktorý sme priradili, pomocou príkazu:
|
1 |
sudo ufw allow 8888 |
Potom musíte otestovať, či Docker Registry beží, a to tak, že sa doň prihlásite z iného počítača s nainštalovaným Dockerom pomocou príkazu docker login. Ak ste nenastavili Docker vo svojom lokálnom prostredí, môžete sa prihlásiť cez SSH do servera GitLab CI runner, keďže ten už má Docker nainštalovaný. Potom spustite nasledujúci príkaz, pričom samozrejme uveďte názov domény vašej inštancie GitLabu:
|
1 |
docker login your-gitlab-domain.com:8888 |
Váš výstup zobrazí správu Login Succeeded takto:
To znamená, že register bol úspešne nakonfigurovaný a funguje. Keď vytvoríte obrazy, uložia sa lokálne v súborovom systéme servera GitLab. Pre súkromný firemný register je to v poriadku. Ak však plánujete nechať svoj register otvorený pre verejnosť, môžete potrebovať väčšie úložisko. Našťastie GitLab ponúka možnosti pripojenia k úložným bucketom. Viac si môžete prečítať v oficiálnej dokumentácii pre GitLab container registry to see how you can configure a storage bucket for your GitLab instance.
Krok 3: Upravte súbor gitlab-ci.yml a zostavte Docker obraz
Ak chcete pokračovať v tomto kroku, mali by ste mať projekt Node Pipeline vo vašej inštancii GitLabu. Tu je zobrazenie projektu na GitLabe:
Hovorili sme o gitlab-ci.yml ako o súbore, ktorý GitLab CI runner číta pri spustení, aby vedel, ako zostaviť vašu aplikáciu a vykonať automatizované testy. Tento súbor musíme upraviť a pridať pokyny na zostavenie Docker obrazov. Tento súbor sa môžete rozhodnúť upraviť priamo v rozhraní GitLabu. Môžete ho tiež naklonovať do svojho lokálneho počítača, upraviť vo svojom obľúbenom editore a potom vykonať commit a git push späť do GitLabu. Pre stručnosť použijeme rozhranie GitLabu.
Kliknutím na súbor ho otvorte a potom kliknite na tlačidlo Upraviť :
Tým sa súbor otvorí pripravený na úpravu. Vymažte zo súboru všetko a pridajte nasledujúci kód:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
image: docker:20-dind services: - name: docker:20-dind alias: docker command: ["--tls=false"] stages: - build - test - release variables: TEST_IMAGE: gitlab-domain.com:8888/hackins/node_pipeline:$CI_COMMIT_REF_NAME RELEASE_IMAGE: gitlab-domain.com:8888/hackins/node_pipeline:latest DOCKER_HOST: tcp://docker:2375 DOCKER_DRIVER: overlay2 DOCKER_TLS_CERTDIR: "" before_script: - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN gitlab-domain.com:8888 build: stage: build script: - docker build --pull -t $TEST_IMAGE . - docker push $TEST_IMAGE test: stage: test script: - docker pull $TEST_IMAGE - docker run $TEST_IMAGE npm test release: stage: release script: - docker pull $TEST_IMAGE - docker tag $TEST_IMAGE $RELEASE_IMAGE - docker push $RELEASE_IMAGE only: - master |
Počas pridávania vyššie uvedeného úryvku kódu nezabudnite aktualizovať zvýraznenú časť o vaše skutočné údaje. Keď skončíte, uložte zmeny stlačením tlačidla Commit changes. Ak ste pracovali mimo GitLabu, potvrďte (commit) a odošlite (push) svoje zmeny.
Poďme pochopiť, čo robí kód, ktorý sme pridali do súboru .gitlab-ci.yml. Prvý riadok hovorí GitLabu, aby použil oficiálny Docker-in-Docker obraz a pripojí ho k službe docker-in-docker (docker:dind). Potom definujeme fázy pre build, test a release. Fáza build zostaví obraz pomocou inštrukcií v Dockerfile a potom ho nahrá do Docker Registry, ktorú sme nastavili v predchádzajúcom kroku.
Keď fáza build úspešne skončí, fáza test stiahne obraz, spustí ho ako kontajner a vykoná príkaz npm test na vykonanie automatizovaných testov vo vnútri kontajnera. Ak fáza test úspešne skončí, prevezme riadenie fáza release. Vo fáze release sa obraz stiahne a označí tagom node_pipeline:latest. Potom sa odošle späť do registra.
Toto je len základná konfigurácia pre ukážkový projekt. Pre vaše reálne projekty môžete mať ďalšie fázy, napríklad staging, production atď. Keď súbor po úprave uložíte, spustí sa pipeline. Tá následne začne spúšťať úlohy. Vráťte sa na stránku Node Pipeline. Mali by ste vidieť, že úloha momentálne beží:
Kliknutím na ikonu indikátora CI zobrazíte rôzne fázy úlohy:
Ako môžete vidieť na snímke obrazovky vyššie, všetky fázy boli úspešné, čo potvrdzujú zelené ikony začiarknutia. Kliknutím na každú fázu môžete zobraziť výstup úlohy:
V ponuke na ľavej strane kliknite na Packages & Registries a vyberte Container Registry:
Tým sa otvorí stránka so zoznamom dostupných Docker obrazov pre vybraný projekt. Obraz, ktorý sme zostavili a vydali, by sa mal zobraziť v zozname s priradeným tagom assigned:
Kliknutím zobrazíte rôzne tagy pre tento obraz:
Ak máte Docker nainštalovaný vo svojom lokálnom prostredí, môžete obraz stiahnuť (pull) a otestovať, či beží podľa očakávania. Kliknite na ikonu Copy vedľa názvu tagu obrazu. Do schránky sa skopíruje celý názov obrazu, ktorý môžete použiť s príkazom docker pull:
|
1 2 |
docker pull feetspark.com:8888/hackins/node_pipeline:latest docker run -it --rm -p 8090:8090 feetspark.com:8888/hackins/node_pipeline:latest |
Vyššie uvedené príkazy stiahnu obraz a spustia ho vo vnútri kontajnera:
Aplikácia je teraz dostupná na porte 8090. Ak otvoríte svoj prehliadač a prejdete na your-IP-address:8090 mali by ste vidieť zobrazenú stránku:
Ak vo svojom prehliadači vidíte takúto stránku, úspešne ste vytvorili Docker image a zdieľali ho v súkromnom Docker Registry. V budúcnosti, ak vykonáte akékoľvek zmeny v master vetve, spustia sa fázy definované v súbore .gitlab-ci.yml a ak uspejú, nový Docker image s tagom latest sa znova zostaví a odošle do registra.
Záver
V tomto projekte ste sa naučili, ako pridať privileged GitLab runner do vašej vlastnej inštancie GitLabu (self-managed), aby ste mohli vytvárať Docker images. Tiež ste nakonfigurovali súkromný register Docker images na hosťovanie vašich obrazov. Pomocou projektu Node pipeline ste mohli otestovať každý komponent nastavenia a uistiť sa, že sa pripojili a komunikovali podľa očakávania. Keď bol váš image dostupný v registri, mohli ste ho stiahnuť a overiť, že beží v kontajneri.
Toto je úvodný návod, ktorý vám poskytne základy, na ktorých môžete stavať. Postupujte podľa oficiálnej dokumentácie GitLabu, aby ste sa dozvedeli viac o GitLabe. Tento odkaz môže poskytnúť informácie o GitLab Container Registry.
Ďalšie zdroje o využívaní Dockeru nájdete v ďalších návodoch na našom blogu:
- Zdieľanie dát medzi Docker kontajnermi
- Nastavenie súkromného Docker registra na Ubuntu 18.04
- Ako zdieľať dáta medzi Docker kontajnerom a hostiteľom
- Vyčistenie Docker zdrojov – obrazy, kontajnery a zväzky
Príjemnú prácu!

















Komentáre
Zatiaľ žiadne komentáre. Buďte prvý.