Как да тествате контейнери с ROR gitlab CI контейнер

Като тест ROR контейнери GitLab CI контейнер 8

- като Forbes, само по-добре.

Какво добро GitLab, това е фактът, че е в размер на слон в стъкларски магазин, той е в състояние точно да се определят, и почти винаги работи с кутията. Но лошото е в състояние да се възстанови и да се грижи за себе си, когато то е много поредни ръце като ми нарушава обичайната си среда. Аз няма да отида в това как аз бях в състояние да го убие до точката, където дори до отстраняването и инсталацията от нулата не помогне, но за да се избегне още една безкрайна сага за отстраняване на грешки на сървъра и преинсталиране, направих всичко в контейнер Docker. Удобен - на хоста не е един милион зависимости, монтиране на директории за хранилища, лог файлове и база данни и всичко работи. Restore - за да пресъздаде на контейнера и се хранят на резервната (между другото, не забравяйте да тествате вашите архиви, как опитът на GitLab, това не е твърде много).

От друга страна, са се развили от Rails приложение, което поддържа само кода на истинска машина; Релси, скъпоценни камъни и всичко, което лежи в Docker контейнер. За работата си тя използва Redis и Postgres, всеки е в неговата опаковка. За всеки контейнер монтираната директория, които са важни за тези приложения не вървят вътре.

Как да тествате контейнери с ROR gitlab CI контейнер

Целта е да се Gitlab CI обикновено се обработва. Изглежда просто, но - той е в контейнера.

Между другото, докер-compose.yml за прилагането на релси


В .env файл е като парола за достъп до база данни, POSTGRES_PASSWORD. Тук можете да видите кои променливи се използват в PostgreSQL контейнер. Вместо това, можете да използвате пристанищата излагат, но да се следи от хоста е по-добре да се отвори прозорец към света.

Чрез Redis'u без забележки на всички - свързани, той се излага на 6379, и работи. Всеки ще бъде толкова.


Първата ми мисъл - инсталиране Docker в Docker'e. Аз вярвам в човечеството, и това, което в света е един човек, който в продължение на разумен период от време, за да се направи истинска връзка, инсталиране Docker контейнер, който наистина работи, но аз лично не успях. Следователно, на втория вариант се нуждае - да се тества отвън: всички контейнери трябва да бъде в близост до контейнера GitLab, създадени автоматично и унищожени CI система вътре в контейнера.

Как да тествате контейнери с ROR gitlab CI контейнер

За изпитванията, ние не трябва да се монтира външен директория, тя все още е данни еднократни. След тестване на всички контейнери са спрени автоматично.

Sharim Docker


Не се препоръчва да се даде ненадеждни програми в контейнери Docker'u достъп до хост. С такъв, можете лесно да започнете да създавате друг контейнер на хоста, който ще се монтира в желаната папка или дори цял обем (или устройства, например уеб камера или принтер), задаване на желания код на нападателя, и бавно изтеглете цялото си Bitcoins, както и всички, без да напускат уютен пясък. Но тъй като аз съм тестване на моя код, предупреждение може да бъде пренебрегната.
С цел да се даде възможност на съда да се управлява на баща си, че е необходимо да преминават през контакта родител. В един идеален свят, това е направено, както следва:


но за тези, които не търсят лесни начини в живота, тя не работи. Трябва да добавите на първо място също


Тогава откриваме, че тя работи само ако докерите двоичните файлове в статичната домакин (не питай), в противен случай ще трябва да се грижи за всяка библиотека в тази директория и поотделно. Ако докер двоичен вашия хост не е статичен (не питай!), Тъй като имам, а след това работим.

Вижте списъка на библиотеките в / ЮЕсАр / хамбар / Docker:

Отне ми само ibltdl.so.7 библиотека, всичко останало е в контейнера, все едно, че няма да Gitlab Alphine Linux. Можете да проверите това чрез използване на контейнера за конзола, карайки го докер. тя ще ви каже какво библиотеката не го прави. Свържете правилно и опитайте отново. Ако не мисля, че по този начин е по-лесно, да инсталирате всичко. Той току-що.


Предписването на докер-compose.yml Gitlab'a (не е проект, не се смесват) начин, който изглежда интуитивно, и се опита да започне контейнер Gitlab:


докер в началото на нахлу ужасна злоупотреба, че е толкова трудно, че почти всяка дума беше пуснат седем пъти!


Това е, ние се нуждаем пътя до файла на дясната страна на плочата с библиотеки.

Docker-compose.yml от Gitlab

Създаване .gitlab-ci.yml

За да се създаде правилно този файл, най-добре е да погледнете приложението докер-compose.yml. Например, контейнерът за Postgres - свържете обемите които не се нуждаем, не е необходимо файла ENV с парола на базата данни (защото не ми пука какво паролата в базата данни, която живее в продължение на 10 секунди), пристанищата прекалено. Това означава, че там се посочва само името на графичния файл (изображение). Redis: обеми не са необходими, така че само името на изображението. Това е главно рубин, който монтира Gitlab код и да започне before_script.

вместо епилог


На конфигуриран по този начин може да се завинтва GitLab нищо от изображения към по вписванията Docker-в-докер решения. Например, вместо разполагане на кода в рубин контейнер GitLab означава да се създаде решение, базирано на gitlab / dind, която тече докер натрупване. Но това е тема за друга статия изцяло.

В това изпълнение, има два сериозни недостатъка:
1), всеки разработчик може да свали цялата CI инфраструктура, добавяйки .gitlab-ci.yml команда, за да изтриете всички контейнери.
2) Възможни проблеми, когато се изпълняват няколко идентични тръби са такива като контейнери и възможен конфликт на имена да споделят обеми дискове артефакти.
Вариант с докер-в-докер работи добре, дори и със стартирането на класиралият се на второ и gitlaba в контейнери.
Възможно е да има затруднения, като пудра Peremyotnoye среда и сертификати за лично регистър в dind контейнер (gitlab-CI все още това не може), но те управляват създаването на персонализирано изображение dind пришити сертификати.

Благодаря за коментарите.

Тичах Docker-в-докер в контейнера, и тя работи добре, но за един прост проект, който Docker-compose.yml тихо прехвърлени към .gitlab-ci.yml, и не е необходимо по-задълбочено да променяте, като е излишно. Имах идея записано въз основа на изображението се dind GitLab, така че той ще бъде готов да започне работа в контейнер с други контейнери, но и за решения за установяване на ръцете не достигат.