Пробуем GitLab Docker Container Registry и CI

docker-logoВ этом посте я расскажу, как поставить и запустить Docker Container Registry, а потом настроить continuous integration в докер контейнерах. Ведь очень удобно хранить в одном месте не только исходники, но и настройки для окружения в виде собранных докер образов. И это я еще не говорю о CI, которую с помощью GitLab развернуть довольно приятно. В общем, кому интересно – велкам под кат.

Подготавливаем сервер

Ставим свежую Ubuntu 16.04 и обновляем пакеты.

Устанавливаем GitLab

Нам нужна версия > 8.8, так что ставим по официальному мануалу. Для Postfix в диалоговом окне выбираем вариант Internet Site.

Дальше заходим на веб-морду, ставим пароль и логинимся под пользователем root и введенным ранее паролем. Создаем тестовый проект, заходим в его свойства и видим, что там в списке фич нет Container Registry.

docker-and-gitlab

Создаём сертификаты

Для работы по SSL для Docker нам понадобятся сертификаты. Генерировать мы будем их с помощью сервиса Let’s Encrypt.

Важно! Для корректной работы клиента Let’s Encrypt нам понадобится валидная A запись на DNS серверах на наш hostname. Создаём её у на DNS сервере (я использую веб-морду от pdd.yadnex.ru). Проверяем, что адрес резолвится в наш IP. Пробрасываем 80, 443, 22, 4567 порт через роутер на наш сервер, тестим telnet-ом. Ок, пошли дальше. Итак, что же произойдёт. Мы вырубим Nginx, освободим 80 и 443 порт. Запустим certbot-а, который займет на время работы эти порты, сделает запрос к серверу за сертификатом, сервер проверит, что домен принадлежит нам (сделав запрос на 80/443 порт), мы получим сертификат и клиент освободит порты. В терминологии certbot это называется standalone-получение сертификата. Есть еще опции, но этот вариант самый простой. Итак, поехали.

Тормозим сервисы gitlab-а.

Убаждаемся, что nginx потушен.

Качаем клиента Let’s Encrypt

После чего получаем такое сообщение:

Потом не забываем, что надо будет перевыпустить сертификаты, как эти кончатся. Отлично, заходим в папку /etc/letsencrypt/live/gitlab.site.ru/ и видим наши сертификаты.

Дальше редактируем файл /etc/gitlab/gitlab.rb

Теперь врубаем gitlab и переконфигурируем его.

Дальше открываем веб-морду, заходим в свойства нашего проекта и убеждаемся, что там появилась новая фича Container Registry.

docker-container-registry

Коннектимся клиентом

На клиентскую машину устанавливаем docker. Потом проверяем, что всё ок командой:

Коннектимся тоже обязательно через sudo:

Важное замечание!

@vaclav-adamec usually that message just means you aren’t running docker locally. I know it seems kind of stupid that you need to, but the docker CLI needs a local docker daemon even just to log in to a remote registry.

Т.е. даже если мы коннектимся к удалённому серверу Docker Registry, локальный Docker daemon должен быть запущен. И коннектиться надо из под того юзера, который запускал демон докера (в моем случае root).

Ну а теперь пробуем протестить наш репозиторий.

Дальше заходим в закладку “Registry” проекта и смотрим, что получилось.

image-success-nginx

Юзаем Docker Registry для CI

Ну а теперь надо сказать, а зачем вообще всё это нужно. Описывать длинно не буду, по картинке сами все поймете.

Docker-Workflow-Schema
Author: Dominique HAAS License: Creative Commons

Установка GitLab Runner

Runner – это софт, который собираем билд из исходников и docker образа. Есть различные типы runner-ов в GitLab, но нас сегодня интересует docker runner.

После регистрации видим runner-а в списке.
runner

После этого создаем в корне проекта файл с настройками CI.
.gitlab-ci.yml

И файлик, дополняющий образ.

./ci/docker_install.sh

Дальше пушим файлы на сервер и смотрим, как у нас автомагически 🙂 собирается проект и проходят типа юнит тесты.

build-history

А вот и логи билда.

build-success

Кстати, вот еще один неплохой GitLab Runner именно для PHP разработчика.

Резюме

GitLab CI отличное решение как для хранения кода, так и для проведения CI и даже не побоюсь этого слова деплоя. Это позволяет выкинуть другие инструменты и использовать единую платформу для разработки.

Ссылки

GitLab Maintenance commands
CertBot for certificate to GitLab Docker Registry properly working
GitLab, Docker and Let’s Encrypt
CertBot sources
http://docs.gitlab.com/ee/administration/container_registry.html#configure-container-registry-under-an-existing-gitlab-domain
http://docs.gitlab.com/omnibus/maintenance/README.html
Workflow with Docker
https://blog.ouvrard.it/2016/03/12/gitlab-docker-lets-encrypt/
Docker on Synology
https://gitlab.com/gitlab-org/gitlab-ce/issues/18635
Mon workflow Docker avec Gitlab-CI
GitLab Container Registry
GitLab CI examples testing PHP project

5 Comments

  1. При выпуске сертификатов получаю совершенно другой результат

    # tree /etc/letsencrypt/
    /etc/letsencrypt/
    ├── accounts
    │   └── acme-v02.api.letsencrypt.org
    │   └── directory
    │   └── d0a66a2ffed7e6e708a0854f70922c1d
    │   ├── meta.json
    │   ├── private_key.json
    │   └── regr.json
    ├── csr
    │   └── 0000_csr-certbot.pem
    ├── keys
    │   └── 0000_key-certbot.pem
    ├── renewal
    └── renewal-hooks
    ├── deploy
    ├── post
    └── pre

    11 directories, 5 files

Leave a Comment