Cum de a testa containere cu containere CI gitlab ROR
Ca recipiente de testare ROR GitLab CI container 8
- cum ar fi Forbes, doar mai bine.
Ce bine GitLab, este faptul că, fiind în mărime de elefant într-un magazin de China, el este capabil de a stabili cu precizie, și aproape întotdeauna funcționează cu cutia. Dar rău este capabil să recupereze și să aibă grijă de ei înșiși, atunci când acesta este brațele foarte drepte ca-mi violeze împrejurimile sale obișnuite. Nu voi intra în modul în care am fost în stare să-l omoare, până la punctul în care chiar și îndepărtarea și instalarea de la zero nu ajută, dar pentru a evita o altă saga fără sfârșit pentru a depana server și reinstalarea, am făcut totul într-un container Docker. Convenabil - pe gazdă nu este de un milion de dependențe, directoarele de mount pentru arhive, log fișiere și baze de date și totul funcționează. Restaurare - pentru a recrea containerul și hrana pentru animale de rezervă (de altfel, nu uitați să testați copiile de rezervă, cum face experiența GitLab, nu e prea mult).
Pe de altă parte, au dezvoltat de aplicație Rails care păstrează doar codul de pe o mașină reală; Sine, pietre, și totul se odihnește în Docker container. Pentru activitatea sa-l folosește Redis și Postgres, fiecare este în recipientul său. Pentru fiecare container director Montat care sunt importante pentru aceste aplicații nu merg înăuntru.

Scopul este de a Gitlab CI a lucrat în mod normal. Pare simplu, dar - el este în container.
Apropo, docher-compose.yml la cererea șine
În .env fișier este ca o parolă într-o bază de date, POSTGRES_PASSWORD. Aici puteți vedea ce variabile sunt folosite în containerul postgresql. În schimb, puteți utiliza porturile expune, ci pentru a monitoriza de la gazdă este mai bine pentru a deschide o fereastră către lume.
Prin Redis'u nici o observație, la toate - conectate, el expune la 6379, și să fie difuzate. Toată lumea ar fi așa.
Primul meu gând - instala Docker în Docker'e. Eu cred în umanitate, și ceea ce în lume este un om care pentru un timp rezonabil pentru a face un atașament real, instalarea Docker container, care funcționează într-adevăr, dar eu personal nu am reușit. Prin urmare, al doilea exemplu de realizare are nevoie - pentru a testa exterior: toate containerele trebuie să fie aproape de containerul GitLab, creat în mod automat și a distrus sistemul de CI în interiorul containerului.

Pentru testele, nu avem nevoie pentru a monta directorul extern, este încă date o singură dată. După testarea tuturor containerelor sunt oprite automat.
Sharim Docker
Nu se recomandă să dea programe în containere de acces neautentificate Docker'u la gazdă. Cu un astfel, puteți începe cu ușurință crea un alt container de pe gazdă, care va monta dosarul dorit sau chiar un întreg volum (sau dispozitive, de exemplu, un webcam sau o imprimantă), setați codul dorit al atacatorului, și încet trage toate dvs. Bitcoins, și toate acestea fără a părăsi Sandbox confortabil. Dar din moment ce eu sunt de testare codul meu, un avertisment poate fi ignorat.
Pentru a permite containerului să gestioneze tatăl său, este necesar să traverseze priza mamă. Într-o lume ideală, se face după cum urmează:
dar pentru cei care nu sunt în căutarea de modalități simple în viață, aceasta nu funcționează. Trebuie să adăugați în primul rând, de asemenea,
apoi descoperi că funcționează numai în cazul în care Dockers binarele pe static gazdă (nu cere), în caz contrar va trebui să aibă grijă de fiecare bibliotecă în acest director separat. În cazul în care binar docher gazdei dvs. nu este static (nu întreba!), Așa cum am, atunci de lucru pe.
A se vedea lista de biblioteci din / usr / bin / docher:
Mi-a luat doar biblioteca ibltdl.so.7, totul a fost în container, tot la fel nu va Gitlab Alphine Linux. Puteți verifica acest lucru utilizând containerul consola, determinând-o docher. vă va spune ce biblioteca nu. Conectați corect și încercați din nou. Dacă nu crezi că acest mod este mai ușor, instalați toate. El doar.
Prescriind Docker-compose.yml Gitlab'a (nu un proiect, nu se amestecă) mod care pare intuitiv, și a încercat să pornească un container Gitlab:
docher la începutul abuzului teribil de spargere, care a fost atât de greu încât aproape fiecare cuvânt a fost difuzat de șapte ori!
Asta este, avem nevoie de calea de fișier în partea dreaptă a plăcii cu biblioteci.
docher-compose.yml din Gitlab
Crearea .gitlab-ci.yml
Pentru a seta corect pentru acest fișier, este cel mai bine să se uite la cererea-docher compose.yml. De exemplu, containerul Postgres - conectați volumele care nu avem nevoie, nu este nevoie de fișierul env cu o parolă la baza de date (pentru că nu-mi pasă ce parola în baza de date, care trăiește timp de 10 secunde), porturile prea. Adică, nu este specifica doar numele fișierului imagine (imagine). Redis: volumele nu sunt necesare, astfel încât numai numele imaginii. Acest lucru este, în principal rubin, care se monteaza cod Gitlab și începe before_script.
în loc de un epilog
Pe configurat în acest mod poate fi înșurubată GitLab orice, de la imagini la Registry solutii Docker-in-docher. De exemplu, în loc de a implementa codul în container rubin GitLab înseamnă a crea o soluție bazată pe gitlab / dind, care rula docher construi. Dar aceasta este un subiect pentru un alt articol în întregime.
În această punere în aplicare, există două dezavantaje serioase:
1), orice dezvoltator poate aduce în jos întreaga infrastructură CI, adăugând comanda .gitlab-ci.yml pentru a șterge toate containerele.
2) Posibile probleme atunci când se execută mai multe conducte identice au fost, cum ar fi containere și posibile conflicte de nume pentru a partaja volume unități artefacte.
Opțiunea cu docher-in-docher funcționează bine, chiar și cu lansarea rotorului și gitlaba în containere.
Pot exista dificultăți, cum ar fi cireasa de mediu Peremyotnoye și certificate pentru registru privat în containere dind (gitlab-CI încă acest lucru nu se poate), dar ele gestiona crearea unei imagini personalizate dind certificate cusute.
Multumesc pentru comentarii.
Am fugit Docker-în-docher în container, și funcționează bine, dar pentru un proiect simplu, care docher-compose.yml transferat în liniște la .gitlab-ci.yml, și nu are nevoie de mai în profunzime tweaking, este redundantă. Am avut o idee scrisă în jos, pe baza imaginii în sine dind GitLab, așa că va fi gata să înceapă lucrul într-un recipient cu alte recipiente, dar pentru soluții de verificare mâinile nu au ajuns.