Розбіжності
Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.
| Порівняння попередніх версій Попередня ревізія | |||
| devops:jenkins [14/11/2025 22:59] – створено osvex | devops:jenkins [14/11/2025 23:00] (поточний) – osvex | ||
|---|---|---|---|
| Рядок 1: | Рядок 1: | ||
| - | `====== Автоматизація деплою стеку моніторингу за допомогою Jenkins + Ansible + Git ======` | + | ====== Автоматизація деплою стеку моніторингу за допомогою Jenkins + Ansible + Git ====== |
| Ця стаття — шпаргалка з налаштування безпечного CI/CD пайплайну " | Ця стаття — шпаргалка з налаштування безпечного CI/CD пайплайну " | ||
| - | **Мета: | + | **Мета: |
| ----- | ----- | ||
| - | `===== Архітектура рішення =====` | + | ===== Архітектура рішення ===== |
| Ми використовуємо модель із **поділом обов' | Ми використовуємо модель із **поділом обов' | ||
| Рядок 13: | Рядок 13: | ||
| * **Git (GitHub):** Єдине " | * **Git (GitHub):** Єдине " | ||
| - | * **Ansible (на хост-сервері): | + | * **Ansible (на хост-сервері): |
| - | * **Jenkins (в Docker):** " | + | * **Jenkins (в Docker):** " |
| ----- | ----- | ||
| - | `===== Крок 1: Налаштування Ansible (Виконавець) на хост-сервері =====` | + | ===== Крок 1: Налаштування Ansible (Виконавець) на хост-сервері ===== |
| - | Все це виконується на сервері | + | Все це виконується на сервері sim-serv (наприклад, |
| - | `==== Встановлення Ansible та Docker-бібліотек ====` | + | ==== Встановлення Ansible та Docker-бібліотек ==== |
| \<code bash\> | \<code bash\> | ||
| Рядок 43: | Рядок 43: | ||
| \</ | \</ | ||
| - | `==== Створення робочої папки та файлів Ansible ====` | + | ==== Створення робочої папки та файлів Ansible ==== |
| - | Ми зберігаємо всі конфігурації Ansible у `/ | + | Ми зберігаємо всі конфігурації Ansible у / |
| - | **1. Файл | + | **1. Файл inventory (де виконувати): |
| - | Це наш список серверів. Оскільки Ansible керує сам собою, ми використовуємо | + | Це наш список серверів. Оскільки Ansible керує сам собою, ми використовуємо localhost. |
| \<code ini\> | \<code ini\> | ||
| Рядок 61: | Рядок 61: | ||
| \</ | \</ | ||
| - | **2. Файл | + | **2. Файл deploy_monitoring.yml (що робити): |
| Це " | Це " | ||
| Рядок 107: | Рядок 107: | ||
| ----- | ----- | ||
| - | `===== Крок 2: Налаштування Jenkins (Оркестратор) в Docker =====` | + | ===== Крок 2: Налаштування Jenkins (Оркестратор) в Docker ===== |
| Jenkins запускається у власному ізольованому Docker-контейнері. | Jenkins запускається у власному ізольованому Docker-контейнері. | ||
| - | ` ==== `docker-compose.yml` для Jenkins ==== ` | + | ==== docker-compose.yml для Jenkins ==== |
| - | Це **безпечна** конфігурація. Ми **НЕ** використовуємо | + | Це **безпечна** конфігурація. Ми **НЕ** використовуємо user: root і **НЕ** прокидаємо docker.sock. Єдиний зв' |
| \<code yaml\> | \<code yaml\> | ||
| Рядок 131: | Рядок 131: | ||
| restart: unless-stopped | restart: unless-stopped | ||
| - | ``` | + | \\ |
| # Секція 'user: root' видалена для безпеки | # Секція 'user: root' видалена для безпеки | ||
| Рядок 145: | Рядок 144: | ||
| - " | - " | ||
| - | - " | + | - " |
| - " | - " | ||
| Рядок 169: | Рядок 168: | ||
| - shared_traefik | - shared_traefik | ||
| - | ``` | + | \\ |
| networks: | networks: | ||
| Рядок 179: | Рядок 177: | ||
| \</ | \</ | ||
| - | `==== Встановлення прав на папку Jenkins ====` | + | ==== Встановлення прав на папку Jenkins ==== |
| - | Оскільки Jenkins тепер працює від імені користувача | + | Оскільки Jenkins тепер працює від імені користувача jenkins (UID 1000), ми повинні надати йому права на " |
| \<code bash\> | \<code bash\> | ||
| Рядок 189: | Рядок 187: | ||
| \</ | \</ | ||
| - | `==== Необхідні плагіни Jenkins ====` | + | ==== Необхідні плагіни Jenkins ==== |
| У Jenkins (через **Manage Jenkins -\> Plugins**) мають бути встановлені: | У Jenkins (через **Manage Jenkins -\> Plugins**) мають бути встановлені: | ||
| Рядок 199: | Рядок 197: | ||
| ----- | ----- | ||
| - | `===== Крок 3: Налаштування " | + | ===== Крок 3: Налаштування " |
| - | Ми створюємо два окремих SSH-ключа для двох різних завдань. Вони зберігаються у `/ | + | Ми створюємо два окремих SSH-ключа для двох різних завдань. Вони зберігаються у / |
| - | `==== Ключ 1: Для підключення до GitHub (`id\_rsa`) ====` | + | ==== Ключ 1: Для підключення до GitHub (id\_rsa) ==== |
| - | 1. **Налаштування Jenkins:** Перейдіть у **Manage Jenkins -\> Credentials -\> Global** та додайте | + | 1. **Налаштування Jenkins:** Перейдіть у **Manage Jenkins -\> Credentials -\> Global** та додайте SSH Username with private key: |
| - | * **ID: | + | * **ID:** github-ssh-key |
| - | * **Username: | + | * **Username: |
| - | * **Private Key:** (Вміст | + | * **Private Key:** (Вміст id_rsa) |
| - | 2. **Налаштування GitHub:** Перейдіть у **Репозиторій -\> Settings -\> Deploy keys** та додайте публічний ключ (вміст | + | 2. **Налаштування GitHub:** Перейдіть у **Репозиторій -\> Settings -\> Deploy keys** та додайте публічний ключ (вміст id_rsa.pub). |
| - | `==== Ключ 2: Для підключення до хоста (Ansible) (`id\_rsa\_ansible`) ====` | + | ==== Ключ 2: Для підключення до хоста (Ansible) (id\_rsa\_ansible) ==== |
| - | 1. **Налаштування Jenkins:** Перейдіть у **Manage Jenkins -\> Credentials -\> Global** та додайте | + | 1. **Налаштування Jenkins:** Перейдіть у **Manage Jenkins -\> Credentials -\> Global** та додайте SSH Username with private key: |
| - | * **ID: | + | * **ID:** ansible-ssh-key |
| - | * **Username: | + | * **Username: |
| - | * **Private Key:** (Вміст | + | * **Private Key:** (Вміст id_rsa_ansible) |
| - | 2. **Налаштування хост-сервера: | + | 2. **Налаштування хост-сервера: |
| \<code bash\> | \<code bash\> | ||
| Рядок 235: | Рядок 233: | ||
| \</ | \</ | ||
| - | ` ==== Налаштування | + | ==== Налаштування known\_hosts (у Jenkins) ==== |
| Jenkins повинен " | Jenkins повинен " | ||
| Рядок 251: | Рядок 249: | ||
| \</ | \</ | ||
| - | `==== Налаштування GitHub Webhook ====` | + | ==== Налаштування GitHub Webhook ==== |
| У **Репозиторій -\> Settings -\> Webhooks** додайте новий Webhook: | У **Репозиторій -\> Settings -\> Webhooks** додайте новий Webhook: | ||
| - | * **Payload URL: | + | * **Payload URL:** https:// |
| - | * **Content type: | + | * **Content type:** application/ |
| ----- | ----- | ||
| - | ` ===== Крок 4: Фінальний | + | ===== Крок 4: Фінальний Jenkinsfile (Мозок) ===== |
| Цей файл лежить у корені вашого Git-репозиторію моніторингу. Він описує всю логіку пайплайну. | Цей файл лежить у корені вашого Git-репозиторію моніторингу. Він описує всю логіку пайплайну. | ||
| Рядок 273: | Рядок 271: | ||
| agent any // Запускати на будь-якому агенті | agent any // Запускати на будь-якому агенті | ||
| - | ``` | + | \\ |
| stages { | stages { | ||
| Рядок 345: | Рядок 342: | ||
| } | } | ||
| - | ``` | + | \\ |
| } | } | ||
| Рядок 353: | Рядок 349: | ||
| ----- | ----- | ||
| - | `===== Фінальний потік роботи (Workflow) =====` | + | ===== Фінальний потік роботи (Workflow) ===== |
| - | 1. Ви робите | + | 1. Ви робите git push зі змінами у docker-compose.yml або prometheus.yml. |
| - | 2. GitHub " | + | 2. GitHub " |
| - | 3. Jenkins " | + | 3. Jenkins " |
| - | 4. Етап " | + | 4. Етап " |
| - | 5. Jenkins виконує команду: | + | 5. Jenkins виконує команду: |
| 6. Ansible (на хості) виконує плейбук: | 6. Ansible (на хості) виконує плейбук: | ||
| - | * Заходить у `/ | + | * Заходить у / |
| - | * Запускає | + | * Запускає docker compose up -d ... |
| 7. Jenkins отримує " | 7. Jenkins отримує " | ||