Skip to content

Jubastik/Stable-Build

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Автономная CI/CD инфраструктура с GitLab, Nexus и Docker. Автоматизация через Ansible

Решение для изолированной сборки 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)|
+----------------+        +-----------------+        +---------------+

Компоненты

  1. GitLab CE (Docker-контейнер):

    • Хостинг репозиториев
    • Управление пайплайнами
  2. GitLab Runner (Docker-контейнер):

    • Выполнение CI/CD задач
  3. Nexus 3 (Docker-контейнер):

    • Репозитории:

      • docker-hosted
      • docker-proxy
      • golang-proxy

⚙️ Установка

Предварительные требования

  • 3 ВМ с Debian 12
  • SSH-доступ к ВМ
  • Статические IP для каждой ВМ
  • Минимум 4 ГБ ОЗУ на каждой ВМ
  • Протестировано с Ansible 2.16+

1. Клонируйте репозиторий

git clone git@github.com:Jubastik/Stable-Build.git
cd Stable-Build/ansible

2. Создайте inventory-файл на основе примера

cp inventory.example inventory

3. Отредактируйте inventory-файл

nano inventory

4. Создайте и настройте файлы переменных

Главные настройки расположены в group_vars/all

cd group_vars
cp all.yml.example all.yml
nano all.yml

Остальные файлы не содержат критических настроек:

cp nexus.yml.example nexus.yml
nano nexus.yml
cp gitlab.yml.example gitlab.yml
nano gitlab.yml
cp gitlab_runners.yml.example gitlab_runners.yml
nano gitlab_runners.yml
cd ..

5. Установите зависимости Ansible

ansible-galaxy install -r requirements.yml

6. Запустите плейбук

ansible-playbook deploy.yml

7. Зайдите в Nexus

Необходимо принять License Agreement при первом входе, а также разрешить Anonymous Access. Эти настройки производятся во всплывающем окне после успешного входа.

P.S. Эти параметры невозможно настроить через API, поэтому требуется ручное вмешательство.

8. Создайте раннер в GitLab UI

Для глобального раннера: перейдите в Admin -> CI/CD -> Runners -> Create instance runner. Скопируйте runner authentication token.

9. Настройте блок GitLab Runner configuration в all.yml

cd group_vars
nano all.yml
"install_gitlab_runners: true
gitlab_runner_runners/token: <скопированный ранее токен>"
cd ..

10. Запустите плейбук

ansible-playbook deploy.yml

🚀 Использование

Поведение по умолчанию:

Nexus

  • Админ-панель 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

  • GitLab UI: http://<GITLAB_IP>/

GitLab Runner

  • Раннеры автоматически регистрируются в GitLab по токену

Пример CI/CD пайплайна находится по пути Stable-Build/app_example

Пример успешного прохождения первого этапа

Этап 1

Пример успешного прохождения второго этапа

Этап 2

TODO

  • Добавить поддержку SSL
  • Добавить отдельного пользователя для Nexus
  • Настроить Cleanup Policy для Nexus

About

Система сборки кода с защитой от внешних сбоев - Gitlab + Nexus + Ansible

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors