Решение для изолированной сборки Docker-образов с кэшированием зависимостей в условиях ограниченного доступа к интернету.
-
Полная изоляция: Возможна работа без доступа к Docker Hub и внешним репозиториям Go
-
Кэширование артефактов:
- Docker-образы через Nexus Proxy (Docker Hub mirror)
- Golang-модули через Go Proxy
-
IaC: Использование Ansible для автоматизации развёртывания
+----------------+ +-----------------+ +---------------+
| GitLab CE | | GitLab Runner | | Nexus 3 |
| (Code Hosting) |<------>| (CI/CD Executor)|<------>| (Artifacts & |
| | | | | Dependencies)|
+----------------+ +-----------------+ +---------------+
-
GitLab CE (Docker-контейнер):
- Хостинг репозиториев
- Управление пайплайнами
-
GitLab Runner (Docker-контейнер):
- Выполнение CI/CD задач
-
Nexus 3 (Docker-контейнер):
-
Репозитории:
docker-hosteddocker-proxygolang-proxy
-
- 3 ВМ с Debian 12
- SSH-доступ к ВМ
- Статические IP для каждой ВМ
- Минимум 4 ГБ ОЗУ на каждой ВМ
- Протестировано с Ansible 2.16+
git clone git@github.com:Jubastik/Stable-Build.git
cd Stable-Build/ansiblecp inventory.example inventorynano inventoryГлавные настройки расположены в group_vars/all
cd group_vars
cp all.yml.example all.yml
nano all.ymlОстальные файлы не содержат критических настроек:
cp nexus.yml.example nexus.yml
nano nexus.ymlcp gitlab.yml.example gitlab.yml
nano gitlab.ymlcp gitlab_runners.yml.example gitlab_runners.yml
nano gitlab_runners.yml
cd ..ansible-galaxy install -r requirements.ymlansible-playbook deploy.ymlНеобходимо принять License Agreement при первом входе, а также разрешить Anonymous Access.
Эти настройки производятся во всплывающем окне после успешного входа.
P.S. Эти параметры невозможно настроить через API, поэтому требуется ручное вмешательство.
Для глобального раннера: перейдите в Admin -> CI/CD -> Runners -> Create instance runner.
Скопируйте runner authentication token.
cd group_vars
nano all.yml
"install_gitlab_runners: true
gitlab_runner_runners/token: <скопированный ранее токен>"
cd ..ansible-playbook deploy.yml- Админ-панель Nexus:
http://<NEXUS_IP>:8081 - docker-proxy репозиторий (прокси для Docker Hub):
http://<NEXUS_IP>:5000 - docker-hosted репозиторий (локальный):
http://<NEXUS_IP>:5001 - golang-proxy репозиторий (прокси для Go Modules):
http://<NEXUS_IP>:8081/repository/go-proxy/ - Анонимный пользователь имеет права только на чтение golang-proxy репозитория
- GitLab UI:
http://<GITLAB_IP>/
- Раннеры автоматически регистрируются в GitLab по токену
- Добавить поддержку SSL
- Добавить отдельного пользователя для Nexus
- Настроить Cleanup Policy для Nexus

