Моя настройка модели "gitlab - всё в одном флаконе"
Предварительные замечания.
Модель развернута на машине во внутренней сети (192.168.10.252) за SNAT-шлюзом gla.csdiary.net.
SSL-порт на шлюзе перенаправлен (DNAT) на эту машину.
В качестве основы для настройки используем полезную статью.
1. Разворачиваем на машине Docker (ansible playbook).
2. Ставим gitlab контейнере по инструкции. В docker-compose.yml добавляем вывод порта 5000 на хост-машину для работы с registry.
web:
# image: 'gitlab/gitlab-ee:latest'
image: 'gitlab/gitlab-ce:14.3.0-ce.0'
restart: always
hostname: 'gla.csdiary.net'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://gla.csdiary.net'
gitlab_rails['gitlab_shell_ssh_port'] = 2224
# Add any other gitlab.rb configuration here, each on its own line
ports:
- '80:80'
- '443:443'
- '2224:22'
- '5000:5000'
volumes:
- '$GITLAB_HOME/config:/etc/gitlab'
- '$GITLAB_HOME/logs:/var/log/gitlab'
- '$GITLAB_HOME/data:/var/opt/gitlab'
3. Создаем пользователя и проект в gitlab'e.
4. Запоминаем registration token для runner'a (Settings-CI/CD-Runners).
5. Стартуем еще один контейнер с runner'ом:
docker run -d --name gitlab-runner-2 --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:v14.5.0
4. Заходим в контейнер и регистрируем runner.
gitlab-runner register \
--non-interactive \
--url "https://gla.csdiary.net" \
--registration-token "9cif8CsPxbCxBXN_zUSH" \
--executor "docker" \
--docker-image "docker:19.03.12" \
--description "docker-runner" \
--tag-list "wst1" \
--run-untagged="true" \
--locked="false" \
--access-level="not_protected" \
--docker-volumes /var/run/docker.sock:/var/run/docker.sock
Внимание! --url тут указан прямо на DNS-имя! До этого так не работало!
5. Включаем registry в составе gitlab'a. Ставим несколько параметров в настройках gitlab и переконфигурируем его. Я еще перезапускал контейнер.
registry_external_url 'https://gla.csdiary.net:5000'
registry['registry_http_addr'] = "localhost:5001"
nginx['ssl_certificate'] = "/etc/gitlab/ssl/gla.csdiary.net.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gla.csdiary.net.key"
Это по мотивам статьи.
6. Теперь делаем push в наш registry из job .gitlab-ci.yml
variables: ... DOCKER_REPO: gla.csdiary.net:5000
...
RecordImg: # variables: # DATE4BUILD: $(date "+%F_%H-%M_") # RELEASE_IMAGE_NGINX: $DOCKER_REPO/$IMAGE_BNAME_NGINX:latest stage: r12n tags: - wst1 script: - > for i in ${IMG_ARRAY}; do echo $CI_REGISTRY/$CI_PROJECT_PATH docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY/$CI_PROJECT_PATH cat /root/.docker/config.json docker tag $IMAGE_BNAME$i $CI_REGISTRY/$CI_PROJECT_PATH/$i:${DATE4BUILD}_$CI_BUILD_REF echo $CI_REGISTRY/$CI_PROJECT_PATH/$i:${DATE4BUILD}_$CI_BUILD_REF docker push $CI_REGISTRY/$CI_PROJECT_PATH/$i:${DATE4BUILD}_$CI_BUILD_REF docker tag $IMAGE_BNAME$i $CI_REGISTRY/$CI_PROJECT_PATH/$i:latest docker push $CI_REGISTRY/$CI_PROJECT_PATH/$i:latest done
Здесь команда docker login.... создает файлик /root/.docker/config.json чтобы больше никто
не спрашивал про пароль! И еще! Везде обращаемся к registry через встроенные переменные как
$CI_REGISTRY/$CI_PROJECT_PATH
После этого срабатывает push из jobs!
7. Теперь настраиваем возможность pull снаружи. Так будет забирать images, например, STAGE-машина.
Создаем access token (Settings-Access Tokens) с обязательными правами на api, read_api, read_registry, write_registry (клацаем по всем чекбоксам). Запоминаем токен.
8. Набираем все это в команде docker login... (на STAGE-машине с docker'ом).
docker login gla.csdiary.net:5000 -u gitlab+deploy-token-91931 -p WoxGcsXRyusaUz-57iav
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /home/vadim/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
в результате получим .docker/config.json
9. Можно забирать images с registry.
$docker pull gla.csdiary.net:5000/spvadim/workstation/redis:latest
latest: Pulling from spvadim/workstation/redis
59bf1c3509f3: Pull complete
719adce26c52: Pull complete
b8f35e378c31: Pull complete
d034517f789c: Pull complete
3772d4d76753: Pull complete
211a7f52febb: Pull complete
Digest: sha256:3e162b1cf37f164ded658edead9676f81f85d3d2d4b94b9de54ce1ee9a1036cd
Status: Downloaded newer image for gla.csdiary.net:5000/spvadim/workstation/redis:latest
gla.csdiary.net:5000/spvadim/workstation/redis:latest
====